• 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 提供的一个简单的示例:
     kubectl ai "create an nginx deployment with 3 replicas"
     Attempting to apply the following manifest:
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-deployment
      labels:
        app: nginx
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx:1.7.9
            ports:
            - containerPort: 80
    Use the arrow keys to navigate: ↓ ↑ → ←
    ? Would you like to apply this? [Reprompt/Apply/Don't Apply]:
    +   Reprompt
       Apply
        Don't Apply
    通过 “重新提示 “选项,您可以更改特定参数来完善生成的清单。您可以一次生成几个清单,这对相互关联的对象(如部署和服务)很有意义。如果建议匹配实际需要的时候,就可以轻松地将其应用到集群中。
    随后,你还可以修改现有的 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 集群中实现你的需求(即以人类语言描述需求,然后实现功能)。以下是该插件文档中的示例:
    kubectl gpt "Print the creation time and pod name of all pods in all namespaces."
    kubectl gpt "Print the memory limit and request of all pods"
    kubectl gpt "Increase the replica count of the coredns deployment to 2"
    kubectl gpt "Switch context to the kube-system namespace"
    该工具,既可以输出建议的结果,也可以直接对 K8S 集群的对象进行操作。无论哪种情况,它都会执行命令,但首先会显示该命令,让你可以看到并确认是否愿意继续执行。如果你愿意,也可以禁用这些功能(打印生成的命令/要求确认)。
    Kubectl-gpt 需要一个 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 编写的项目。它包括两个功能:故障排除和审计。那么它们具体的功能是什么了?

    1. 假如,你有一个 Pod 卡在 Pending 或 CrashLoopBackOff 状态。这时候,命令 kopilot diagnose 派上用场。它将向AI寻求帮助,然后给出建议,并解释为什么会发生这种情况。

    1. 如果不确定部署配置是否完善? 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 发展非常快。我们可以看到有很多新的项目出现。同时,也会有不少的项目慢慢降低热度而最终消失,但整体是向前快速发展,并成为云原生生态系统最为核心的组成部分之一。
    原文: https://blog.palark.com/chatgpt-tools-for-kubernetes/
    «
    »
以专业成就每一位客户,让企业IT只为效果和安全买单

以专业成就每一位客户,让企业IT只为效果和安全买单