使用 K8sGPT 和 Amazon Bedrock 整合實作採用 AI 技術的 Kubernetes 診斷和故障診斷 - AWS 方案指引

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 K8sGPT 和 Amazon Bedrock 整合實作採用 AI 技術的 Kubernetes 診斷和故障診斷

Ishwar Chauthaiwale, Muskan . 和 Amazon Web Services Prafful Gupta

Summary

此模式示範如何透過將 K8sGPT 與 Amazon Bedrock 上提供的 Anthropic Claude v2 模型整合,來實作採用 AI 技術的 Kubernetes 診斷和故障診斷。解決方案透過安全的堡壘主機架構,為 Kubernetes 叢集問題提供自然語言分析和修復步驟。透過將 K8sGPT Kubernetes 專業知識與 Amazon Bedrock 進階語言功能結合,DevOps 團隊可以快速識別和解決叢集問題。透過這些功能,可以將平均解決時間 (MTTR) 減少高達 50%。

這種雲端原生模式利用 Amazon Elastic Kubernetes Service (Amazon EKS) 進行 Kubernetes 管理。模式會透過適當的 AWS Identity and Access Management (IAM) 角色和網路隔離實作安全最佳實務。此解決方案對於想要簡化 Kubernetes 操作並在 AI 協助下增強故障診斷功能的組織特別有用。

先決條件和限制

先決條件

  • AWS 帳戶 具有適當許可的作用中

  • AWS Command Line Interface (AWS CLI) 已安裝設定

  • Amazon EKS 叢集

  • Amazon Bedrock 上存取 Anthropic Claude 2 模型

  • 具有必要安全群組設定的堡壘主機

  • 已安裝 K8sGPT

限制

  • K8sGPT 分析受限於 Claude v2 模型的內容視窗大小。

  • Amazon Bedrock API 速率限制會根據您的帳戶配額套用。

  • 有些 AWS 服務 完全無法使用 AWS 區域。如需區域可用性,請參閱AWS 依區域的服務。如需特定端點,請參閱服務端點和配額,然後選擇服務的連結。

產品版本

架構

下圖顯示 中使用與 Amazon Bedrock 整合的 K8sGPT 進行 AI 型 Kubernetes 診斷的架構 AWS 雲端。

使用與 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,提供 Claude v2 基礎模型 (FM) 以進行自然語言處理。服務會處理 K8sGPT 分析,以產生人類可讀的說明,並根據已識別的問題提供詳細的修補建議。Amazon Bedrock 以無伺服器 AI 服務的形式運作,具有高可用性和可擴展性。

注意

在此工作流程中,IAM 會透過角色和政策控制元件之間的存取,管理堡壘主機、Amazon EKS 和 Amazon Bedrock 互動的身分驗證。IAM 實作最低權限原則,並在整個架構中啟用安全的跨服務通訊。

自動化和擴展

K8sGPT 操作可以透過各種 和 工具,自動化 AWS 服務 並跨多個 Amazon EKS 叢集擴展。此解決方案支援使用 JenkinsGitHub ActionsAWS CodeBuild 進行排程分析的持續整合和持續部署 (CI/CD) 整合。K8sGPT 運算子透過自動化問題偵測和報告功能啟用叢集內持續監控。對於企業規模部署,您可以使用 Amazon EventBridge 來排程掃描,並使用自訂指令碼觸發自動回應。 AWS SDK 整合可在大型叢集機群之間進行程式設計控制。

工具

AWS 服務

其他工具

  • K8sGPT 是一種開放原始碼 AI 驅動的工具,可轉換 Kubernetes 管理。它充當虛擬站點可靠性工程 (SRE) 專家,自動掃描、診斷和疑難排解 Kubernetes 叢集問題。管理員可以使用自然語言與 K8sGPT 互動,並取得有關叢集狀態、Pod 損毀和服務故障的明確可行洞見。工具的內建分析器可偵測各種問題,從設定錯誤的元件到資源限制,並提供easy-to-understand的說明和解決方案。

最佳實務

史詩

任務描述所需的技能

將 Amazon Bedrock 設定為 K8sGPT 的 AI 後端提供者。

若要將 Amazon Bedrock 設定為 AI 後端提供 r for K8sGPT,請使用下列 AWS CLI 命令:

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

範例命令會us-west-2針對 使用 AWS 區域。不過,您可以選取另一個區域,前提是 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

使用篩選條件掃描特定命名空間中的 Pod。

此命令適用於針對 Kubernetes 叢集內的特定 Pod 問題進行偵錯,使用 Amazon Bedrock AI 功能來分析和解釋其發現的問題。

若要使用篩選條件掃描特定命名空間中的 Pod,請使用下列 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

檢查有問題的 Pod。

若要檢查是否有特定有問題的 Pod,請使用下列 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 文件

其他資源