当你使用 Kubernetes 时,迟早会遇到集群中的问题,需要进行调试和修复,以便你的 Pod 和服务能够按预期运行。无论你是刚刚开始使用 Kubernetes 还是正在处理大规模且更复杂的环境,调试集群内进程并不总是那么简单,而且可能会成为一项耗时且困难的任务。
云原生环境中有多种可用的调试解决方案,可帮助你访问集群内信息。然而,其中大多数不提供上下文信息。
在这篇博文中,我将向你介绍K8sGPT,这个项目旨在为所有人提供 Kubernetes 的超能力。
K8sGPT 的应用场景
概述
K8sGPT于2023年4月由一群云原生生态系统中经验丰富的工程师启动。它是一个完全开源的项目。K8sGPT 背后的主要思想是利用 AI 模型提供 Kubernetes 错误消息以及其他集群见解的详细且情境化的解释。
图片
此外,该项目已被两个组织在生产中使用,并已申请成为 CNCF 沙箱项目。从长远来看,该项目的目标是为 Kubernetes 构建面向任务的机器学习模型。
该项目已经支持多种安装选项和不同的人工智能后端。在这篇博文中,我将向你展示如何安装和开始使用 K8sGPT、CLI 工具和 Operator,以及 K8sGPT 如何支持其他集成。
安装
根据你的偏好和操作系统,有多种安装选项可用。你可以在K8sGPT文档的安装部分找到不同的选项。
如下所述安装 K8sGPT 的先决条件是在 Mac 上安装Homebrew或在 Windows 计算机上安装 WSL。
接下来,你可以运行以下命令:
其他安装选项
基于 RPM 的安装 (RedHat/CentOS/Fedora)
32位:
64 位:
基于 DEB 的安装 (Ubuntu/Debian)
32位:
64 位:
要验证 K8sGPT 是否安装正确,你可以检查安装的版本:
K8sGPT CLI
要查看 K8sGPT 提供的所有命令,请使用 --help 标志:
接下来,我们必须授权AI后端。在本文中,我们将使用 OpenAI。
先决条件
遵循下一节的先决条件是拥有一个OpneAI 帐户和一个正在运行的 Kubernetes 集群,例如 microk8s 或 minikube 就足够了。
拥有 OpneAI 帐户后,你需要访问这个地址https://platform.openai.com/account/api-keys生成新的 API 密钥
或者,你可以运行以下命令,K8sGPT 将在默认浏览器中打开同一地址:
K8sGPT 与 OpenAI 交互需要此密钥。使用新创建的 API 密钥/令牌授权 K8sGPT:
你可以使用以下命令列出你的后端:
接下来,我们将在 Kubernetes 集群中部署一个异常的Deployment,Pod 将成为CrashLoopBackOff状态。以下是 YAML:
接下来,我们将为示例应用程序创建demo命名空间并安装部署:
现在你将看到我们的演示命名空间中的 Pod 抛出错误:
图片
如果我们查看其中一个 pod 的事件,但是我们不知道具体问题原因:
因此,我们可以运行 K8sGPT 命令来访问有关这些 pod 出错原因的更多详细信息:
这将向我们展示 k8sGPT 在集群中发现的问题:
要接收更多信息以及有关如何解决问题的建议,我们可以使用以下--explain标志:
附加功能
根据你的集群大小和 K8sGPT 在集群中识别的问题数量,你还可以按特定命名空间和工作负载类型进行过滤。
此外,如果你或你的组织担心 OpenAI 或其他后端接收有关你的工作负载的敏感信息,你可以使用--anonymize规避应用的敏感信息。
与其他工具的集成
云原生生态系统中大多数工具的价值源于它们与其他工具的集成程度。
在撰写本文时,K8sGPT 提供了与 Gafana 和 Prometheus 等可观察性工具的轻松集成。此外,还可以为 K8sGPT 编写插件。维护者提供的第一个插件是Trivy,一个一体化的云原生安全扫描器。
你可以使用以下命令列出所有可用的集成:
接下来,我们要激活 Trivy 集成:
这将在集群内安装 Trivy Operator(如果尚未安装):
图片
激活集成后,我们可以通过 k8sgpt 过滤器,使用 Trivy 创建的漏洞报告作为 K8sGPT 分析的一部分:
过滤器对应于 k8sgpt 代码中的特定分析器。分析器仅查看相关信息,例如最关键的漏洞。
要使用 VulnerabilityReport 过滤器,请使用以下命令:
(FIXME)与之前类似,我们也可以要求 K8sGPT 对扫描提供进一步的解释:
K8sGPT Operator
虽然 CLI 工具为集群管理员提供了对其基础设施和工作负载执行即席扫描的功能,但 K8sGPT Operator 在集群中全天候 (24/7) 运行。它是 Kubernetes 原生的,这意味着它作为 Kubernetes 自定义资源运行,并生成作为 YAML 清单存储在集群中的报告。
要安装 Operator,请按照以下命令进行操作:
如果你想将 K8sGPT 与 Prometheus 和 Grafana 集成,你可以通过向上面的安装提供values.yaml 清单来使用略有不同的安装:
然后安装 Operator 或更新现有安装:
在本例中,我们告诉 K8sGPT 还安装一个 ServiceMonitor,它将扫描报告中的指标发送到 Prometheus,并为 K8sGPT 创建一个仪表板。如果你使用了此安装,则还需要安装 kube-prometheus-stack Helm Chart 才能访问 Grafana 和 Prometheus。这可以通过以下命令来完成:
此时,你应该在集群内运行 K8sGPT Operator 和 Prometheus Stack Helm Chart(也是 Kubernetes Operator)。
与我们需要向 CLI 提供 OpenAI API 密钥的方式类似,我们需要使用 API 密钥创建 Kubernetes 密钥。为此,请使用与之前相同的密钥,或者在你的 OpenAI 帐户上生成一个新密钥。
要生成 Kubernetes 密钥,请将你的 OpenAI 密钥粘贴到以下命令中:
然后,我们需要配置 K8sGPT Operator 以了解要使用哪个版本的 K8sGPT 以及哪个 AI 后端:
现在,我们需要将此文件应用到我们的 K8sGPT 集群命名空间:
几秒钟内,Operator 将创建新结果:
以下是不同命令的屏幕截图,你可以按照这些命令从 K8sGPT Operator 查看结果报告:
从 K8sGPT Operator 查看结果报告
最后,我们将看一下 Grafana 仪表板。端口转发 Grafana 服务以通过 localhost 访问它:
打开 localhost:3000,然后导航到 Dashboards>K8sGPT Overview,然后你将看到包含结果的仪表板:
Grafana 中的 K8sGPT 仪表板
参考
- 1. https://k8sgpt.ai/
- 2. https://docs.k8sgpt.ai/
- 3. https://github.com/k8sgpt-ai