智能 Kubernetes 故障排查新方案:K8sGPT 全解析
智能 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 助手集成 |
工作流程
- 扫描阶段:通过分析器扫描 Kubernetes 集群中的资源
- 数据处理:收集和处理集群状态信息
- AI 分析:将问题发送给配置的 AI 后端进行分析
- 结果呈现:返回清晰的问题描述和解决方案
部署模式
K8sGPT 支持两种部署模式:
- CLI 模式:作为命令行工具安装在本地,手动执行分析
- 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 密钥的 secretnoCache:是否禁用缓存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 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)。本资源仅面向学习交流使用,请遵守版权和使用规范,严禁商用、转售或违规传播。
更多推荐




所有评论(0)