主题
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-adapter4. 结果清理
bash
# 清理全部历史结果(不影响后续分析)
kubectl -n k8sgpt delete results --all5. 升级
bash
# chart 与镜像升版:修改 deploy.sh 顶部版本变量 + k8sgpt-cr.yaml 的 spec.version,
# 先 ./deploy.sh sync 推送新物料,再 ./deploy.sh6. 常见问题
| 现象 | 原因 | 处理 |
|---|---|---|
| 一直没有 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" |
| 分析服务器 ImagePullBackOff | CR 的 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-bad8. 卸载
bash
kubectl -n k8sgpt delete k8sgpt k8sgpt # 先删实例(operator 有 finalizer)
kubectl -n k8sgpt delete results --all
helm uninstall k8sgpt -n k8sgpt
kubectl delete ns k8sgpt