View a markdown version of this page

通过 K8sGPT 和 Amazon Bedrock 集成,实施人工智能驱动的 Kubernetes 诊断和问题排查 - AWS 规范指引

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

通过 K8sGPT 和 Amazon Bedrock 集成,实施人工智能驱动的 Kubernetes 诊断和问题排查

Ishwar Chauthaiwale、Muskan . 和 Prafful Gupta,Amazon Web Services

Summary

此模式演示了如何通过将 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 操作并增强问题排查能力的组织来说,该解决方案特别有价值。

先决条件和限制

先决条件

  • AWS 账户 具有适当权限的活跃用户

  • AWS Command Line Interface (AWS CLI) 已安装配置

  • Amazon EKS 集群

  • Amazon Bedrock 上访问 Anthropic Claude 2 模型

  • 具有所需安全组设置的堡垒主机

  • K8sGPT 已安装

限制

  • K8sGPT 分析受到 Claude v2 模型上下文窗口大小的限制。

  • Amazon Bedrock API 的速率限制取决于您的账户配额。

  • 有些 AWS 服务 并非全部可用 AWS 区域。有关区域可用性,请参阅按区域划分的AWS 服务。有关特定端点,请参阅服务端点和配额,然后选择相应服务的链接。

产品版本

架构

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

通过集成 K8sGPT 与 Amazon Bedrock 进行 Kubernetes 诊断的工作流。

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

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

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

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

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

注意

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

自动化和扩展

K8sGPT 操作可以通过各种 AWS 服务 工具在多个 Amazon EKS 集群中实现自动化和扩展。该解决方案支持使用 Jenkins、ActionsAWS CodeBuild用于计划分析的持续集成和持续部署 (CI/CD) 集成。GitHub K8sGPT 运算符利用自动问题检测和报告功能实现集群内持续监控。对于企业级部署,您可以使用 Amazon EventBridge 来安排扫描并使用自定义脚本触发自动响应。 AWS SDK 集成支持对大型集群进行编程控制。

工具

AWS 服务

其他工具

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

最佳实践

操作说明

Task说明所需技能

将 Amazon Bedrock 设置为 K8sGPT 的人工智能后端提供商。

要将 Amazon Bedrock 设置为 k8sGpt 的人工智能后端提供者 r,请使用以下命令: 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 是否已添加到人工智能后端提供商列表中并处于 Active 状态,请运行以下命令:

k8sgpt auth list

以下是预期的命令运行输出的示例:

Default: > openai Active: > amazonbedrock Unused: > openai > localai > ollama > azureopenai > cohere > amazonsagemaker > google > noopai > huggingface > googlevertexai > oci > customrest > ibmwatsonxai
AWS DevOps
Task说明所需技能

查看可用的筛选器列表。

要查看所有可用过滤器的列表,请使用以下 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
Task说明所需技能

获取详细输出。

要获得详细输出,请使用以下 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 Blog

AWS 文档

其他资源