K8sGPT と Amazon Bedrock の統合を利用して AI を活用した Kubernetes の診断とトラブルシューティングを実装する - AWS 規範ガイダンス

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

K8sGPT と Amazon Bedrock の統合を利用して AI を活用した Kubernetes の診断とトラブルシューティングを実装する

Amazon Web Services、Ishwar Chauthaiwale、Muskan、Prafful Gupta

概要

このパターンでは、K8sGPT を Amazon Bedrock で利用可能な Anthropic Claude v2 モデルと統合することで、AI を活用した Kubernetes の診断とトラブルシューティングを実装する方法を示します。このソリューションは、安全な踏み台ホストアーキテクチャを通じて、Kubernetes クラスターの問題に対する自然言語分析と修復手順を提供します。K8sGPT Kubernetes の専門知識と Amazon Bedrock の高度な言語機能を組み合わせることで、DevOps チームはクラスターの問題をすばやく特定して解決することができます。これらの機能により、平均解決時間 (MTTR) を最大 50% 短縮できます。

このクラウドネイティブのパターンでは、Kubernetes の管理のために Amazon Elastic Kubernetes Service (Amazon EKS) を使用します。このパターンは、適切な AWS Identity and Access Management (IAM) ロールとネットワーク分離を通じてセキュリティのベストプラクティスを実装します。このソリューションは、Kubernetes のオペレーションを合理化し、AI の支援によりトラブルシューティング機能を強化することを求めている組織にとって特に価値があります。

前提条件と制限

前提条件

制限事項

  • K8sGPT 分析は、Claude v2 モデルのコンテキストウィンドウサイズによって制限されます。

  • Amazon Bedrock API レート制限は、アカウントのクォータに基づいて適用されます。

  • 一部の AWS のサービス は では使用できません AWS リージョン。利用可能なリージョンについては、「AWS サービス (リージョン別)」を参照してください。特定のエンドポイントについては、「サービスエンドポイントとクォータ」を参照して、サービスのリンクを選択してください。

製品バージョン

アーキテクチャ

次の図に、 AWS クラウドの Amazon Bedrock と統合された K8sGPT を使用した AI 活用 Kubernetes 診断のためのアーキテクチャを示します。

Amazon Bedrock と統合された K8sGPT を使用した Kubernetes 診断のワークフロー。

アーキテクチャは以下のワークフローを示しています。

  1. 開発者が、踏み台ホストへの安全な接続を介して環境にアクセスします。この Amazon EC2 インスタンスは安全なエントリポイントとして機能し、K8sGPT コマンドラインインターフェイス (CLI) のインストールと必要な設定が格納されています。

  2. 特定の IAM ロールで設定された踏み台ホストが、Amazon EKS クラスターと Amazon Bedrock エンドポイントの両方への安全な接続を確立します。K8sGPT は Kubernetes クラスター分析を実行するための踏み台ホストにインストールされ、設定されます。

  3. Amazon EKS が Kubernetes コントロールプレーンとワーカーノードを管理し、K8sGPT 分析のターゲット環境を提供します。このサービスは、仮想プライベートクラウド (VPC) 内の複数のアベイラビリティーゾーンで実行され、高可用性と耐障害性を提供するのに役立ちます。Amazon EKS が Kubernetes API を通じて運用データを提供し、包括的なクラスター分析を可能にします。

  4. K8sGPT が分析データを Amazon Bedrock に送信します。Amazon Bedrock は、自然言語処理用の Claude v2 基盤モデル (FM) を備えています。このサービスは K8sGPT 分析を処理して人間が読める説明を生成し、特定された問題に基づいて詳細な修復の提案を示します。Amazon Bedrock は、高可用性とスケーラビリティを備えたサーバーレス AI サービスとして動作します。

注記

このワークフロー全体で、IAM はロールとポリシーを通じてコンポーネント間のアクセスを制御し、踏み台ホスト、Amazon EKS、Amazon Bedrock インタラクションの認証を管理します。IAM は最小特権の原則を実装し、アーキテクチャ全体で安全なクロスサービス通信を可能にします。

自動化とスケール

K8sGPT オペレーションは、さまざまな およびツールを使用して、複数の Amazon EKS クラスターにまたがって自動化 AWS のサービス およびスケーリングできます。このソリューションは、スケジュールされた分析のために、JenkinsGitHub Actions、または AWS CodeBuild を使用した継続的インテグレーションと継続的デプロイ (CI/CD) 統合をサポートします。K8sGPT Operator は、自動問題検出およびレポート機能を使用して、クラスター内の継続的なモニタリングを可能にします。エンタープライズ規模のデプロイでは、Amazon EventBridge を使用してスキャンをスケジュールし、カスタムスクリプトで自動レスポンスをトリガーできます。 AWS SDK 統合により、大規模なクラスターフリートをプログラムで制御できます。

ツール

AWS サービス

  • AWS Command Line Interface (AWS CLI) は、コマンドラインシェルのコマンド AWS のサービス を使用して を操作するのに役立つオープンソースツールです。

  • Amazon Elastic Kubernetes Service (Amazon EKS) を使用すると、独自の Kubernetes コントロールプレーンやノードをインストールまたは維持 AWS することなく、 で Kubernetes を実行できます。

  • AWS Identity and Access Management (IAM) は、誰を認証し、誰に使用する権限を付与するかを制御することで、 AWS リソースへのアクセスを安全に管理するのに役立ちます。

その他のツール

  • K8sGPT は、Kubernetes 管理を変革するオープンソースの AI 搭載ツールです。仮想サイト信頼性エンジニアリング (SRE) のエキスパートとして機能し、Kubernetes クラスターの問題を自動的にスキャン、診断、トラブルシューティングします。管理者は自然言語を使用して K8sGPT を操作し、クラスターの状態、ポッドのクラッシュ、サービス障害に関する明確で実用的なインサイトを得ることができます。ツールの組み込みアナライザーは、コンポーネントの設定ミスからリソースの制約まで、幅広い問題を検出し、わかりやすい説明とソリューションを提供します。

ベストプラクティス

エピック

タスク説明必要なスキル

Amazon Bedrock を K8sGPT の AI バックエンドプロバイダーとして設定する。

Amazon Bedrock を K8sGPT 用の AI バックエンド provide r として設定するには、次の AWS CLI コマンドを使用します。

k8sgpt auth add -b amazonbedrock \ -r us-west-2 \ -m anthropic.claude-v2 \ -n endpoint-name

コマンド例では、 AWS リージョンに us-west-2 を使用します。ただし、Amazon EKS クラスターとそれに対応する Amazon Bedrock モデルの両方がその選択したリージョンで使用可能であり有効になっている場合は、別のリージョンを選択できます。

amazonbedrock が AI バックエンドプロバイダーリストに追加されていて、Active 状態であることを確認するには、次のコマンドを実行します。

k8sgpt auth list

以下に、このコマンドを実行したときの出力の例を示します。

Default: > openai Active: > amazonbedrock Unused: > openai > localai > ollama > azureopenai > cohere > amazonsagemaker > google > noopai > huggingface > googlevertexai > oci > customrest > ibmwatsonxai
AWS DevOps
タスク説明必要なスキル

使用可能なフィルターのリストを表示する。

使用可能なすべてのフィルターのリストを表示するには、次の AWS CLI コマンドを使用します。

k8sgpt filters list

以下に、このコマンドを実行したときの出力の例を示します。

Active: > Deployment > ReplicaSet > PersistentVolumeClaim > Service > CronJob > Node > MutatingWebhookConfiguration > Pod > Ingress > StatefulSet > ValidatingWebhookConfiguration
AWS DevOps

フィルターを使用して、特定の名前空間のポッドをスキャンする。

このコマンドは、Kubernetes クラスター内の特定ポッドの問題に対するターゲットを絞ったデバッグに役立ち、Amazon Bedrock AI 機能を使用して、検出された問題を分析および説明します。

フィルターを使用して特定の名前空間のポッドをスキャンするには、次の AWS CLI コマンドを使用します。

k8sgpt analyze --backend amazonbedrock --explain --filter Pod -n default

以下に、このコマンドを実行したときの出力の例を示します。

100% |████████████████████████████████████████████████████████| (1/1, 645 it/s) AI Provider: amazonbedrock 0: Pod default/crashme() - Error: the last termination reason is Error container=crashme pod=crashme Error: The pod named crashme terminated because the container named crashme crashed. Solution: Check logs for crashme pod to identify reason for crash. Restart pod or redeploy application to resolve crash.
AWS DevOps

フィルターを使用して、特定の名前空間のデプロイをスキャンする。

このコマンドは、特に実際の状態が目的の状態と一致しない場合に、デプロイ固有の問題を特定してトラブルシューティングするのに役立ちます。

フィルターを使用して特定の名前空間のデプロイをスキャンするには、次の AWS CLI コマンドを使用します。

k8sgpt analyze --backend amazonbedrock --explain --filter Deployment -n default

以下に、このコマンドを実行したときの出力の例を示します。

100% |██████████████████████████████████████████████████████████| (1/1, 10 it/min) AI Provider: amazonbedrock 0: Deployment default/nginx() - Error: Deployment default/nginx has 1 replicas but 2 are available Error: The Deployment named nginx in the default namespace has 1 replica specified but 2 pod replicas are running. Solution: Check if any other controllers like ReplicaSet or StatefulSet have created extra pods. Delete extra pods or adjust replica count to match available pods.
AWS DevOps

フィルターを使用して、特定の名前空間のノードをスキャンする。

フィルターを使用して特定の名前空間のノードをスキャンするには、次の AWS CLI コマンドを使用します。

k8sgpt analyze --backend amazonbedrock --explain --filter Node -n default

以下に、このコマンドを実行したときの出力の例を示します。

AI Provider: amazonbedrock No problems detected
AWS DevOps
タスク説明必要なスキル

詳細な出力を取得する。

詳細な出力を取得するには、次の AWS CLI コマンドを使用します。

k8sgpt analyze --backend amazonbedrock --explain --ouput json

以下に、このコマンドを実行したときの出力の例を示します。

{ "provider": "amazonbedrock", "errors": null, "status": "ProblemDetected", "problems": 1, "results": [ { "kind": "Pod", "name": "default/crashme", "error": [ { "Text": "the last termination reason is Error container=crashme pod=crashme", "KubernetesDoc": "", "Sensitive": [] } ], "details": " Error: The pod named crashme terminated because the container named crashme crashed.\nSolution: Check logs for crashme pod to identify reason for crash. Restart pod or redeploy application to resolve crash.", "parentObject": "" } ] }
AWS DevOps

問題のあるポッドを確認する。

特定の問題のあるポッドを確認するには、次の AWS CLI コマンドを使用します。

kubectl get pods --all-namespaces | grep -v Running

以下に、このコマンドを実行したときの出力の例を示します。

NAMESPACE NAME READY STATUS RESTARTS AGE default crashme 0/1 CrashLoopBackOff 260(91s ago) 21h
AWS DevOps

アプリケーション固有のインサイトを取得する。

このコマンドは、特に次の場合に便利です。

  • クラスター内の特定のアプリケーションに焦点を当てたい場合。

  • ラベルを効果的に使用して、Kubernetes リソースを整理したい場合。

  • 特定のアプリケーションコンポーネントの状態をすばやく確認する必要がある場合。

アプリケーション固有のインサイトを取得するには、次のコマンドを実行します。

k8sgpt analyze --backend amazonbedrock --explain -L app=nginx -n default

以下に、このコマンドを実行したときの出力の例を示します。

AI Provider: amazonbedrock No problems detected

関連リソース

AWS ブログ

AWS ドキュメント

その他のリソース