通过 K8sGPT 和 Amazon Bedrock 集成,实施人工智能驱动的 Kubernetes 诊断和故障排除 - AWS Prescriptive Guidance

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

通过 K8sGPT 和 Amazon Bedrock 集成,实施人工智能驱动的 Kubernetes 诊断和故障排除

Muskan. 的 Ishwar Chauthaiwale 和亚马逊 Web Services 的 Prafful Gupta

摘要

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

这种云原生模式利用亚马逊 Elastic Kubernetes Service(亚马逊 EKS)进行 Kubernetes 管理。该模式通过适当的 AWS Identity and Access Management (IAM) 角色和网络隔离来实现安全最佳实践。对于希望通过人工智能帮助简化 Kubernetes 操作并增强故障排除能力的组织来说,该解决方案特别有价值。

先决条件和限制

先决条件

限制

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

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

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

产品版本

架构

下图显示了使用与 Amazon Bedrock 集成的 k8sGPT 进行人工智能驱动的 Kubernetes 诊断架构。 AWS Cloud

使用与 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 集群中实现自动化和扩展。该解决方案支持使用 Jenkins、ActionsAWS CodeBuild用于计划分析的持续集成和持续部署 (CI/CD) 集成。GitHub k8sGpt 操作员通过自动问题检测和报告功能实现集群内持续监控。对于企业级部署,您可以使用 Amazon EventBridge 安排扫描并使用自定义脚本触发自动响应。 AWS SDK 集成支持对大型集群进行编程控制。

工具

Amazon Web Services

其他工具

  • 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是否已添加到 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
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 博客

AWS 文档

其他资源