前面我们介绍了 《开发 K8s Chat 命令行工具》,实现了通过和 Kubernetes 进行交互的方式进行运维,虽然文章中所描述的功能比较简单,但是可以以此进行扩展,丰富功能。
那本章,我们将在 《开发 K8s Chat 命令行工具》的基础之上,增加 Kubernetes 故障诊断工具,其主要功能点是:
- 获取集群的 event 时间,特别关注 warning 级别事件
- 然后进入对应的 pod 获取日志
- 大模型结合事件和日志进行分析,得出解决问题的建议
当然,这里也只是起到一个抛砖引玉的作用,提供简单的思路,可以自行扩展。
开发过程
(1)首先使用 cobra-cli 新增一个 analyze 命令
复制(2)然后在 analyze 下面添加一个子命令 event,专门用于分析事件
复制(3)设计一个方法 getPodEventsAndLogs 用于获取 K8s 的事件和日志
复制我们使用一个 map[string][]string 来保存 pod 的事件和日志信息,然后通过 client-go 获取 warning 级别的事件,最后过滤需要的 pod 事件以及 pod 相关信息,然后继续通过 client-go 获取对应 pod 的日志,然后把这些信息放到 map 中。
(4)设计一个 sendToChatGPT 的方法,接受 pod 的事件和日志信息,然后通过 AI 对其进行分析
复制和 AI 的对话主要就是 prompt 的设计,然后把具体的参数传进去即可,没有特别的地方。
(5)使用 k8scopilot.exe analyze event 进行分析验证
分析结果如下:
复制从上面的分析结果可以看到基本能够给出比较准确的建议。
当然,这里只是诊断问题,还可以对其功能进行扩展,比如:
- 故障自愈:
- 结合 Function Calling 实现自动修复简单问题
- 增强分析:
- 增加更多诊断数据源(metrics、节点状态等)
- 实现历史问题匹配和知识库
- 可视化:
- 生成 HTML 格式的诊断报告
- 支持问题严重程度分级展示
最后
本文在《开发 K8s Chat 命令行工具》的基础上,进一步实现了 Kubernetes 故障诊断功能,核心思路是通过工具获取集群中 Warning 级别的事件及对应 Pod 的日志,再借助大模型分析并输出解决方案,为运维工作提供了便捷的故障排查途径。
具体而言,开发过程通过 cobra-cli 新增 analyze 命令及子命令 event,构建 getPodEventsAndLogs 方法获取相关事件与日志,设计 sendToChatGPT 方法将信息传入大模型进行分析。