
K8S 中实现 AIOps 的 OpenAPI 项目介绍
背景
如今,AI 是各个领域,各个行业的热门话题。基于Kubernetes的DevOps应用开发场景也不例外。尤其是对那些追求自动化,高效开发,高效运维的用户而言。
因此,鉴于最近比较火的 ChatGPT ,与 Kubernetes 结合的相关项目也开始出现。下面也让我们看看最近出现了哪些由OpenAI和ChatGPT支持的开源工具,使K8s的生态更丰富。
下面介绍的这些工具,大多数是为终端 (CLI) 使用而设计的,而不是图形化。
使用AI对K8进行故障排除
1. K8SGPT
- “一个扫描 Kubernetes 集群、诊断和分类问题的工具。它将 SRE 经验编入其分析器,并通过 AI 帮助提取并丰富相关的信息”
- Website: http://k8sgpt.ai/
- GitHub: https://github.com/k8sgpt-ai/k8sgpt
- GH stars: ~3100
- First commit: Mar 21, 2023
- ~700 commits, 32 releases, ~40 contributors
- Language: Go
k8sgpt 由 Alex Jones 发起,以 "让每个人都拥有 Kubernetes 能力 "为目标,是同类项目中最著名、最突出的一个。
k8sgpt 目前主要通过 CLI 实现其功能,通过 CLI 可以对集群中的错误进行快速的诊断。 k8sgpt analyze
旨在查找并提示 Kubernetes 集群中出现的问题。使用“分析器 (analyze)”来实现这一功能,它定义了每个K8s对象的逻辑对象以及它可能遇到的问题。例如,Kubernetes Services 的分析器将检查特定服务是否存,以及其端点是否就绪。
发现这样的问题本身并不是什么大事,但其中的逻辑并不简单。当你要求 k8sgpt 解释如何解决现有问题时,神奇的事情就发生了——只要执行 k8sgpt analyze --explain
即可。该命令将要求 AI 能针对你的具体情况提供说明,并显示给你。这些说明将包括执行故障排除的操作,包括可以复制和粘贴来直接执行 kubectl 命令。
针对资源的名称,k8sgpt 拥有隐藏功能(k8sgpt analyze
命令的--anonymize
选项),可以防止敏感数据被发送到 AI 系统。这对我们是很有帮助的。不过目前还没有在所有分析器中实现。
如今,k8sgpt 为 Kubernetes 对象提供了很多内置分析器,包括Node、Pod、PVC、ReplicaSets、Services、Events、Ingresses、StatefulSets、Deployments、CronJobs、NetworkPolicies,甚至 HPA 和 PDB。通过创建自定义分析器来扩展不会太难。
另一个好处是k8sgpt不仅限于单个AI系统。默认支持 OpenAI,让我们访问 GPT-3.5-Turbo 和 GPT-4 语言模型。但是,我们也可以在其他AI提供商中进行选择,目前包括:
- Azure OpenAI;
- Cohere(这个是最近,7月20日添加的);
- LocalAI — 与 OpenAI 兼容的 API 的本地模型(例如,您可以将其与 llama.cpp 和 ggml 一起使用);
- FakeAI — 用于模拟 AI 系统行为而无需实际调用它。
K8sgpt 可以用于集成的 API场景,可以利用外部工具,调用它们的功能来解决 Kubernetes 问题。目前唯一实现的集成是比较有名的开源安全扫描程序 Trivy。通过 k8sgpt integration activate trivy
来启用它(假设Trivy Operator 已经安装在集群中),您将拥有一个名为VulnerabilityReport
新的k8sgpt过滤器。最后就可以通过 k8sgpt analyze --filter VulnerabilityReport
访问它。
最后还有一项 k8sgpt 的功能是,我们可以将其安装为集群内的 Kubernetes operator。为此,请使用此处提供的 Helm chart。安装并应用 k8sgpt 配置对象(kind:K8sGPT
)后,该工具将对集群进行分析,并将扫描结果存储在 Results 对象中。这意味着您可以通过执行 kubectl get results -o json | jq .
来查看获取结果。
k8sgpt 在社区中带来的极大的影响。k8sgpt 专注于 K8s 问题的故障诊断,它包含了很多专为此目的设计的即用功能。此外,它还具有以下特点:
- 灵活,可利用不同的人工智能系统;
- 可扩展,可以与自定义分析器和第三方工具集成。
2. Kubernetes ChatGPT bot
- “A ChatGPT bot for Kubernetes issues”
- GitHub: https://github.com/robusta-dev/kubernetes-chatgpt-bot
- GH stars: ~900
- First commit: Jan 10, 2023
- ~40 commits, 7 contributors
- Language: Python
该项目由 Robusta 创建,专注于通过将 AI 与 Slack 中显示的警报集成来解决 Kubernetes 问题。
要利用此机器人,您必须遵循以下要求:
- 已经或准备在Prometheus(也支持VictoriaMetrics)和AlertManager之上安装Robusta;
- 使用Slack。
如果一切就绪,您就可以通过使用 webhook 将监控告警信息发送到 Slack。该机器人会在 Slack 的警报中添加一个 "Ask ChatGPT "按钮。这样,点击该按钮就可以查询 AI(使用 OpenAI API 密钥),并获得其响应,从而指导您采取响应的建议措施来解决导致该告警的问题。
就目前而言,它就是这么简单。不过,作者建议可以通过向 AI 提供额外数据(如 Pod 日志和 kubectl get 事件输出)来进一步改进其工作方式。
Kubectl AI驱动的插件
1. kubectl-ai
- “Kubectl plugin for OpenAI GPT”
- GitHub: https://github.com/sozercan/kubectl-ai
- GH stars: ~800
- First commit: Mar 20, 2023
- ~50 commits, 11 releases, ~10 contributors
- Language: Go
这个项目是在 k8sgpt 前一天诞生的。不同的是,它使用不同方式将人工智能 与 Kubernetes 结合。
该项目是一个kubectl
插件,使用OpenAI GPT生成和应用Kubernetes清单。
下面是 README 提供的一个简单的示例:
通过 "重新提示 "选项,您可以更改特定参数来完善生成的清单。您可以一次生成几个清单,这对相互关联的对象(如部署和服务)很有意义。如果建议匹配实际需要的时候,就可以轻松地将其应用到集群中。
随后,你还可以修改现有的 Kubernetes 对象,使用 kubectl ai
对其进行缩放或更改其他参数。
至于AI,kubectl-ai 支持 OpenAI API、Azure OpenAI 服务和 LocalAI(7 月 31 日合并的最新新增功能)。默认语言模型为 GPT-3.5-Turbo,也支持 GPT-4。
2. kubectl-gpt
- “一个 kubectl 插件,通过使用 GPT 模型从自然语言输入生成 kubectl 命令”
- GitHub: https://github.com/devinjeon/kubectl-gpt
- GH stars: ~40
- First commit: May 29, 2023
- ~20 commits, 3 releases, 1 contributor
- Language: Go
该插件引入了 kubectl gpt
命令,它的唯一功能就是在 Kubernetes 集群中实现你的需求(即以人类语言描述需求,然后实现功能)。以下是该插件文档中的示例:
该工具,既可以输出建议的结果,也可以直接对 K8S 集群的对象进行操作。无论哪种情况,它都会执行命令,但首先会显示该命令,让你可以看到并确认是否愿意继续执行。如果你愿意,也可以禁用这些功能(打印生成的命令/要求确认)。
Kubectl-gp
t 需要一个 OpenAI API
密钥才能运行。仅支持 GPT-3,默认启用 GPT-3.5-Turbo。可以使用 OpenAI GPT API 支持的任何人类语言。
该项目由一名独立爱好者开发,自 5 月底以来未进行过任何更新。
适用于kubernetes的AIOps其他工具
此类别中描述的所有项目几乎在同一时间启动。它们也有类似的想法,即在用户操作 Kubernetes 集群时为其提供各种 AI 辅助功能。所有这些项目的统计数据也很相似:一个或几个贡献者、大约 100 个星级和数十次提交。让我们来看看它们都提供了哪些功能以及有何不同。
1. kopilot
- “您的 AI Kubernetes 专家助手”
- GitHub: https://github.com/knight42/kopilot
- GH stars: ~140
- First commit: Mar 19, 2023
- ~40 commits, 3 releases, 3 contributors
- Language: Go
Kopilot 是后面三个项目中唯一一个用 Go 编写的项目。它包括两个功能:故障排除和审计。那么它们具体的功能是什么了?
- 假如,你有一个 Pod 卡在 Pending 或 CrashLoopBackOff 状态。这时候,命令
kopilot diagnose
派上用场。它将向AI寻求帮助,然后给出建议,并解释为什么会发生这种情况。
- 如果不确定部署配置是否完善?
kopilot audit
命令使用类似的方式,将根据最佳实践以及安全要求对其进行检查。
该工具将使用 OpenAI API 令牌和提供的问题来进行解答。官方 README 还表示,未来还将提供使用其他人工智能服务的选项。
遗憾的是,自四月初以来,该项目还没有任何提交,这显然令人担忧。
2. kopylot
- “面向 Kubernetes 开发人员的 AI 驱动助手”
- GitHub: https://github.com/avsthiago/kopylot
- GH stars: ~70
- First commit: Mar 28, 2023
- ~70 commits, 5 releases, 2 contributors
- Language: Python
该工具有类似的审计和诊断功能,并通过提供 "chat "命令实现这一点。它能为你带来聊天机器人体验:你可以用英语询问一个特定的操作,这个操作会被转换成一个 kubectl 命令。如果它打印的命令看起来没问题,你就可以确认执行。就像我们在 kubectl-gpt 中体验的那样。
Kopylot还提供了 "ctl "命令,这是kubectl的一个扩展,允许你直接执行任何命令。这项功能的目的似乎是让 Kopylot
成为你使用 Kubernetes 时的最好的助手,而不仅仅是命令 kubectl
客户端。
目前,kopylot 仅支持 OpenAI API 密钥,无法使用任何其他人类语言。它依赖于 text-davinci-003 GPT-3.5 模型(硬编码),该模型被视为传统模型。不过在项目的路线图中提到了对使用其他 LLM 模型的支持。
但由于其最新版本的发布日期是 4 月 4 日,因此实现的可能性不大。
3. kube-copilot
- “由OpenAI提供支持的Kubernetes Copilot”
- GitHub: https://github.com/feiskyer/kube-copilot
- GH stars: ~70
- First commit: Mar 25, 2023
- ~70 commits, 8 releases, 1 contributor
- Language: Python
Kubernetes Copilot 将多工具功能集提升到了新的高度。除了 Kubernetes 故障排除、审计和执行操作功能外,这个多工具还能根据你的提示生成清单(就像 kubectl-ai 所做的那样)。
顺便说一下,kube-copilot 的审计功能比你想象的要强大。虽然该工具有 "analyze"(分析)命令来揭示 K8s 资源中可能存在的问题(与 kopilot audit 相同),但它也有 "audit"(审计)命令。后者利用 Trivy 扫描仪专门查找 Pod 可能存在的安全问题。
kube-copilot 的另一个特点是它同时提供命令 CLI 和 Web UI。Web UI 非常简单,对某些用户来说可能仍是一个非常喜欢的功能。
最后要提到的 CLI 功能是,可以使用 Google 搜索。也许有些问题用这种方式比用 ChatGPT 更好解决。不过在我看来,这并不是 K8s 相关工具最重要的功能。
至于 AI 支持,kube-copilot 可与 OpenAI API 密钥或 Azure OpenAI 服务配合使用。它允许你使用 GPT-3.5 和 GPT-4 模型。
尽管该工具是由一个人开发的,但它的代码提交情况比较良好。不过,目前既没有公开的路线图,也没有任何问题可以揭示该工具将如何发展。
其他
还有很多基于 OpenAI 的 Kubernetes 工具和服务,下面会简单介绍下。
Kubeshop 的 Botkube 是一个消息传递机器人(即 ChatOps),用于监控和调试 Slack、Mattermost、Discord 或 Microsoft Teams 中的 Kubernetes 集群。它最近添加的 Doctor plugin(https://docs.botkube.io/usage/executor/doctor/) 以两种不同的方式与人工智能连接:1)直接向聊天机器人询问问题;2) 使用“获取帮助”按钮,该按钮显示在错误事件的正下方。机器人将回复有关您的问题或特定问题的 AI 生成的建议。启用此 Botkube 插件需要 OpenAI API 密钥。
metaKube 的 KubeGPT 不是一个 CLI 工具,而是一个在线聊天,可以在 Web 浏览器中与 AI 讨论 Kubernetes。就像常规的 ChatGPT 一样,它可以回答问题(例如,Kubernetes 架构或一些最佳实践),并为您生成特定的 YAML 清单。
实际上,它还能帮我解决其他技术问题。例如,它同时提供有关 Nomad 的信息。它甚至还指导我安装 Ubuntu Linux。不过,它核心点还是在 Kubernetes,因此从未来形式上看,它应该不会对其他请求提供太多帮助。这项服务目前处于测试阶段。
MagicHappen 是一个 PoC operator,“仅用于娱乐和实验”。它定义了一个新的 CRD ( kind: MagicHappens
),允许您用人类语言描述任务——例如,“创建命名空间并进行部署”。当操作员收到包含此描述的 YAML 清单时,它会将其发送到 OpenAI 以获取相关的 YAML,并将此生成的清单应用于群集。请注意,自 4 月以来,没有对该项目进行新的提交。
Kube or Fake 是一个有趣的在线服务,它为您提供了由 ChatGPT 生成的五个 Kubernetes 术语。通过猜谜的方式找到准确的服务。
最后,各种知名的工具最近也纷纷嵌入了由 OpenAI 支持的功能。实际上,这些工具已经有很多了,本文也只是简单列出了几项,并不包含所有。下面也是一些按照时间列出了一些:
- ARMO Platform:基于 Kubescape,可根据您以人类语言指定的请求生成自定义控件,然后由 GPT-3 处理。
- KubeVela Workflow:允许使用 OpenAI API 验证 Kubernetes 资源(2023 年 4 月)
- Monokle:实现了人工智能辅助 YAML 资源创建,可以利用人工智能根据提示和验证策略生成 YAML 清单。(2023 年 6 月)
- Portainer:在其商业版 v2.18.3 中引入了对 ChatGPT 的实验性支持,可就如何部署应用程序提供即用型答案。(2023年7月)
- Argo CD:Akuity平台上有一个人工智能助理。它由OpenAI API提供支持,可帮助检测某些问题和分析日志,执行您要求的操作,并回答您的问题。(2023年7月)
总结
AIOps 给我们带来了巨大的变革。虽然还有不少改进的地方,但开源生态系统已经为 Kubernetes 管理员和用户提供了很多高效的使用方式:
- K8SGPT是最成功的项目,因为它吸引了众多的贡献者和用户。目前专注于故障排除,它非常灵活,扩展性也很高,所以也很希望社区能快速扩大。
- 如果你想在 Slack 中通过AI 生成如何解决 K8S 中的故障问题的解决建议 ,从而简化监控警报的处理过程,那么 Robusta 的 ChatGPT 机器人和 Kubeshop 的 Botkube 都是不错的 ChatOps 式选择。
- 如果需要自动化 YAML 清单生成,请尝试 kubectl-ai 或 kube-copilot。
目前,AIOps 发展非常快。我们可以看到有很多新的项目出现。同时,也会有不少的项目慢慢降低热度而最终消失,但整体是向前快速发展,并成为云原生生态系统最为核心的组成部分之一。
文章转载自公众号:新钛云服
