早上一来老板把我叫进办公室语重心长地说“猛男啊探索阶段步子不要迈得太大。一天看两个项目容易消化不良。既然你觉得 K8sGPT 这个‘老中医’靠谱那今天别的都不干了。你把它在咱们的 Dev开发测试环境正儿八经地拉起来。怎么部署、怎么用全写在你日记里然后把这套东西丢给底下那几个初级运维去折腾。让他们试跑几个月看看能不能真节约排障时间。”老板不愧是老板稳扎稳打不见兔子不撒鹰。 与其每天在 GitHub 上看那些花里胡哨的 Demo不如把一个能解决实际痛点的工具彻底吃透。行今天就给小张他们搞个“保姆级”的 K8sGPT 落地文档。1. K8sGPT Dev 环境部署实录猛男亲笔 SOP既然要给团队用就不能像昨天那样只在跳板机上扔个二进制文件了事得按照正规军的玩法用 Helm 部署K8sGPT Operator让它常驻集群再配合 CLI 工具。而且必须对接我第一天搭的本地 Ollama休想套现去调付费的 OpenAI 接口环境准备AWS EKS Dev 集群 (eks-dev-cluster)本地大模型服务内网 IP10.0.1.55:11434(跑着 Ollama Llama3 8B)Step 1: 安装 K8sGPT CLI给小张他们装在堡垒机上# 堡垒机上一把梭 curl -sO https://github.com/k8sgpt-ai/k8sgpt/releases/download/v0.3.8/k8sgpt_Linux_x86_64.tar.gz tar -zxvf k8sgpt_Linux_x86_64.tar.gz sudo mv k8sgpt /usr/local/bin/Step 2: 绑定本地大模型省钱秘籍不能让他们乱花钱把 K8sGPT 的后端指回我们自己的机器。# 配置 Ollama 作为 AI 后端 k8sgpt auth add --backend ollama --model llama3 --baseurl http://10.0.1.55:11434/v1 # 设为默认 k8sgpt auth default --backend ollamaStep 3: 部署 K8sGPT Operator集群常驻监控为了让 AI 能持续巡检我用 Helm 把 Operator 塞进了 Dev 集群的k8sgpt-system命名空间。helm repo add k8sgpt https://charts.k8sgpt.ai/ helm repo update helm install k8sgpt k8sgpt/k8sgpt-operator -n k8sgpt-system --create-namespace运维注我特意配了 RBAC基于角色的权限控制只给了它 Dev 命名空间的get和list权限。AI 这种东西防人之心不可无万一它脑抽发个delete指令把开发环境的库删了研发总监能拿刀砍我。只读权限最安全。2. “笨蛋运维”专属使用指南部署完后我把初级运维小张他们几个叫到会议室把下面的使用指南投在了大屏幕上。场景一开发跑来群里吼“我的 Pod 怎么一直 Pending”以前你们得连上 VPN打开终端敲kubectl describe pod xxx -n dev然后在一大堆乱七八糟的 Events 里找原因英文不好的还要打开百度翻译。现在只需一行命令k8sgpt analyze -n dev --explainAI 会直接输出人话举例在dev命名空间中user-service-pod无法启动。原因节点内存不足 (Insufficient Memory)。该 Pod 请求 2GB 内存但当前可用节点最多只有 1GB 剩余。解决建议1. 修改 Deployment 降低资源 Request2. 通知猛男扩容 EKS 节点组。场景二前端说“接口调不通是不是你们网关挂了”以前查 Ingress 日志查 Service 映射查 Endpoints搞半小时发现是开发自己 Label 写错了。现在直接扫整个集群的网络层k8sgpt analyze --filterIngress,Service --explainAI 甩锅利器原因Serviceorder-svc找不到任何 Endpoints。解决建议请检查order-svc的 selector (app: order-v2) 是否与现有的 Pod label 匹配。目前没有运行带有该 label 的 Pod。 拿着这段话直接截图甩给开发结案3. 猛男的试运行训话把账号和文档发给小张后看着他两眼放光的样子我敲了敲黑板泼了一盆冷水“听着这玩意儿是个辅助驾驶不是自动驾驶。 大模型有时候会‘幻觉’如果它让你去重启核心数据库你敢照做明天你就可以去财务领离职证明了。 接下来的三个月Dev 环境的所有非致命报错你们先用k8sgpt过一遍。我要你们记录下两样东西它每次准确命中问题的截图。它胡说八道、带偏你们排查思路的案例。三个月后我们拿这份报告向老板交差看看这玩意儿到底值不值得上生产环境。”下午刚端起杯子喝了口枸杞水小张就抱着个笔记本凑过来了。这小子平时让他看 Confluence 文档就打瞌睡一看到能让他少敲几行命令的 AI 工具倒是来劲了追着我问十万个为什么。他问的这两个问题其实暴露了他对 K8s 底层运行机制还是半懂不懂。虽然心里吐槽但我还是放下保温杯把他拉到白板前耐着性子给他把底层逻辑扒光了讲了一遍。1. K8sGPT 到底装在哪了CLI 与 Operator 的区别“小张啊你第一个问题问得好但你把概念搞混了。我今天其实给你部署了两套东西。”第一套K8sGPT CLI命令行工具没错这个二进制文件k8sgpt我确确实实是下载到了你能连上 EKS 的那台跳板机堡垒机上。就是你平时敲kubectl的那台机器。作用这是给你们“人类”用的。你敲下k8sgpt analyze的时候它其实就相当于一个更聪明的kubectl去调取 K8s 的 API 拿到报错信息然后发给咱们内网的 Ollama 大模型最后在跳板机的终端里把人话打印给你看。第二套K8sGPT Operator集群内的守护进程这个是我用 Helm 安装的它作为一个 Pod 运行在 Dev 集群的k8sgpt-system命名空间里。作用这是给“系统”用的。它不需要你敲命令它是一天 24 小时在集群内部循环扫描巡检。以后如果它发现了问题可以直接推送到咱们公司的飞书/钉钉报警群里。2. RBAC 权限到底是怎么给的人类权限 vs 机器权限看他还在消化我用红笔在白板上重重敲了两下讲他最关心的权限问题。“至于你问的 RBAC基于角色的访问控制你必须把‘人’和‘机器’分开看”情况一你在跳板机上用 CLI 敲命令走的是你的权限K8sGPT CLI 本身没有任何特权。当你运行它的时候它会自动去读取你跳板机上的~/.kube/config文件。 这就意味着你小张平时用kubectl能看哪些命名空间K8sGPT 就能看哪些你平时看不了生产环境的 PodK8sGPT 也绝对看不了它完全继承了你的 IAM 身份和 K8s User 权限。情况二集群内部的 Operator走的是 ServiceAccount 权限这个才是我今天重点配置了 RBAC 的地方。那个跑在k8sgpt-system里的 Pod它没有~/.kube/config可以读它是怎么调 API 的靠的是ServiceAccount服务账号。我给他看了我写的 YAML 片段具体是这么干的建账号我在k8sgpt-system里建了一个专属的ServiceAccount名字就叫k8sgpt-operator-sa。定规则 (ClusterRole/Role)我写了一个Role里面明确规定了只允许对dev命名空间里的pods,services,deployments,ingress等资源执行get,list,watch操作。绝对没有create,update,delete我要是给大模型分配了删除权限它哪天犯病了把集群清空咱俩都得进局子。绑定 (RoleBinding)最后我用RoleBinding把这个规则绑到了那个ServiceAccount上。这样Operator 那个 Pod 里的程序启动时就会挂载一个 Token拿着这个 Token它就只能乖乖地在 Dev 环境里“只读巡检”越雷池一步都不行。听我讲完小张恍然大悟抱着笔记本屁颠屁颠地回去跑测试了。我刚坐下没十分钟连口凉水都没来得及咽小张这小子又探个脑袋过来了手里还端着个小本本。“猛哥猛哥我又卡住了……这 k8sgpt 敲下去是不是每次都在 dev 环境里‘呼啦’一下全局瞎扫啊有时候集群里几十个报错它全给我吐出来我看都看不过来。能不能像kubectl describe pod xxx那样我指着哪个 Pod它就只给我看哪个”我啪地一下把手里的鼠标拍在桌子上。 不过转念一想算这小子有点运维的直觉知道“全局扫描”是消耗性能的大忌。如果每次排查个小问题都让大模型把整个 namespace 扫一遍那本地那台跑 Ollama 的 EC2 显卡不得冒烟了算力就是钱啊我把他拽回屏幕前打开终端给他演示了什么叫**“从青铜到王者的排障姿势”**。1. 猛男手把手教小张K8sGPT 的“精准打击”“看好了小张CLI 命令不要只会按回车要学会加参数”【青铜玩法全图轰炸】k8sgpt analyze -n dev --explain猛男点评这是你刚才干的事。它会把你指定的dev命名空间里所有的 Pod、Service、Ingress、甚至 ReplicaSet 统统查一遍。排查全局网络瘫痪的时候可以用平时单个业务报警你用这个纯属浪费大模型的算力和你的时间。【白银玩法分类过滤只扫特定资源】k8sgpt analyze -n dev --filterPod --explain猛男点评加了--filter参数。你想看 Pod 起不来就--filterPod你想看网关问题就--filterIngress,Service。这样 AI 就不会去管那些无关的资源速度起码快一倍。【王者玩法精准外科手术打击指定单个 Pod】“这才是你想问的终极答案”我重重地敲下键盘k8sgpt analyze -n dev --filterPod --nameuser-service-f8d9b-xcv2 --explain猛男点评看到没有--filterPod配合--name你的Pod名称 当你收到飞书告警明确知道是user-service-f8d9b-xcv2这个 Pod 挂了比如 OOMKilled 或者 CrashLoopBackOff。你直接把它的名字传进去 这时候K8sGPT 会变成一个极其专注的老中医只盯着这一个病人把脉瞬间就能把报错日志提取出来发给 AI秒出诊断结果。听完这三个命令小张在小本本上奋笔疾书眼里的崇拜又多了一分。我趁热打铁敲打他“记住AI 工具虽然好用但它不是魔法。大模型的上下文窗口Context Window是有限的。如果你一次性把整个集群几百个报错日志全塞给它它不仅回答得慢而且极容易产生‘幻觉’给你胡说八道。作为运维你的职责是先帮 AI 缩小排查范围再让 AI 帮你分析具体日志。懂了吗”“懂了猛哥先用人脑定位范围再用 AI 分析细节我这就去试”小张屁颠屁颠地跑回了工位。老板看着小张的背影我其实挺感慨的。 以前我们带新人教的是“怎么查日志”、“怎么敲命令”。 现在有了 AI我们带新人的重心变成了教他们**“怎么向机器提问”、“怎么给 AI 缩小上下文”**。这就叫 Prompt Engineering提示词工程在运维领域的真实落地啊