背景
在 Kubernetes 上,从部署 Deployment 到正常提供服务,整个流程可能会出现各种各样问题,有兴趣的可以浏览 Kubernetes Deployment 的故障排查可视化指南(2021 中文版)[1]。从可视化指南也可能看出这些问题实际上都是有迹可循,根据错误信息基本很容易找到解决方法。随着 ChatGPT 的流行,基于 LLM 的文本生成项目不断涌现,k8sgpt[2] 便是其中之一。
k8sgpt 是一个扫描 Kubernetes 集群、诊断和分类问题的工具。它将 SRE 经验编入其分析器,并通过 AI 帮助提取并丰富相关的信息。
其内置了大量的分析器:
- podAnalyzer
- pvcAnalyzer
- rsAnalyzer
- serviceAnalyzer
- eventAnalyzer
- ingressAnalyzer
- statefulSetAnalyzer
- deploymentAnalyzer
- cronJobAnalyzer
- nodeAnalyzer
- hpaAnalyzer(可选)
- pdbAnalyzer(可选)
- networkPolicyAnalyzer(可选)
k8sgpt 的能力是通过 CLI 来提供的,通过 CLI 可以对集群中的错误进行快速的诊断。
但是,每次进行诊断都要执行命令,有点繁琐且限制较多。我想大家想要的肯定是能够监控到问题并自动诊断。这就有了今天要介绍的 k8sgpt-operator[3]
介绍
简单来说 k8sgpt-operator 可以在集群中开启自动化的 k8sgpt。它提供了两个 CRD: K8sGPT 和 Result。前者可以用来设置 k8sgpt 及其行为;而后者则是用来展示问题资源的诊断结果。
演示
实验环境使用 k3s 集群。
安装 k8sgpt-operator
安装完成后,可以看到随 operator 安装的两个 CRD:k8sgpts 和 results。
在开始之前,需要先生成一个 OpenAI 的 key[4],并保存到 secret 中。
接下来创建 K8sGPT 资源。
执行完上面的命令后在 openai 命名空间下会自动创建 Deployment k8sgpt-deployment 。
测试
使用一个不存在的镜像创建 pod。
然后在 openai 命名空间下会看到一个名为 defaulttest 的资源。
详细信息中可以看到诊断内容以及出现问题的资源。
参考资料
[1] Kubernetes Deployment 的故障排查可视化指南(2021 中文版): https://atbug.com/troubleshooting-kubernetes-deployment-zh-v2/
[2] k8sgpt: https://github.com/k8sgpt-ai/k8sgpt
[3] k8sgpt-operator: https://github.com/k8sgpt-ai/k8sgpt-operator
[4] OpenAI 的 key: https://platform.openai.com/account/api-keys