導入近年、AIは広く注目を集めており、Kubernetesを活用したDevOpsも例外ではありません。ソフトウェアエンジニアは自動化を強く支持しているため、Kubernetesオペレーター向けのAI活用ツールも自然と登場し始めています。 これらのツールのほとんどは、ターミナル(CLI)での使用向けに設計されています。Kubernetesはコンテナオーケストレーションプラットフォームであり、AI駆動型ツールの助けを借りれば、タスクの自動化、信頼性の向上、インサイトの提供といった分野でKubernetesをより深く理解できるようになります。 OpenAIは、Kubernetes AIOpsにとって最も有望なAIプラットフォームの一つです。Kubernetes向けのAI駆動型ソリューションを構築するためのオープンソースツールスイートを提供しています。本稿では、OpenAIのオープンソースツールがKubernetes AIOpsの実装にどのように役立つかを2部構成で解説します。 概要Kubernetesユーザーは、ポッドやサービスの円滑な動作を確保するために、デバッグと修正が必要となるクラスターの問題に必ず遭遇します。これは特にクラウドネイティブDevOpsにおいて顕著で、コンテナ、マイクロサービス、自動スケーリングの管理が複雑になることがあります。GenAIは、Kubernetesのようなプラットフォームに特有のタスクのトラブルシューティングと実行を支援します。これには、自然言語プロンプトを使用した起動、ロールバック、クラスターの可視性の確保などが含まれます。 例えば、KubiyaはKubeCon + CloudNativeCon 2023で、Slack内でそのようなコマンドを解釈できる生成AIワークフローエンジンを初めて披露しました。自然言語処理機能を拡張することで、プラットフォームチームは新しいワークフローを作成し、クラウドネイティブプラットフォームでの作業の複雑さを抽象化することができます。 K8sGPTK8sGPTは、AIモデルを用いてKubernetesのエラーメッセージを解釈し、クラスターに関する洞察を提供する比較的新しいオープンソースプロジェクトです。2つの組織によって本番環境で使用されており、CNCFサンドボックスプロジェクトへの申請も行っています。 主な機能は次のとおりです。
Kubernetes (K8sGPT) プロジェクトは、同種の CLI ツールの中で最も有名で広く使用されているものの 1 つです。その主要コマンドは さらに印象的なのは、K8sgptに何ができるか説明を求めることです。これを行うには、コマンド インストール設定とオペレーティングシステムに応じて、複数のインストールオプションがあります。ドキュメントのインストールセクションで、さまざまなオプションを確認できます。K8sGPTをインストールするには、MacにHomebrewがインストールされている、またはWindowsマシンにWSLがインストールされていることが前提条件となります。 次に、次のコマンドを実行できます。 ブリュータップ k8sgpt-ai/k8sgpt brew install k8sgpt K8sGPT が提供するすべてのコマンドを表示するには、 k8sgpt --ヘルプ 前提条件次のステップの前提条件は、OpneAI アカウントと実行中の Kubernetes クラスターがあることです。microk8s や minikube などの任意のクラスターで十分です。 OpneAI アカウントを取得したら、OpneAI の Web サイトにアクセスして新しい API キーを生成する必要があります。 あるいは、次のコマンドを実行すると、K8sGPT はデフォルトのブラウザで同じ Web サイトを開きます。 k8sgpt生成 このキーは、K8sGPTがOpenAIと連携するために必要です。新しく作成したAPIキー/トークンを使用してK8sGPTを承認してください。 k8sgpt認証をOpenAIに追加 openaiキーを入力: openaiがAIバックエンドプロバイダーリストに追加されました バックエンドを一覧表示するには、次のコマンドを使用できます。 k8sgpt認証リスト デフォルト: openai アクティブ: openai 未使用: > ローカル > アズレオオープン > ヌーパイ 次に、Kubernetesクラスターに悪意のあるデプロイメントをインストールします。このポッドはCrashLoopBackOffモードに入ります。YAMLは以下のとおりです。 apiバージョン: apps/v1 種類: デプロイメント メタデータ: 名前: nginx-deployment ラベル: アプリ: nginx 仕様: レプリカ: 3 セレクタ: 一致ラベル: アプリ: nginx テンプレート: メタデータ: ラベル: アプリ: nginx 仕様: コンテナ: - 名前: nginx イメージ: nginx:1.14.2 ポート: - コンテナポート: 80 セキュリティコンテキスト: readOnlyRootFilesystem: true 次に、サンプル アプリケーション専用のネームスペースを作成し、デプロイメントをインストールします。 kubectl create ns デモ 名前空間/デモを作成しました kubectl apply -f ./deployment.yaml -n デモ deployment.apps/nginx-deployment が作成されました ここで、デモ名前空間のポッドにエラーが表示されます。 いずれかのポッドのイベントを表示したい場合は、次のように表示されます。 警告バックオフ 3 秒 (87 秒を超える x8) kubelet バックオフが失敗したコンテナの再起動中 したがって、K8sGPT コマンドを実行して、これらのポッド エラーの原因に関するより詳細な情報を取得できます。 k8sgpt分析 これにより、K8sGPT がクラスター内で検出した問題が表示されます。 AIプロバイダー: openai 問題を解決するための詳細情報や提案が必要な場合は、 k8sgpt 分析 --explain 0 デモ/nginx-deployment-5f4c7db77b-hq74n(デプロイメント/nginx-deployment) - エラー: バックオフ 1 分 20 秒の再起動に失敗しました コンテナ = nginx ポッド = nginx-deployment-5f4c7db77b-hq74n_demo(7854b793-21b7-4f81-86e5-dbb4113f64f4)1 demo/nginx-deployment-5f4c7db77b-phbq8(Deployment/nginx-deployment) - エラー: バックオフ 1 分 20 秒の再起動に失敗しました コンテナ = nginx ポッド = nginx-deployment-5f4c7db77b-phbq8_demo(74038531-e362-45a6-a436-cf1a6ea46d8a)2 demo/nginx-deployment-5f4c7db77b-shkw6(Deployment/nginx-deployment) - エラー: バックオフ 1 分 20 秒の再起動に失敗しました。コンテナ = nginx ポッド = nginx-deployment-5f4c7db77b-shkw6_demo(2603f332-3e1c-45da-8080-e34dd6d956ad) kubectl-aiこのプロジェクトは、GTPを使用してKubernetesマニフェストを生成・適用する インストール自家醸造: 醸造タップ sozercan/kubectl-ai https://github.com/sozercan/kubectl-aibrew install kubectl-ai Krew : 使用する前に kubectl krew インデックス kubectl-ai を追加 https://github.com/sozercan/kubectl-aikubectl krew インストール kubectl-ai/kubectl-ai 前提条件
これらのツールでは、次の環境変数を使用できます。 export OPENAI_API_KEY=<OpenAIキー>export OPENAI_DEPLOYMENT_NAME=<OpenAIデプロイメント/モデル名。デフォルトは「gpt-3.5-turbo-0301」>export OPENAI_ENDPOINT=<OpenAIエンドポイント(「https://my-aoi-endpoint.openai.azure.com」や「http://localhost:8080/v1」など)> Azure OpenAIサービスでは、デプロイメント名に AZURE_OPENAI_MAP="gpt-3.5-turbo=my-deployment" をエクスポートします。 デモンストレーションNginx Podのコマンド: kubectl ai 「nginx ポッドを作成」 kubectl ai "nginx podを作成"✨ 次のマニフェストを適用しようとしています: apiバージョン: v1 種類: ポッド メタデータ: 名前: nginx-pod 仕様: コンテナ: - 名前: nginx 画像: nginx ポート: - containerPort: 80矢印キーを使用して移動します: ↓ ↑ → ← ? これを適用しますか? [再プロンプト/適用する/適用しない]: + 再プロンプト ▸ 応募する 応募しない デプロイメント: 「再プロンプト」を選択し、「これをデプロイメントにする」と入力します。 再プロンプト:これを展開する ✨ 次のマニフェストを適用しようとしています: apiバージョン: apps/v1 種類: デプロイメント メタデータ: 名前: nginx-deployment 仕様: レプリカ: 1 セレクタ: 一致ラベル: アプリ: nginx テンプレート: メタデータ: ラベル: アプリ: nginx 仕様: コンテナ: - 名前: nginx 画像: nginx:1.7.9 ポート: - コンテナポート: 80 レプリカセット: 再プロンプト: 3 つのレプリカにスケールする 再プロンプト: 3 つのレプリカにスケールする ✨ 次のマニフェストを適用しようとしています: apiバージョン: apps/v1 種類: デプロイメントメタデータ: 名前: nginx-deploymentspec: レプリカ: 3 セレクタ: 一致ラベル: アプリ: nginx テンプレート: メタデータ: ラベル: アプリ: nginx 仕様: コンテナ: - 名前: nginx 画像: nginx ポート: - コンテナポート: 80 コピロットKoPylotは、AIを搭載したオープンソースのKubernetesヘルパーです。開発者やDevOpsエンジニアがKubernetesクラスターを簡単に管理・監視できるようにすることを目指しています。 関数現在のバージョンでは、KoPylot には4つの主要な機能があります。これらの機能は 監査:ポッド、デプロイメント、サービスなどのリソースを監査します。KoPylot は、個々のリソースのマニフェストファイルに基づいて脆弱性を検索します。 チャット:KoPylotに簡単な英語で質問して、kubectlコマンドを生成してください。コマンドを実行する前にプレビューできます。 診断:診断ツールを使用して、アプリケーションのさまざまなコンポーネントをデバッグできます。診断コマンドは、破損したリソースを修復するための可能な方法を一覧表示します。 Ctl : kubectl のラッパーです。ctl サブコマンドに渡されるすべての引数は kubectl によって解釈されます。 動作原理現在、KoPylotはKubernetesリソース記述(kubectl describe ...)またはマニフェストから情報を抽出し、プロンプトとともにOpenAIのDavinciモデルに入力することで動作します。プロンプトは、モデルにKubernetesリソースの処理方法を指示します。 プロンプトは、モデルに出力の構築方法も指示します。例えば、Auditコマンドのプロンプトは、脆弱性とその重大度を含む2列のJSON形式で結果を出力するようモデルに指示します。 ロードマップの目標の一つは、OpenAIモデルを社内ホスト型モデルに置き換えることです。これにより、機密性の高い可能性のあるデータをOpenAIサーバーに送信するという問題に対処できます。 KoPylot を使用するには、次の手順に従ってください。
エクスポート KOPYLOT_AUTH_TOKEN=
pip インストール kopylot
コピーロット --ヘルプ 総じて、KoPylotはKubernetesワークロードの診断とトラブルシューティングに役立つツールです。WebベースのチャットインターフェースとCLIにより使いやすく、あらゆるレベルのユーザーに適しています。 コパイロットKopilot は、これらのプロジェクトの中で唯一 Go で書かれたものです。トラブルシューティングと監査という 2 つの機能を備えています。 インストールmacOS : brew install knight42/tap/kopilot クルー: kubectl krew で kopilot をインストール 現在、Kopilot を実行するには 2 つの ENV を構成する必要があります。
利点
ポッドがスタックしたり、 さらに、 この記事のパート1では、主に4つのAIツール(K8sGPT、kubectl-ai、KoPylot、Kopilot)について紹介しました。パート2では、この議論をさらに進め、K8sの利用プロセスを簡素化するツールをさらに紹介します。どうぞお楽しみに! |