

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 通过 K8sGPT 和 Amazon Bedrock 集成，实施人工智能驱动的 Kubernetes 诊断和问题排查
<a name="implement-ai-powered-kubernetes-diagnostics-and-troubleshooting-with-k8sgpt-and-amazon-bedrock-integration"></a>

*Ishwar Chauthaiwale、Muskan . 和 Prafful Gupta，Amazon Web Services*

## Summary
<a name="implement-ai-powered-kubernetes-diagnostics-and-troubleshooting-with-k8sgpt-and-amazon-bedrock-integration-summary"></a>

此模式演示了如何通过将 K8sGPT 与 Amazon Bedrock 上提供的 Anthropic Claude v2 模型集成来实施人工智能驱动的 Kubernetes 诊断和问题排查。该解决方案通过安全的堡垒主机架构为 Kubernetes 集群问题提供了自然语言分析和修复步骤。通过将 K8sGPT Kubernetes 专业知识与 Amazon Bedrock 的高级语言功能相结合 DevOps ，团队可以快速识别和解决集群问题。借助这些功能，平均解决时间（MTTR）有可能实现至高 50% 的缩短。

此云原生模式利用 Amazon Elastic Kubernetes Service（Amazon EKS）for Kubernetes 管理。该模式通过适当的 AWS Identity and Access Management (IAM) 角色和网络隔离来实现安全最佳实践。对于希望通过人工智能帮助简化 Kubernetes 操作并增强问题排查能力的组织来说，该解决方案特别有价值。

## 先决条件和限制
<a name="implement-ai-powered-kubernetes-diagnostics-and-troubleshooting-with-k8sgpt-and-amazon-bedrock-integration-prereqs"></a>

**先决条件**
+  AWS 账户 具有适当权限的活跃用户
+ AWS Command Line Interface (AWS CLI) [已安装](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)并[配置](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)
+ Amazon EKS 集群
+ 在 [Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/model-access.html) 上访问 Anthropic Claude 2 模型
+ 具有所需安全组设置的堡垒主机
+ K8sGPT [已安装](https://docs.k8sgpt.ai/getting-started/installation/)

**限制**
+ K8sGPT 分析受到 Claude v2 模型上下文窗口大小的限制。
+ Amazon Bedrock API 的速率限制取决于您的账户配额。
+ 有些 AWS 服务 并非全部可用 AWS 区域。有关区域可用性，请参阅[按区域划分的AWS 服务](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/)。有关特定端点，请参阅[服务端点和配额](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html)，然后选择相应服务的链接。

**产品版本**
+ Amazon EKS [版本 1.31 或更高版本](https://docs.aws.amazon.com/eks/latest/userguide/kubernetes-versions.html)
+  Amazon Bedrock 上的 [Claude 2 模型](https://docs.aws.amazon.com/bedrock/latest/userguide/models-supported.html)
+ K8sGPT [v0.4.2 或更高版本](https://github.com/k8sgpt-ai/k8sgpt/releases)

## 架构
<a name="implement-ai-powered-kubernetes-diagnostics-and-troubleshooting-with-k8sgpt-and-amazon-bedrock-integration-architecture"></a>

下图显示了在 AWS 云中通过集成 K8sGPT 与 Amazon Bedrock 进行人工智能驱动的 Kubernetes 诊断的架构。

![\[通过集成 K8sGPT 与 Amazon Bedrock 进行 Kubernetes 诊断的工作流。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/09bc08f6-e191-4cef-b26b-dcb6225b15cc/images/8789891d-4a90-44b0-a108-387f6d96496b.png)


该架构显示了以下工作流：

1. 开发人员通过与堡垒主机的安全连接来访问环境。此 Amazon EC2 实例充当安全入口点，包含 k8sGpt 命令行界面 (CLI) 安装和必需的配置。

1. 堡垒主机配置了特定 IAM 角色，可与 Amazon EKS 集群和 Amazon Bedrock 端点建立安全连接。K8sGPT 已安装并配置到堡垒主机上，可执行 Kubernetes 集群分析。

1. Amazon EKS 管理 Kubernetes 控制面板和 Worker 节点，从而为 K8sGPT 分析提供目标环境。该服务可在虚拟私有云（VPC）内跨多个可用区运行，而这有助于提供高可用性和弹性。Amazon EKS 通过 Kubernetes API 提供运营数据，从而实现全面的集群分析。

1. k8sGPT 向 Amazon Bedrock 发送分析数据，后者为自然语言处理提供 Claude v2 基础模型（FM）。该服务可处理 k8sGPT 分析以生成人类可读的解释，并根据已发现的问题提供详细的补救建议。Amazon Bedrock 是一种无服务器人工智能服务，具有高可用性和可扩展性。

**注意**  
在整个工作流中，IAM 通过角色和策略控制组件之间的访问权限，进而管理堡垒主机、Amazon EKS 和 Amazon Bedrock 交互的身份验证。IAM 实现了最低权限原则，并在整个架构中实现安全的跨服务通信。

**自动化和扩展**

K8sGPT 操作可以通过各种 AWS 服务 工具在多个 Amazon EKS 集群中实现自动化和扩展。[该解决方案支持使用 [Jenkins、Actions](https://www.jenkins.io/) 或[AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html)用于计划分析的持续集成和持续部署 (CI/CD) 集成。GitHub ](https://docs.github.com/en/actions/get-started/understand-github-actions)K8sGPT 运算符利用自动问题检测和报告功能实现集群内持续监控。对于企业级部署，您可以使用 [Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html) 来安排扫描并使用自定义脚本触发自动响应。 AWS SDK 集成支持对大型集群进行编程控制。

## 工具
<a name="implement-ai-powered-kubernetes-diagnostics-and-troubleshooting-with-k8sgpt-and-amazon-bedrock-integration-tools"></a>

**AWS 服务**
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) 是一个开源工具，可帮助您 AWS 服务 通过命令行 shell 中的命令进行交互。
+ [亚马逊 Elastic Kubernetes Service（亚马逊](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html) EKS）可帮助你在上面运行 AWS Kubernetes，而无需安装或维护自己的 Kubernetes 控制平面或节点。
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) 通过控制谁经过身份验证并有权使用 AWS 资源，从而帮助您安全地管理对资源的访问权限。

**其他工具**
+ [k8sGPT](https://k8sgpt.ai/) 是一款开源的人工智能驱动型工具，可改变 Kubernetes 的管理方式。它充当虚拟站点可靠性工程（SRE）专家，自动扫描、诊断和排查 Kubernetes 集群问题。管理员可以使用自然语言与 k8sGPT 进行交互，并获得有关集群状态、容器组（pod）崩溃和服务故障的清晰、可操作的见解。该工具的内置分析器可以检测各种问题，从组件配置错误到资源限制，并提供 easy-to-understand解释和解决方案。

## 最佳实践
<a name="implement-ai-powered-kubernetes-diagnostics-and-troubleshooting-with-k8sgpt-and-amazon-bedrock-integration-best-practices"></a>
+ 通过使用 AWS Systems Manager Session Manager [堡垒主机访问来实现安全的访问](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/access-a-bastion-host-by-using-session-manager-and-amazon-ec2-instance-connect.html)控制。
+ 确保 K8sGPT 身份验证使用最低权限的专用 IAM 角色进行 Amazon Bedrock 和 Amazon EKS 交互。有关详情，请参阅 IAM 文档中的[授予最低权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#grant-least-priv)和[安全最佳实践](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)。
+ 配置[资源标记](https://docs.aws.amazon.com/whitepapers/latest/tagging-best-practices/what-are-tags.html)，启用 Amazon CloudWatch [日志记录以进行审计跟踪](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/monitor-cloudtrail-log-files-with-cloudwatch-logs.html)，并对敏感[信息实施数据匿名化](https://aws.amazon.com/solutions/guidance/data-anonymization-on-aws/)。
+ 保持 k8sGPT 配置的定期备份，同时在非高峰时段设置自动扫描计划，以最大限度地减少对操作的影响。

## 操作说明
<a name="implement-ai-powered-kubernetes-diagnostics-and-troubleshooting-with-k8sgpt-and-amazon-bedrock-integration-epics"></a>

### 将 Amazon Bedrock 添加到人工智能后端提供商列表。
<a name="add-br-to-ai-backend-provider-list"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 将 Amazon Bedrock 设置为 K8sGPT 的人工智能后端提供商。 | 要将 Amazon Bedrock 设置为 k8sGpt 的人工智能[后端提供](https://docs.k8sgpt.ai/reference/providers/backend/)者 r，请使用以下命令： AWS CLI <pre>k8sgpt auth add -b amazonbedrock \<br /> -r us-west-2 \<br /> -m anthropic.claude-v2 \<br /> -n endpoint-name <br /></pre>在此示例命令中，使用 `us-west-2` 来表示 AWS 区域。但是，您可以选择其他区域，前提是 Amazon EKS 集群和相应的 Amazon Bedrock 模型在该选定区域均可用并已启用。要检查 `amazonbedrock` 是否已添加到人工智能后端提供商列表中并处于 `Active` 状态，请运行以下命令：<pre>k8sgpt auth list</pre>以下是预期的命令运行输出的示例：<pre>Default: <br />> openai<br />Active: <br />> amazonbedrock<br />Unused: <br />> openai<br />> localai<br />> ollama<br />> azureopenai<br />> cohere<br />> amazonsagemaker<br />> google<br />> noopai<br />> huggingface<br />> googlevertexai<br />> oci<br />> customrest<br />> ibmwatsonxai</pre> | AWS DevOps | 

### 使用筛选器扫描资源
<a name="scan-resources-using-a-filter"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 查看可用的筛选器列表。 | 要查看所有可用过滤器的列表，请使用以下 AWS CLI 命令：<pre>k8sgpt filters list</pre>以下是预期的命令运行输出的示例：<pre>Active: <br />> Deployment<br />> ReplicaSet<br />> PersistentVolumeClaim<br />> Service<br />> CronJob<br />> Node<br />> MutatingWebhookConfiguration<br />> Pod<br />> Ingress<br />> StatefulSet<br />> ValidatingWebhookConfiguration</pre> | AWS DevOps | 
| 使用筛选器扫描特定命名空间中的容器组（pod）。 | 此命令对于有针对性地调试 Kubernetes 集群中的特定容器组（pod）问题非常有用，它使用 Amazon Bedrock AI 功能来分析和解释它发现的问题。要使用过滤器扫描特定命名空间中的 pod，请使用以下 AWS CLI 命令：<pre>k8sgpt analyze --backend amazonbedrock --explain --filter Pod -n default</pre>以下是预期的命令运行输出的示例：<pre>100% |████████████████████████████████████████████████████████| (1/1, 645 it/s)        <br />AI Provider: amazonbedrock<br /><br />0: Pod default/crashme()<br />- Error: the last termination reason is Error container=crashme pod=crashme<br />Error: The pod named crashme terminated because the container named crashme crashed.<br />Solution: Check logs for crashme pod to identify reason for crash. Restart pod or redeploy application to resolve crash.</pre> | AWS DevOps | 
| 使用筛选器扫描特定命名空间中的部署。 | 此命令对于识别和排查特定于部署的问题非常有用，尤其是在实际状态与所需状态不匹配时。要使用筛选器扫描特定命名空间中的部署，请使用以下 AWS CLI 命令：<pre>k8sgpt analyze --backend amazonbedrock --explain --filter Deployment -n default</pre>以下是预期的命令运行输出的示例：<pre>100% |██████████████████████████████████████████████████████████| (1/1, 10 it/min)        <br />AI Provider: amazonbedrock<br /><br />0: Deployment default/nginx()<br />- Error: Deployment default/nginx has 1 replicas but 2 are available<br /> Error: The Deployment named nginx in the default namespace has 1 replica specified but 2 pod replicas are running.<br />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.</pre> | AWS DevOps | 
| 使用筛选器扫描特定命名空间中的节点。 | 要使用筛选器扫描特定命名空间中的节点，请使用以下 AWS CLI 命令：<pre>k8sgpt analyze --backend amazonbedrock --explain --filter Node -n default </pre>以下是预期的命令运行输出的示例：<pre>AI Provider: amazonbedrock<br /><br />No problems detected</pre> | AWS DevOps | 

### 分析详细输出
<a name="analyze-detailed-outputs"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 获取详细输出。 |  要获得详细输出，请使用以下 AWS CLI 命令：<pre>k8sgpt analyze --backend amazonbedrock --explain --ouput json</pre>以下是预期的命令运行输出的示例：<pre>{<br />  "provider": "amazonbedrock",<br />  "errors": null,<br />  "status": "ProblemDetected",<br />  "problems": 1,<br />  "results": [<br />    {<br />      "kind": "Pod",<br />      "name": "default/crashme",<br />      "error": [<br />        {<br />          "Text": "the last termination reason is Error container=crashme pod=crashme",<br />          "KubernetesDoc": "",<br />          "Sensitive": []<br />        }<br />      ],<br />      "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.",<br />      "parentObject": ""<br />    }<br />  ]<br />}</pre> | AWS DevOps | 
| 检查有问题的容器组（pod）。 | 要检查是否有特定问题的 pod，请使用以下 AWS CLI 命令：<pre>kubectl get pods --all-namespaces | grep -v Running</pre>以下是预期的命令运行输出的示例：<pre>NAMESPACE    NAME      READY    STATUS          RESTARTS      AGE                                       <br />default     crashme     0/1   CrashLoopBackOff   260(91s ago)   21h</pre> | AWS DevOps | 
| 获取特定于应用程序的见解。 | 在以下情况下，此命令特别有用：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/implement-ai-powered-kubernetes-diagnostics-and-troubleshooting-with-k8sgpt-and-amazon-bedrock-integration.html)要获取特定于应用程序的见解，请使用以下命令：<pre>k8sgpt analyze --backend amazonbedrock --explain -L app=nginx -n default</pre>以下是预期的命令运行输出的示例：<pre>AI Provider: amazonbedrock<br /><br />No problems detected</pre> |  | 

## 相关资源
<a name="implement-ai-powered-kubernetes-diagnostics-and-troubleshooting-with-k8sgpt-and-amazon-bedrock-integration-resources"></a>

**AWS Blog**
+ [使用 Amazon Bedrock 代理式工作流自动执行 Amazon EKS 问题排查](https://aws.amazon.com/blogs/machine-learning/automate-amazon-eks-troubleshooting-using-an-amazon-bedrock-agentic-workflow/)
+ [使用 k8sGpt 和 Amazon Bedrock 简化 Kubernetes 集群维护](https://aws.amazon.com/blogs/machine-learning/use-k8sgpt-and-amazon-bedrock-for-simplified-kubernetes-cluster-maintenance/)

**AWS 文档**
+ AWS CLI [命令：[创建集群和描述集群](https://docs.aws.amazon.com/cli/latest/reference/eks/create-cluster.html)](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/eks/describe-cluster.html)
+ [Amazon Cognito 入门](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html)（Amazon 文档）
+ [IAM 中的安全最佳实践](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)（IAM 文档）

**其他资源**
+ [k8sgpt](https://k8sgpt.ai/)