HUOXIU

Kubernetesをもっとシンプルに!絶対に知っておくべき8つのAIツール - パート1

導入

近年、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ワークフローエンジンを初めて披露しました。自然言語処理機能を拡張することで、プラットフォームチームは新しいワークフローを作成し、クラウドネイティブプラットフォームでの作業の複雑さを抽象化することができます。

K8sGPT

K8sGPTは、AIモデルを用いてKubernetesのエラーメッセージを解釈し、クラスターに関する洞察を提供する比較的新しいオープンソースプロジェクトです。2つの組織によって本番環境で使用されており、CNCFサンドボックスプロジェクトへの申請も行っています。

主な機能は次のとおりです。

  • Kubernetes エラー メッセージの詳細なコンテキスト説明を提供します。
  • クラスターの洞察を提供する
  • 複数のインストールオプションをサポート
  • さまざまなAIバックエンドをサポート

Kubernetes (K8sGPT) プロジェクトは、同種の CLI ツールの中で最も有名で広く使用されているものの 1 つです。その主要コマンドはk8sgpt analyzeで、 Kubernetes クラスター内の問題を明らかにすることを目的としています。これはアナライザーを使用して行われます。これらのアナライザーは、各 Kubernetes オブジェクトのロジックと、発生する可能性のある問題を定義します。例えば、Kubernetes Services のアナライザーは、特定のサービスが存在するかどうか、エンドポイントがあるかどうか、エンドポイントが準備完了かどうかを確認します。

さらに印象的なのは、K8sgptに何ができるか説明を求めることです。これを行うには、コマンドk8sgpt analyze --explainを実行する必要があります。これにより、AIが具体的な状況の説明を生成し、表示します。説明にはトラブルシューティングの手順や具体的なkubectlコマンドが含まれており、コピー&ペーストするだけで実行できます。これは、Kubernetesリソース名が既に設定されているため可能です。

インストール

設定とオペレーティングシステムに応じて、複数のインストールオプションがあります。ドキュメントのインストールセクションで、さまざまなオプションを確認できます。K8sGPTをインストールするには、MacにHomebrewがインストールされている、またはWindowsマシンにWSLがインストールされていることが前提条件となります。

次に、次のコマンドを実行できます。

ブリュータップ k8sgpt-ai/k8sgpt
brew install k8sgpt 

K8sGPT が提供するすべてのコマンドを表示するには、 - helpフラグを使用します。

 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 

問題を解決するための詳細情報や提案が必要な場合は、 --explainフラグを使用できます。

 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マニフェストを生成・適用するkubectlプラグインです。より興味深く、視覚的に理解しやすいように、Kubectl + OpenAIを活用します。

インストール

自家醸造: brewタップに追加してインストールします。

醸造タップ sozercan/kubectl-ai https://github.com/sozercan/kubectl-aibrew install kubectl-ai 

Krew : 使用する前にkrewインデックスに追加します。

 kubectl krew インデックス kubectl-ai を追加 https://github.com/sozercan/kubectl-aikubectl krew インストール kubectl-ai/kubectl-ai 

前提条件

kubectl-aiは、有効な Kubernetes 構成と次のいずれかの条件が必要です。

  • OpenAI APIキー
  • Azure OpenAI サービス API キーとエンドポイント
  • ローカル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」など)> 

OPENAI_ENDPOINT変数が設定されている場合はエンドポイントが使用されます。設定されていない場合はOpenAI APIが使用されます。

Azure OpenAIサービスでは、デプロイメント名に.などの特定の文字は使用できません。そのため、Azureの場合、kubectl-aiはgpt-3.5-turbogpt-35-turboに自動的に置き換えます。ただし、Azure OpenAIデプロイメント名がモデル名と完全に異なる場合は、 AZURE_OPENAI_MAP環境変数を設定することで、モデル名を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 CLI のサブコマンドに変換できます。これらのサブコマンドは、Audit、Chat、Diagnose、Ctlです。それでは、これらのコマンドについて詳しく見ていきましょう。

監査:ポッド、デプロイメント、サービスなどのリソースを監査します。KoPylot は、個々のリソースのマニフェストファイルに基づいて脆弱性を検索します。

チャット:KoPylotに簡単な英語で質問して、kubectlコマンドを生成してください。コマンドを実行する前にプレビューできます。

診断:診断ツールを使用して、アプリケーションのさまざまなコンポーネントをデバッグできます。診断コマンドは、破損したリソースを修復するための可能な方法を一覧表示します。

Ctl : kubectl のラッパーです。ctl サブコマンドに渡されるすべての引数は kubectl によって解釈されます。

動作原理

現在、KoPylotはKubernetesリソース記述(kubectl describe ...)またはマニフェストから情報を抽出し、プロンプトとともにOpenAIのDavinciモデルに入力することで動作します。プロンプトは、モデルにKubernetesリソースの処理方法を指示します。

プロンプトは、モデルに出力の構築方法も指示します。例えば、Auditコマンドのプロンプトは、脆弱性とその重大度を含む2列のJSON形式で結果を出力するようモデルに指示します。

ロードマップの目標の一つは、OpenAIモデルを社内ホスト型モデルに置き換えることです。これにより、機密性の高い可能性のあるデータをOpenAIサーバーに送信するという問題に対処できます。

KoPylot を使用するには、次の手順に従ってください。

  • OpenAI から API キーを申請します。
  • 次のコマンドを使用してキーをエクスポートします。
エクスポート KOPYLOT_AUTH_TOKEN= 
  • pip を使用して Kopylot をインストールします。
 pip インストール kopylot 
  • Kopylotの実行
コピーロット --ヘルプ

総じて、KoPylotはKubernetesワークロードの診断とトラブルシューティングに役立つツールです。WebベースのチャットインターフェースとCLIにより使いやすく、あらゆるレベルのユーザーに適しています

コパイロット

Kopilot は、これらのプロジェクトの中で唯一 Go で書かれたものです。トラブルシューティングと監査という 2 つの機能を備えています。

インストール

macOS :

 brew install knight42/tap/kopilot 

クルー:

 kubectl krew で kopilot をインストール

現在、Kopilot を実行するには 2 つの ENV を構成する必要があります。

  • トークンを指定するには、 KOPILOT_TOKENを設定します。
  • KOPILOT_LANGを設定して言語を指定します。デフォルトはEnglishです。有効なオプションには、 ChineseFrenchSpainなどがあります。

利点

  • クラスター内の異常なワークロードを診断し、その理由を説明します。

  • Kubernetes リソースを監査し、セキュリティの誤った構成を探します。

ポッドがスタックしたり、 PendingまたはCrashLoopBackOff状態になったりしたと想像してみてください。そんな時にkopilot diagnoseコマンドが役立ちます。AI に問い合わせて、原因の考えられる説明を含む結論を表示してくれるかもしれません。

さらに、 kopilot auditコマンドも同様のアプローチを採用しており、既知のベストプラクティスと潜在的なセキュリティ設定ミスに基づいてチェックを実行します。このツールは、OpenAI APIトークンと選択した言語を使用して質問に答えます。

この記事のパート1では、主に4つのAIツール(K8sGPT、kubectl-ai、KoPylot、Kopilot)について紹介しました。パート2では、この議論をさらに進め、K8sの利用プロセスを簡素化するツールをさらに紹介します。どうぞお楽しみに!