智能 Kubernetes 故障排查新方案:K8sGPT 全解析

引言

在当今云原生时代,Kubernetes 已经成为容器编排的事实标准。随着集群规模的扩大和应用复杂度的增加,故障排查和监控的难度也在不断提升。传统的手动排查方法不仅效率低下,对运维人员的技术要求也很高。

今天,我们将介绍一款革命性的工具——K8sGPT,它结合了 AI 技术与 SRE 经验,为 Kubernetes 集群的故障排查和监控带来了全新的解决方案。

  • 注意:此教程需要用到科学上网工具以及配置系统代理相关技术。
  • githup地址:https://github.com/k8sgpt-ai/k8sgpt-operator?tab=readme-ov-file#installation

K8sGPT 概述

K8sGPT 是一款专为 Kubernetes 集群设计的智能诊断工具,能够扫描集群、识别问题并以简洁的语言提供诊断结果和解决方案。该工具将 SRE(站点可靠性工程)经验编码到分析器中,通过 AI 技术增强问题分析能力,帮助用户快速定位和解决 Kubernetes 集群中的各种问题。

核心价值

  • 智能诊断:利用 AI 技术分析 Kubernetes 集群问题,提供清晰易懂的解释和解决方案
  • 多模型支持:内置集成 OpenAI、Azure、Cohere、Amazon Bedrock、Google Gemini 等多种 AI 后端
  • 可扩展分析器:提供多种内置分析器,同时支持自定义分析器扩展
  • 安全与隐私:支持数据匿名化,保护敏感信息
  • 多部署模式:支持 CLI 工具和 Operator 模式部署,满足不同场景需求

应用场景

  • 日常集群维护:定期扫描集群,提前发现潜在问题
  • 故障排查:当集群出现问题时,快速定位根本原因
  • 持续监控:通过 Operator 模式实现集群状态的持续监控
  • DevOps 流程集成:与现有监控系统(如 Prometheus、Alertmanager)集成

系统架构

K8sGPT 采用模块化设计,主要由以下组件组成:

核心组件

组件 功能 说明
命令行界面 (CLI) 用户交互入口 提供各种命令,如分析、认证、配置管理等
分析器 (Analyzers) 集群问题检测 内置多种分析器,检测不同类型的 Kubernetes 资源问题
AI 后端集成 问题解释与解决方案 与多种 AI 模型集成,提供智能分析结果
配置管理 存储和管理配置 处理认证信息、分析器配置等
Model Context Protocol (MCP) AI 助手集成 提供标准化工具接口,与 Claude 等 AI 助手集成

工作流程

  1. 扫描阶段:通过分析器扫描 Kubernetes 集群中的资源
  2. 数据处理:收集和处理集群状态信息
  3. AI 分析:将问题发送给配置的 AI 后端进行分析
  4. 结果呈现:返回清晰的问题描述和解决方案

部署模式

K8sGPT 支持两种部署模式:

  1. CLI 模式:作为命令行工具安装在本地,手动执行分析
  2. Operator 模式:部署在 Kubernetes 集群内部,实现持续监控

安装与配置

CLI 安装

Linux/Mac (Homebrew)
brew install k8sgpt

brew tap k8sgpt-ai/k8sgpt
brew install k8sgpt
RPM 包安装 (RedHat/CentOS/Fedora)
  • 注意:RPM 包安装方式下载可能会遇到问题,推荐使用 Operator 安装方式

Operator 安装

对于在 Kubernetes 集群内的持续监控,推荐使用 k8sgpt-operator。以下是详细的安装步骤:

安装 Operator
# 添加 Helm 仓库
helm repo add k8sgpt https://charts.k8sgpt.ai/
# 更新 Helm 仓库
helm repo update
# 安装 Operator
helm install release k8sgpt/k8sgpt-operator -n k8sgpt-operator-system --create-namespace
创建 AI 后端密钥
# 创建 OpenAI API 密钥 secret(默认使用open ai)
kubectl create secret generic k8sgpt-sample-secret --from-literal=openai-api-key=$OPENAI_TOKEN -n k8sgpt-operator-system
应用 K8sGPT 配置
apiVersion: core.k8sgpt.ai/v1alpha1  # API 版本
kind: K8sGPT                         # 资源类型
metadata:
  name: k8sgpt-sample                # 资源名称
  namespace: k8sgpt-operator-system  # 命名空间
spec:
  ai:
    enabled: true                    # 启用 AI 分析功能
    model: gpt-4o-mini               # AI 模型名称
    backend: openai                  # AI 后端服务
    secret:                          # 存储 API 密钥的 secret
      name: k8sgpt-sample-secret     # secret 名称
      key: openai-api-key            # secret 中的键
    proxyEndpoint: "http://192.168.1.1:7897"  # 代理地址,用于访问 OpenAI API
  noCache: false                     # 是否禁用缓存
  repository: ghcr.io/k8sgpt-ai/k8sgpt  # K8sGPT 镜像仓库
  version: v0.4.1                    # K8sGPT 版本

配置说明

  • ai.enabled:启用 AI 分析功能
  • ai.model:指定使用的 AI 模型
  • ai.backend:指定 AI 后端服务
  • ai.secret:指定存储 API 密钥的 secret
  • noCache:是否禁用缓存
  • repository:K8sGPT 镜像仓库
  • version:K8sGPT 版本
验证安装

安装完成后,K8sGPT 会自动分析集群并生成结果:

kubectl get results -n k8sgpt-operator-system -o json | jq .
查看日志
kubectl logs -n k8sgpt-operator-system -l app.kubernetes.io/name=k8sgpt-operator -f

基本使用

  • 命令可能用不了 官方的RPM包下载失败估得等到修复了这个问题 着急的话可以先下载源代码自己编译
运行分析
# 基本分析
k8sgpt analyze

# 带详细解释
k8sgpt analyze --explain

# 带官方文档参考
k8sgpt analyze --explain --with-doc
过滤分析
# 按资源类型过滤
k8sgpt analyze --explain --filter=Service

# 按命名空间过滤
k8sgpt analyze --explain --filter=Pod --namespace=default
输出格式
# 输出为 JSON 格式
k8sgpt analyze --explain --filter=Service --output=json

# 匿名化输出
k8sgpt analyze --explain --filter=Service --output=json --anonymize

过滤器管理

# 列出所有过滤器
k8sgpt filters list

# 添加默认过滤器
k8sgpt filters add [filter(s)]
# 示例:k8sgpt filters add Service
# 示例:k8sgpt filters add Ingress,Pod

# 移除默认过滤器
k8sgpt filters remove [filter(s)]
# 示例:k8sgpt filters remove Service
# 示例:k8sgpt filters remove Ingress,Pod

多集群监控

配置方法

对于基于 Cluster API 的基础设施,K8sGPT Operator 将安装在同一个 Cluster API 管理集群中:该集群负责根据基础设施提供者的要求为种子集群创建所需的集群。

一旦基于 Cluster API 的集群被配置,根据命名约定 ${CLUSTERNAME}-kubeconfig 的 kubeconfig 将在同一命名空间中可用:传统的 Secret 数据键是 value,可用于指示 k8sgpt Operator 监控远程集群,而无需在种子集群中部署任何资源。

查看集群和 kubeconfig
kubectl get clusters
kubectl get secrets
创建多集群监控配置
apiVersion: core.k8sgpt.ai/v1alpha1  # API 版本
kind: K8sGPT                         # 资源类型
metadata:
  name: capi-quickstart              # 资源名称
  namespace: k8sgpt-operator-system  # 命名空间
spec:
  ai:
    anonymized: true                 # 是否匿名化数据
    backend: openai                  # AI 后端服务
    language: english                # 分析结果语言
    model: gpt-4o-mini               # AI 模型名称
    secret:                          # 存储 API 密钥的 secret
      key: api_key                   # secret 中的键
      name: my_openai_secret         # secret 名称
  kubeconfig:                        # 远程集群的 kubeconfig
    key: value                       # secret 中的键
    name: capi-quickstart-kubeconfig # secret 名称

配置说明

  • kubeconfig.name:存储 kubeconfig 的 secret 名称
  • kubeconfig.key:secret 中存储 kubeconfig 的键

安全考虑

如果您的设置需要最小权限方法,则必须提供不同的 kubeconfig,因为 Cluster API 生成的 kubeconfig 绑定到具有 cluster-admin 权限的 admin 用户。

管理

应用配置后,K8sGPT Operator 将使用在 /spec/kubeconfig 字段中定义的种子集群 kubeconfig 创建 K8sGPT 部署。

生成的 Result 对象将在部署 K8sGPT 实例的同一命名空间中可用,并相应地使用以下键进行标记:

  • k8sgpts.k8sgpt.ai/name:K8sGPT 实例名称
  • k8sgpts.k8sgpt.ai/namespace:K8sGPT 实例命名空间
  • k8sgpts.k8sgpt.ai/backend:AI 后端(如果指定)

通过这些标签,可以根据指定的受监控集群过滤结果,而不会污染底层集群的 K8sGPT CRD 和消耗种子计算工作负载,同时保持关于集群的机密性。

分析器

K8sGPT 提供多种内置分析器,用于检测和诊断不同类型的 Kubernetes 资源问题。

默认启用的分析器

分析器 功能
podAnalyzer 分析 Pod 相关问题
pvcAnalyzer 分析 PersistentVolumeClaim 相关问题
rsAnalyzer 分析 ReplicaSet 相关问题
serviceAnalyzer 分析 Service 相关问题
eventAnalyzer 分析 Event 相关问题
ingressAnalyzer 分析 Ingress 相关问题
statefulSetAnalyzer 分析 StatefulSet 相关问题
deploymentAnalyzer 分析 Deployment 相关问题
jobAnalyzer 分析 Job 相关问题
cronJobAnalyzer 分析 CronJob 相关问题
nodeAnalyzer 分析 Node 相关问题
mutatingWebhookAnalyzer 分析 MutatingWebhook 相关问题
validatingWebhookAnalyzer 分析 ValidatingWebhook 相关问题
configMapAnalyzer 分析 ConfigMap 相关问题

可选分析器

分析器 功能
hpaAnalyzer 分析 HorizontalPodAutoscaler 相关问题
pdbAnalyzer 分析 PodDisruptionBudget 相关问题
networkPolicyAnalyzer 分析 NetworkPolicy 相关问题
gatewayClass 分析 GatewayClass 相关问题
gateway 分析 Gateway 相关问题
httproute 分析 HTTPRoute 相关问题
logAnalyzer 分析日志相关问题
storageAnalyzer 分析存储相关问题
securityAnalyzer 分析安全相关问题
CatalogSource 分析 CatalogSource 相关问题
ClusterCatalog 分析 ClusterCatalog 相关问题
ClusterExtension 分析 ClusterExtension 相关问题
ClusterService 分析 ClusterService 相关问题
ClusterServiceVersion 分析 ClusterServiceVersion 相关问题
OperatorGroup 分析 OperatorGroup 相关问题
InstallPlan 分析 InstallPlan 相关问题
Subscription 分析 Subscription 相关问题

也可以设置自定义分析器,具体配置方法可参考官方文档。

AI 后端

K8sGPT 支持多种 AI 后端,用于解释分析结果并提供解决方案。

支持的 AI 后端

后端 说明
openai OpenAI 的 GPT 模型
localai 本地部署的 AI 模型
ollama Ollama 本地模型
azureopenai Azure OpenAI 服务
cohere Cohere AI 模型
amazonbedrock Amazon Bedrock 服务
amazonsagemaker Amazon SageMaker 服务
google Google Gemini 模型
huggingface Hugging Face 模型
noopai 无操作 AI(用于测试)
googlevertexai Google Vertex AI 服务
watsonxai IBM Watsonx AI 服务
customrest 自定义 REST API
ibmwatsonxai IBM Watsonx AI 服务

不同 AI 后端配置示例

OpenAI

这是默认 backend。

Secret

kubectl create secret generic k8sgpt-secret \
  --from-literal=openai-api-key="$OPENAI_API_KEY" \
  -n k8sgpt-operator-system

CR(K8sGPT 资源)

apiVersion: core.k8sgpt.ai/v1alpha1  # API 版本
kind: K8sGPT                         # 资源类型
metadata:
  name: k8sgpt-openai                # 资源名称
  namespace: k8sgpt-operator-system  # 命名空间
spec:
  ai:
    enabled: true                    # 启用 AI 分析功能
    backend: openai                  # AI 后端服务
    model: gpt-4o-mini               # AI 模型名称
    secret:                          # 存储 API 密钥的 secret
      name: k8sgpt-secret            # secret 名称
      key: openai-api-key            # secret 中的键
  noCache: false                     # 是否禁用缓存
  repository: ghcr.io/k8sgpt-ai/k8sgpt  # K8sGPT 镜像仓库
  version: v0.4.1                    # K8sGPT 版本

Operator 会从 Secret 里取 openai-api-key,调用 OpenAI API。

Azure OpenAI

Azure 上的 OpenAI 服务,需要提供 Endpoint、部署名称等。

Secret

kubectl create secret generic azure-openai-secret \
  --from-literal=azure-api-key="$AZURE_OPENAI_API_KEY" \
  -n k8sgpt-operator-system

CR

apiVersion: core.k8sgpt.ai/v1alpha1  # API 版本
kind: K8sGPT                         # 资源类型
metadata:
  name: k8sgpt-azure                 # 资源名称
  namespace: k8sgpt-operator-system  # 命名空间
spec:
  ai:
    enabled: true                    # 启用 AI 分析功能
    backend: azureopenai             # AI 后端服务
    baseUrl: "https://<your-azure-openai-endpoint>"  # Azure OpenAI 服务端点
    engine: "<deployment-name>"       # 部署名称
    model: "<model-name>"             # 模型名称
    secret:                          # 存储 API 密钥的 secret
      name: azure-openai-secret      # secret 名称
      key: azure-api-key             # secret 中的键
  repository: ghcr.io/k8sgpt-ai/k8sgpt  # K8sGPT 镜像仓库
  version: v0.4.1                    # K8sGPT 版本

这里的 baseUrl, engine, model 需根据你在 Azure 门户里的部署名称与 API Endpoint 填写。

Cohere

Cohere 是一个独立的 AI 服务。

Secret

kubectl create secret generic cohere-secret \
  --from-literal=cohere-api-key="$COHERE_API_KEY" \
  -n k8sgpt-operator-system

CR

apiVersion: core.k8sgpt.ai/v1alpha1  # API 版本
kind: K8sGPT                         # 资源类型
metadata:
  name: k8sgpt-cohere                # 资源名称
  namespace: k8sgpt-operator-system  # 命名空间
spec:
  ai:
    enabled: true                    # 启用 AI 分析功能
    backend: cohere                  # AI 后端服务
    model: command-nightly           # AI 模型名称
    secret:                          # 存储 API 密钥的 secret
      name: cohere-secret            # secret 名称
      key: cohere-api-key            # secret 中的键
  repository: ghcr.io/k8sgpt-ai/k8sgpt  # K8sGPT 镜像仓库
  version: v0.4.1                    # K8sGPT 版本

这样 Operator 会用 Cohere 提供的 API 来生成解释结果。

Amazon Bedrock

Bedrock 允许在 AWS 上调用多种模型,例如 Anthropic Claude。

Secret(AWS Keys)

如果不使用 IAM Role,还可以把 AWS 凭证放入 Secret:

kubectl create secret generic bedrock-secret \
  --from-literal=AWS_ACCESS_KEY_ID="$AWS_ACCESS_KEY_ID" \
  --from-literal=AWS_SECRET_ACCESS_KEY="$AWS_SECRET_ACCESS_KEY" \
  -n k8sgpt-operator-system

CR

apiVersion: core.k8sgpt.ai/v1alpha1  # API 版本
kind: K8sGPT                         # 资源类型
metadata:
  name: k8sgpt-bedrock               # 资源名称
  namespace: k8sgpt-operator-system  # 命名空间
spec:
  ai:
    enabled: true                    # 启用 AI 分析功能
    backend: amazonbedrock           # AI 后端服务
    secret:                          # 存储 AWS 凭证的 secret
      name: bedrock-secret           # secret 名称
    model: anthropic.claude-3-sonnet-20240229-v1:0  # AI 模型名称
    region: us-west-2                # AWS 区域
  repository: ghcr.io/k8sgpt-ai/k8sgpt  # K8sGPT 镜像仓库
  version: v0.4.1                    # K8sGPT 版本

Bedrock 自动读取 AWS 区域、模型等,用于调用 AWS Bedrock 服务。

Google Gemini / Vertex AI

Google 的 AI 服务,可通过 Vertex API 调用 Gemini 等模型。

Secret

kubectl create secret generic google-api-secret \
  --from-literal=google-api-key="$GOOGLE_API_KEY" \
  -n k8sgpt-operator-system

CR(API Key 方式)

apiVersion: core.k8sgpt.ai/v1alpha1  # API 版本
kind: K8sGPT                         # 资源类型
metadata:
  name: k8sgpt-google                # 资源名称
  namespace: k8sgpt-operator-system  # 命名空间
spec:
  ai:
    enabled: true                    # 启用 AI 分析功能
    backend: googlevertexai          # AI 后端服务
    model: gemini-pro                # AI 模型名称
    secret:                          # 存储 API 密钥的 secret
      name: google-api-secret        # secret 名称
      key: google-api-key            # secret 中的键
  repository: ghcr.io/k8sgpt-ai/k8sgpt  # K8sGPT 镜像仓库
  version: v0.4.1                    # K8sGPT 版本

如你使用 gcloud 默认授权的方式,还可以不放 API key,而是借助 GCP credential 授权。

Helm Chart 自定义参数

如果你需要让 Operator Deployment 本身携带某些环境变量(比如网络代理等),可以通过修改 Helm Values 来添加:

operator:
  env:
    - name: HTTP_PROXY               # HTTP 代理环境变量
      value: "http://192.168.1.1:7897"  # HTTP 代理地址
    - name: HTTPS_PROXY              # HTTPS 代理环境变量
      value: "http://192.168.1.1:7897"  # HTTPS 代理地址

然后:

helm upgrade k8sgpt-operator k8sgpt/k8sgpt-operator \
  -n k8sgpt-operator-system -f your-values.yaml

这能让 Operator Pod 自身所有网络请求(包括到 AI 端点)走代理。

使用结果观察

部署完 Operator + Secret + K8sGPT CR 之后:

kubectl get k8sgpt -n k8sgpt-operator-system
kubectl get results -n k8sgpt-operator-system

如果 CR 配置正确且 AI 调用成功,你会看到带 AI 解释的 Result 对象。

总结

K8sGPT 是一款强大的 Kubernetes 集群诊断工具,通过结合 SRE 经验和 AI 技术,为用户提供智能、高效的问题分析和解决方案。它的主要优势包括:

  • 智能化分析:利用 AI 技术提供清晰、易懂的问题解释和解决方案
  • 多模型支持:集成多种 AI 后端,满足不同场景需求
  • 可扩展性:支持自定义分析器,适应特定需求
  • 安全与隐私:提供数据匿名化功能,保护敏感信息
  • 灵活部署:支持 CLI 和 Operator 模式,适应不同使用场景
  • 多集群监控:通过 Operator 模式实现对多个集群的集中监控

K8sGPT 代表了 AI 技术在 DevOps 领域的重要应用,为 Kubernetes 集群的管理和维护提供了新的思路和工具。随着 Kubernetes 的广泛采用和 AI 技术的不断进步,K8sGPT 有望成为 DevOps 工具箱中的重要组成部分。

如果你正在寻找一种更智能、更高效的 Kubernetes 故障排查方法,不妨尝试一下 K8sGPT,它可能会为你带来意想不到的便利和价值。


关注微信公众号 Linux容器运维 并回复关键字 “视频资料”,即可获取我们整理的 Kubernetes、Docker 容器、Python 编程、Linux 运维等教学视频合集(总计 548GB)。本资源仅面向学习交流使用,请遵守版权和使用规范,严禁商用、转售或违规传播。

Logo

小龙虾开发者社区是 CSDN 旗下专注 OpenClaw 生态的官方阵地,聚焦技能开发、插件实践与部署教程,为开发者提供可直接落地的方案、工具与交流平台,助力高效构建与落地 AI 应用

更多推荐