饮墨

子安饮墨馀三斗,留与卿儿作赋来

K8sGPT 实战:3 步用 AI 自动诊断 Kubernetes 集群问题,排障效率提升 10 倍

8 views

痛点

Kubernetes 集群出了问题,排障流程通常是这样的:kubectl get pods 发现 CrashLoopBackOff → kubectl describe pod 翻 Events → kubectl logs 看日志 → Google 搜报错 → 试方案 → 不行再来一轮。一个有经验的运维 15 分钟能定位,新手可能耗上两小时。

更棘手的是复合问题:Pod Pending 可能是资源不足、NodeSelector 不匹配、PV 绑定失败、或者 Taint 没配 Toleration——describe 输出一大坨 Events,哪条才是根因?集群节点 50+ 之后,每天各种 Warning Events 成百上千,人肉逐条分析根本不现实。

核心矛盾:K8s 排障高度依赖经验,而经验无法快速复制给团队每个人。

方案:K8sGPT — AI 驱动的 Kubernetes 诊断引擎

K8sGPT 是 CNCF Sandbox 项目,核心思路很简单:自动扫描集群中的异常资源(Pod、Service、Ingress、PV、NetworkPolicy 等),将问题上下文发给 LLM 分析,输出人类可读的根因解释 + 修复建议

关键特性: - 多后端支持:OpenAI、Azure OpenAI、Ollama(本地模型)、Amazon Bedrock、Google Gemini - 内置分析器:覆盖 Pod、ReplicaSet、Service、Ingress、PVC、NetworkPolicy、CronJob 等 15+ 资源类型 - Operator 模式:部署到集群内持续扫描,结果以 CRD(Result)形式存储,可对接 Prometheus 告警 - 隐私友好:支持 Ollama 等本地模型,敏感信息不出集群

实操步骤

第 1 步:安装 K8sGPT CLI 并配置 AI 后端

# macOS
brew install k8sgpt

# Linux (amd64)
curl -LO https://github.com/k8sgpt-ai/k8sgpt/releases/latest/download/k8sgpt_linux_amd64.tar.gz
tar xzf k8sgpt_linux_amd64.tar.gz
sudo mv k8sgpt /usr/local/bin/

# 验证
k8sgpt version

配置 AI 后端(二选一):

方案 A:使用 OpenAI / 兼容 API

# 配置 OpenAI
k8sgpt auth add --backend openai --model gpt-4o-mini

# 或使用兼容 API(如 LiteLLM Proxy)
k8sgpt auth add --backend openai \
  --model gpt-4o-mini \
  --baseurl http://your-litellm-proxy:4000/v1

方案 B:本地 Ollama(数据不出内网)

# 确保 Ollama 已运行且拉取了模型
ollama pull llama3.1:8b

# 配置 K8sGPT 使用 Ollama
k8sgpt auth add --backend localai \
  --model llama3.1:8b \
  --baseurl http://localhost:11434/v1
# 设置默认后端
k8sgpt auth default --provider openai  # 或 localai

# 验证配置
k8sgpt auth list

第 2 步:运行诊断分析

# 基础扫描:分析当前集群所有异常
k8sgpt analyze

# 带 AI 解释的详细分析(核心功能)
k8sgpt analyze --explain

# 指定命名空间
k8sgpt analyze --explain --namespace production

# 过滤特定资源类型
k8sgpt analyze --explain --filter Pod,Service,Ingress

# JSON 输出(方便脚本处理)
k8sgpt analyze --explain --output json

典型输出示例:

0 production/api-server-7d4b8c6f9-x2k5p(Pod)
- Error: Back-off restarting failed container

Explanation: The Pod is in CrashLoopBackOff state. The container 
'api-server' is failing to start because the environment variable 
'DATABASE_URL' references a Secret 'db-credentials' which does not 
exist in the 'production' namespace. 

Solution: Create the missing Secret:
  kubectl create secret generic db-credentials \
    --from-literal=DATABASE_URL='postgres://...' \
    -n production
Or check if the Secret name in the Deployment spec has a typo.

从 Events 噪音中直接给出根因和修复命令——这就是 K8sGPT 的核心价值。

第 3 步:部署 Operator 实现持续监控

CLI 适合临时排查,生产环境推荐 Operator 模式实现 7×24 持续扫描:

# 用 Helm 部署 K8sGPT Operator
helm repo add k8sgpt https://charts.k8sgpt.ai/
helm repo update

helm install k8sgpt-operator k8sgpt/k8sgpt-operator \
  -n k8sgpt --create-namespace

创建 K8sGPT 资源定义扫描策略:

# k8sgpt-config.yaml
apiVersion: core.k8sgpt.ai/v1alpha1
kind: K8sGPT
metadata:
  name: k8sgpt
  namespace: k8sgpt
spec:
  ai:
    enabled: true
    backend: openai          # 或 localai
    model: gpt-4o-mini
    secret:
      name: k8sgpt-openai-secret
      key: api-key
  noCache: false             # 启用缓存避免重复分析
  # 自定义分析器列表
  filters:
    - Pod
    - Service
    - Ingress
    - PersistentVolumeClaim
    - CronJob
    - NetworkPolicy
  # 排除指定命名空间
  targetNamespace: ""        # 空=所有命名空间
  extraOptions:
    backstage:
      enabled: false
# 创建 API Key Secret
kubectl create secret generic k8sgpt-openai-secret \
  --from-literal=api-key='sk-xxx' \
  -n k8sgpt

# 部署配置
kubectl apply -f k8sgpt-config.yaml

# 查看诊断结果(CRD 形式存储)
kubectl get results -n k8sgpt
kubectl describe result <result-name> -n k8sgpt

对接 Prometheus 告警:Operator 自动暴露 /metrics 端点,关键指标:

# Prometheus 告警规则示例
groups:
  - name: k8sgpt
    rules:
      - alert: K8sGPTNewIssueDetected
        expr: k8sgpt_number_of_results > 0
        for: 5m
        labels:
          severity: warning
        annotations:
          summary: "K8sGPT 检测到 {{ $value }} 个集群问题"
          description: "运行 kubectl get results -n k8sgpt 查看详情"

避坑指南

坑 1:Token 消耗失控

K8sGPT 每次分析都会调用 LLM,集群问题多时 Token 消耗惊人。解决方案: - Operator 模式默认有缓存(noCache: false),相同问题不会重复调用 - 用 --filter 限制分析范围,别对所有资源类型全开 - 生产环境优先选 gpt-4o-mini 等低成本模型,诊断准确度够用

坑 2:本地模型效果差

7B/8B 参数的本地模型对 K8s 问题的理解有限,容易给出泛泛的建议。解决方案: - 本地模型至少用 13B+ 参数(如 llama3.1:70bqwen2.5:32b),效果接近 GPT-4o-mini - 或者用混合方案:日常扫描走本地模型,复杂问题手动切云端 API

坑 3:RBAC 权限范围

K8sGPT 需要读取集群资源的权限。Operator 默认创建的 ClusterRole 权限较宽。解决方案: - 生产环境用 targetNamespace 限制扫描范围 - 审查 Operator 创建的 RBAC,按需收窄到只读必要资源 - 敏感集群建议配合 NetworkPolicy 限制 K8sGPT Pod 的出站流量

总结

K8sGPT 的核心价值不是替代运维工程师,而是把排障经验编码成 AI 可执行的分析流程——新手也能在 30 秒内获得资深工程师级别的根因分析。

推荐落地路径: 1. 先用 CLI:团队成员日常排障 k8sgpt analyze --explain,立竿见影 2. 再部署 Operator:持续扫描 + Prometheus 告警,问题自动发现 3. 最后接自动化:Result CRD + 自定义 Controller/n8n 工作流,实现部分问题自动修复

一句话:K8s 排障从"人找问题"变成"问题找人",这是 AI 在运维领域最务实的落地方式之一。