最近,AI 引起了广泛关注,而 Kubernetes 驱动的 DevOps 也不例外。软件工程师是自动化的忠实拥护者,因此针对 Kubernetes 操作员的 AI 驱动工具自然也开始涌现。
这些工具大多专为终端 (CLI) 使用而设计。Kubernetes 是容器编排的平台,而在 AI 驱动工具的帮助下可以从自动化任务、提高可靠性和提供洞察力等方面来帮助您更好掌握它。
OpenAI 是 Kubernetes AIOps 最有前途的 AI 平台之一。它提供了一套开源工具,可用于为 Kubernetes 构建 AI 驱动的解决方案。我们将分成两个 parts 来探讨 OpenAI 的一些开源工具如何帮助您实现 Kubernetes AIOps。
Kubernetes 用户不可避免地会遇到一些需要调试和修复的集群问题,以保证其 pod 和服务顺利运行。尤其是云端原生的DevOps 可能在管理容器、微服务和自动扩展功能方面涉及很多复杂问题。GenAI 可以 帮助排除故障,并执行一些与 Kubernetes 等平台相关的操作任务。这可能涉及使用自然语言提示来启动、回滚或获取集群的可见性。
例如,在 KubeCon + CloudNativeCon 2023 大会上,Kubiya 第一次展示了一个生成式 AI 工作流引擎,它能够在 Slack 中解释此类命令。扩展自然语言处理功能可以帮助平台团队创建新的工作流程,从而抽象出云端原生平台工作的复杂性。
K8sGPT 是一个相对较新的开源项目, 它使用 AI 模型来解释 Kubernetes 的错误信息并提供集群见解。它已被两个组织用于生产,并已申请成为 CNCF 沙盒项目。
其主要功能有:
K8sGPT 的项目由是同类 CLI 工具中最知名、使用最广泛的一个,其主要命令是
k8sgpt analyze,
旨在揭示 Kubernetes 集群中的问题。它通过使用 analyzers 来做到这一点。这种 analyzers 定义了每个 Kubernetes 对象的逻辑以及可能遇到的问题。例如,Kubernetes Services 的 analyzers 会检查特定 Services 是否存在、是否有端点,以及端点是否准备就绪。
更厉害的在于当您要求 K8sgpt 解释能做些什么——为此,需要运行
k8sgpt analyze --explain 命令。这将要求 AI 为您的具体情况提供说明,并显示出来。这些说明包括
排除故障的操作以及具体的 kubectl 命令,您只需复制和粘贴这些命令即可执行。而之所以能做到这一点,是因为 Kubernetes 资源的名称已经就位了。

根据您的偏好和操作系统,有多种安装选项可供选择。您可以在文档的安装部分找到不同的选项。安装 K8sGPT 的前提条件是在 Mac 上安装 Homebrew 或在 Windows 机器上安装 WSL。
接下来,您可以运行以下命令:
brew tap k8sgpt-ai/k8sgpt brew install k8sgpt
如要查看 K8sGPT 提供的所有命令,请使用
- help标志:
k8sgpt --help
后续步骤的前提条件是拥有一个 OpneAI 账户和一个正在运行的 Kubernetes 集群;任何集群,比如 microk8s 或 minikube 都足够了。
有了 OpneAI 账户后,您需要去其网站生成一个新的 API 密钥
或者,你也可以运行以下命令,K8sGPT 会在你的默认浏览器中打开相同的网站:
k8sgpt generate
K8sGPT 与 OpenAI 交互时需要此密钥。使用新创建的 API 密钥/令牌授权 K8sGPT:
k8sgpt auth add openai Enter openai Key: openai added to the AI backend provider list
您可以使用以下命令列出您的后端:
k8sgpt auth list
Default: > openai Active: > openai Unused: > localai > azureopenai > noopai
其次,我们将在 Kubernetes 集群中安装恶意部署。该 pod 将进入 CrashLoopBackOff。下面是 YAML:
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.14.2 ports: - containerPort: 80 securityContext: readOnlyRootFilesystem: true
接下来,我们将为示例应用程序创建一个专用命名空间,并安装 Deployment:
kubectl create ns demo namespace/demo created
kubectl apply -f ./deployment.yaml -n demo deployment.apps/nginx-deployment created
现在,您将看到演示命名空间中的 pod 标明错误:

如果我们想查看其中一个 pod 的事件,就会显示:
Warning BackOff 3s (x8 over 87s) kubelet Back-off restarting failed container
因此,我们可以运行 K8sGPT 命令来获取更多有关这些 pod 出错原因的详细信息:
k8sgpt analyse
这将显示 K8sGPT 在集群中发现的问题:
AI Provider: openai
若想要获得更多信息以及如何解决问题的建议,我们则可以使用
--explain 标志:
k8sgpt analyse --explain
0 demo/nginx-deployment-5f4c7db77b-hq74n(Deployment/nginx-deployment) - Error: back-off 1m20s restarting failed container=nginx pod=nginx-deployment-5f4c7db77b-hq74n_demo(7854b793-21b7-4f81-86e5-dbb4113f64f4)1 demo/nginx-deployment-5f4c7db77b-phbq8(Deployment/nginx-deployment) - Error: back-off 1m20s restarting failed container=nginx pod=nginx-deployment-5f4c7db77b-phbq8_demo(74038531-e362-45a6-a436-cf1a6ea46d8a)2 demo/nginx-deployment-5f4c7db77b-shkw6(Deployment/nginx-deployment) - Error: back-off 1m20s restarting failed container=nginx pod=nginx-deployment-5f4c7db77b-shkw6_demo(2603f332-3e1c-45da-8080-e34dd6d956ad)
该项目是一个
kubectl 插件,基于 GTP 生成和应用 Kubernetes Manifests 去
生成和应用 Kubernetes 清单。为让其更有趣并以可视化的方式理解,我们将利用 Kubectl + OpenAI。
Homebrew:添加到
brew tap 并安装
brew tap sozercan/kubectl-ai https://github.com/sozercan/kubectl-aibrew install kubectl-ai
Krew:添加到
krew index再使用
kubectl krew index add kubectl-ai https://github.com/sozercan/kubectl-aikubectl krew install kubectl-ai/kubectl-ai
kubectl-ai 需要有效的 Kubernetes 配置和以下条件之一:
对于这些工具,可以使用以下环境变量:
export OPENAI_API_KEY=<your OpenAI key>export OPENAI_DEPLOYMENT_NAME=<your OpenAI deployment/model name. defaults to "gpt-3.5-turbo-0301">export OPENAI_ENDPOINT=<your OpenAI endpoint, like "https://my-aoi-endpoint.openai.azure.com" or "http://localhost:8080/v1">
如果设置了
OPENAI_ENDPOINT 变量,则将使用端点。否则,将使用 OpenAI API。
Azure OpenAI 服务不允许在部署名称中使用某些字符,如
.。因此,对于 Azure,kubectl-ai 会自动将
gpt-3.5-turbo 替换为
gpt-35-turbo。但是,如果使用的 Azure OpenAI 部署名称与模型名称完全不同,可以设置
AZURE_OPENAI_MAP 环境变量,将模型名称映射到 Azure OpenAI 部署名称。例如:
export AZURE_OPENAI_MAP="gpt-3.5-turbo=my-deployment"
Nginx Pod 的命令:
kubectl ai "create an nginx pod"
kubectl ai "create an nginx pod"✨ Attempting to apply the following manifest: apiVersion: v1 kind: Pod metadata: name: nginx-pod spec: containers: - name: nginx image: nginx ports: - containerPort: 80Use the arrow keys to navigate: ↓ ↑ → ← ? Would you like to apply this? [Reprompt/Apply/Don't Apply]: + Reprompt ▸ Apply Don't Apply
Deployment:选择 "Reprompt" 并输入 "make this into deployment"
Reprompt: make this into deployment ✨ Attempting to apply the following manifest: apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.7.9 ports: - containerPort: 80
ReplicaSet:
Reprompt: Scale to 3 replicas
Reprompt: Scale to 3 replicas ✨ Attempting to apply the following manifest: apiVersion: apps/v1 kind: Deploymentmetadata: name: nginx-deploymentspec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx ports: - containerPort: 80
KoPylot 是一款由 AI 驱动的开源 Kubernetes 助手。其目标是 帮助开发人员和 DevOps 工程师轻松管理和监控 Kubernetes 集群。
在当前版本中,KoPylot 有四个主要功能。这些功能可以转化为
kopylot CLI 的子命令。这些子命令是
Audit, Chat, Diagnose 和 Ctl 。现在让我们深入了解一下这些命令。

Audit:Audit 资源,例如 pod、部署和服务。KoPylot 会根据单个资源的清单文件查找漏洞。

Chat:用简单的英语询问 KoPylot 以生成 kubectl 命令。在运行命令之前,您可以查看命令。

Diagnose:您可以使用诊断工具来帮助您调试应用程序的不同组件。诊断命令会为您列出损坏资源的可能修复方法。

Ctl:kubectl 的包装器。传递给 ctl 子命令的所有参数都由 kubectl 解释。

目前,KoPylot 的工作方式是从 Kubernetes 资源描述(kubectl describe ...)或清单中提取信息,并将其与提示一起输入 OpenAI 的 Davinci 模型。提示告诉模型如何处理 Kubernetes 资源。
提示还负责指导模型如何构建输出。例如,用于 Audit 命令的提示符要求模型将结果输出为包含漏洞及其严重程度的双列 JSON。
路线图的目标之一是用内部托管模型取代 OpenAI 模型。这将解决向 OpenAI 服务器发送潜在敏感数据的问题。
您可以按以下步骤使用 KoPylot:
export KOPYLOT_AUTH_TOKEN=
pip install kopylot
kopylot --help
总的来说,KoPylot 是诊断 Kubernetes 工作负载并排除故障的有用工具。 它基于网络的聊天界面和 CLI 使其易于使用,适合所有级别的用户。
Kopilot 是这些项目中仅有一个用 Go 编写的项目。它包括两个功能:故障排除和审计。
macOS:
brew install knight42/tap/kopilot
Krew:
kubectl krew install kopilot
目前,您需要设置两个 ENV 才能运行 Kopilot:
KOPILOT_TOKEN 以指定令牌。KOPILOT_LANG 以指定语言,默认为
English。有效选项包括
Chinese、
French、
Spain 等。


想象一下,当您的 Pod 被卡或在
Pending 或
CrashLoopBackOff 的状态时,
kopilot diagnose 的命令就会派上用场了。它或将向 AI 寻求帮助,并将结论展示出来,其中还包括可能的原因解释。

并且,
kopilot audit命令采用了类似的方法,能根据众所周知的优秀实践和可能的安全错误配置进行检查。该工具将使用您的 OpenAI API 令牌和您选择的语言来回答问题。
本篇 Part 1 主要介绍了 K8sGPT、kubectl-ai、KoPylot 和 Kopilot 四款 AI 工具,后续的 Part 2 会延续并介绍更多的工具内容,帮助您简化 K8s 的使用过程,敬请期待!
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70026925/viewspace-3003864/ ,如需转载,请注明出处,否则将追究法律责任。