Skip to content

K8sGPT 操作文档

对应部署见 部署文档。组件:命名空间 k8sgpt,RKE2 v1.35.6。 API Key 保存在交付目录 .secrets.env(本文不展示明文)。 更新:2026-08-01

1. 日常使用(最常用)

bash
export KUBECONFIG=~/.kube/config-122.31

# 查看全部异常分析结果
kubectl get results.core.k8sgpt.ai -A

# 表格太挤时用别名/只关心字段
kubectl -n k8sgpt get results -o custom-columns='NAME:.metadata.name,KIND:.spec.kind,AGE:.metadata.creationTimestamp'

# 查看某条结果的 AI 诊断与解决方案
kubectl -n k8sgpt get result <NAME> -o jsonpath='{.spec.details}'; echo

# 查看原始错误(含打码映射)
kubectl -n k8sgpt get result <NAME> -o jsonpath='{.spec.error}'; echo

解读要点:

  • error 是扫描器发现的客观问题;details 是 AI 给出的解释与修复建议
  • AI 建议仅作参考,执行修复命令前先人工评审(尤其 anonymize 开启时 AI 可能误读打码名)
  • 问题修复后,下一轮分析(≤10 分钟)对应 Result 自动消失

2. 日常巡检

bash
# 组件状态
kubectl -n k8sgpt get pods
kubectl -n k8sgpt get k8sgpt

# 分析是否在进行:日志中应周期性出现 Analyze 请求
kubectl -n k8sgpt logs deploy/k8sgpt --tail=20 | grep Analyze

# operator 日志(调谐周期 10m)
kubectl -n k8sgpt logs deploy/k8sgpt-k8sgpt-operator-controller-manager -c manager --tail=20

监控:ServiceMonitor 已接入 rancher-monitoring,可在 Grafana 查看 operator 指标。

3. 配置调整

3.1 调整扫描频率

bash
kubectl -n k8sgpt edit k8sgpt k8sgpt
# spec.analysis.interval: 30m   # 频率放低省 API 费用;格式必须 ^[0-9]+[smh]$

3.2 更换模型 / 切换内网 vLLM

bash
kubectl -n k8sgpt edit k8sgpt k8sgpt
# spec.ai.model: qwen-max          # 更强但更贵
# 或切内网 vLLM:
# spec.ai.baseUrl: http://<vllm地址>:30006/v1
# spec.ai.model: qwen3.5-27b
# spec.ai.anonymized: false        # 内网后可关闭,分析更准确
kubectl -n k8sgpt edit secret k8sgpt-backend   # 同步更换 API Key(vLLM 无 key 填任意非空值)

3.3 限定分析器范围(减少噪音/费用)

bash
kubectl -n k8sgpt edit k8sgpt k8sgpt
# spec.filters: ["Pod", "Service", "Deployment", "Node"]   # 只跑指定 Analyzer,默认全部

3.4 飞书通知(已启用)

链路:K8sGPT sink(cloudevents) → k8sgpt-feishu-adapter → 飞书群机器人。 新异常结果产生时自动推送互动卡片(资源/❌问题/🛠修复建议,英文报告自动兜底翻译)。 原理与最佳实践见 飞书适配器详解

bash
# 检查适配器
kubectl -n k8sgpt get pods -l app=k8sgpt-feishu-adapter

# 手动发一条测试消息验证链路(在集群内执行)
kubectl -n k8sgpt run feishu-test --rm -i --restart=Never \
  --image=192.168.122.156:30000/k8sgpt/python:3.12-alpine --command -- python -c '
import json,urllib.request
ev={"data":{"text":"测试 K8sGPT analysis of the Pod test/demo","attachments":[{"text":"错误: 容器反复重启\n建议: 检查 command/args","title":"Report"}]}}
print(urllib.request.urlopen(urllib.request.Request(
  "http://k8sgpt-feishu-adapter:8080/",data=json.dumps(ev).encode())).read().decode())'

# 更换群机器人
kubectl -n k8sgpt edit secret k8sgpt-feishu   # 更新 webhook-url
kubectl -n k8sgpt rollout restart deploy/k8sgpt-feishu-adapter

4. 结果清理

bash
# 清理全部历史结果(不影响后续分析)
kubectl -n k8sgpt delete results --all

5. 升级

bash
# chart 与镜像升版:修改 deploy.sh 顶部版本变量 + k8sgpt-cr.yaml 的 spec.version,
# 先 ./deploy.sh sync 推送新物料,再 ./deploy.sh

6. 常见问题

现象原因处理
一直没有 Result集群健康(正常);或分析服务器异常kubectl -n k8sgpt logs deploy/k8sgpt;制造一个坏 Pod 验证(下节)
Result 一直不更新operator 调谐卡住/后端超时看 operator 日志;DashScope 控制台查额度与限流
AI 建议提到 base64/乱码anonymize 打码导致误读正常现象;切内网后端后可关 anonymize
飞书收不到通知适配器异常/飞书 webhook 失效/sink 未配查适配器日志 kubectl -n k8sgpt logs deploy/k8sgpt-feishu-adapter;用 3.4 测试消息定位;飞书返回 19056 为关键词限制,19024 为频率限制
飞书消息只有标题没有内容旧版适配器按 Result CR 解析,而 sink 真实载荷是 {text, attachments} slack 风格(字段全空)已修复(适配器兼容两种载荷 + 原始报文兜底);若再出现,看适配器日志中 recv 的实际报文结构
interval 报错 invalid格式不是 10m/600s 这种 duration改成 "10m"
分析服务器 ImagePullBackOffCR 的 repository/version 未指向内部 Harbor按部署文档 §6 修正
API 费用突增interval 太短 + 异常项多调大 interval、用 filters 限定分析器

7. 功能验证(制造故障演练)

bash
# 部署一个必然 CrashLoop 的 Pod
kubectl run k8sgpt-demo-bad --image=192.168.122.156:30000/mysql/mysql:8.4.5-debian-12-r0 \
  --restart=Always --command -- sh -c 'exit 1'

# 等 ≤10 分钟后应出现对应 Result
kubectl get results.core.k8sgpt.ai -A | grep -i k8sgptdemobad

# 验证后清理
kubectl delete pod k8sgpt-demo-bad

8. 卸载

bash
kubectl -n k8sgpt delete k8sgpt k8sgpt          # 先删实例(operator 有 finalizer)
kubectl -n k8sgpt delete results --all
helm uninstall k8sgpt -n k8sgpt
kubectl delete ns k8sgpt