3

让 K8s 更简单!8款你不得不知的 AI 工具-Part 1 - Seal软件

 5 months ago
source link: https://www.cnblogs.com/sealio/p/17964977
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

让 K8s 更简单!8款你不得不知的 AI 工具-Part 1

最近,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

K8sGPT 是一个相对较新的开源项目,它使用 AI 模型来解释 Kubernetes 的错误信息并提供集群见解。它已被两个组织用于生产,并已申请成为 CNCF 沙盒项目。

其主要功能有:

  • 提供 Kubernetes 错误信息的详细情境解释
  • 提供集群洞察
  • 支持多种安装选项
  • 支持不同的 AI 后端

K8sGPT 的项目由是同类 CLI 工具中最知名、使用最广泛的一个,其主要命令是 k8sgpt analyze旨在揭示 Kubernetes 集群中的问题。它通过使用 analyzers 来做到这一点。这种 analyzers 定义了每个 Kubernetes 对象的逻辑以及可能遇到的问题。例如,Kubernetes Services 的 analyzers 会检查特定 Services 是否存在、是否有端点,以及端点是否准备就绪。

更厉害的在于当您要求 K8sgpt 解释能做些什么——为此,需要运行 k8sgpt analyze --explain 命令。这将要求 AI 为您的具体情况提供说明,并显示出来。这些说明包括排除故障的操作以及具体的 kubectl 命令,您只需复制和粘贴这些命令即可执行。而之所以能做到这一点,是因为 Kubernetes 资源的名称已经就位了。

image

根据您的偏好和操作系统,有多种安装选项可供选择。您可以在文档的安装部分找到不同的选项。安装 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 标明错误:

image

如果我们想查看其中一个 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-ai

该项目是一个 kubectl 插件,基于 GTP 生成和应用 Kubernetes Manifests 去生成和应用 Kubernetes 清单。为让其更有趣并以可视化的方式理解,我们将利用 Kubectl + OpenAI。

Homebrew:添加到 brew tap 并安装

brew tap sozercan/kubectl-ai https://github.com/sozercan/kubectl-ai
brew 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 配置和以下条件之一:

  • OpenAI API 密钥
  • Azure OpenAI 服务 API 密钥和端点
  • LocalAI

对于这些工具,可以使用以下环境变量:

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: 80
Use 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: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80

KoPylot

KoPylot 是一款由 AI 驱动的开源 Kubernetes 助手。其目标是帮助开发人员和 DevOps 工程师轻松管理和监控 Kubernetes 集群

在当前版本中,KoPylot 有四个主要功能。这些功能可以转化为 kopylot CLI 的子命令。这些子命令是 Audit, Chat, Diagnose 和 Ctl 。现在让我们深入了解一下这些命令。

image

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

image

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

image

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

image

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

image

目前,KoPylot 的工作方式是从 Kubernetes 资源描述(kubectl describe ...)或清单中提取信息,并将其与提示一起输入 OpenAI 的 Davinci 模型。提示告诉模型如何处理 Kubernetes 资源。

提示还负责指导模型如何构建输出。例如,用于 Audit 命令的提示符要求模型将结果输出为包含漏洞及其严重程度的双列 JSON。

路线图的目标之一是用内部托管模型取代 OpenAI 模型。这将解决向 OpenAI 服务器发送潜在敏感数据的问题。

您可以按以下步骤使用 KoPylot:

  • 向 OpenAI 申请一个 API 密钥。
  • 使用以下命令导出密钥
export KOPYLOT_AUTH_TOKEN=
  • 使用 pip 安装 Kopylot:
pip install kopylot
  • 运行 Kopylot
kopylot --help

总的来说,KoPylot 是诊断 Kubernetes 工作负载并排除故障的有用工具。它基于网络的聊天界面和 CLI 使其易于使用,适合所有级别的用户

Kopilot

Kopilot 是这些项目中唯一一个用 Go 编写的项目。它包括两个功能:故障排除和审计。

macOS

brew install knight42/tap/kopilot

Krew:

kubectl krew install kopilot

目前,您需要设置两个 ENV 才能运行 Kopilot:

  • 设置 KOPILOT_TOKEN 以指定令牌。
  • 设置 KOPILOT_LANG 以指定语言,默认为 English。有效选项包括 ChineseFrenchSpain 等。
  • 诊断集群中任何不健康的工作负载,并告诉您原因
image
  • Audit Kubernetes 资源并查找安全错误配置
image

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

image

并且,kopilot audit命令采用了类似的方法,能根据众所周知的优秀实践和可能的安全错误配置进行检查。该工具将使用您的 OpenAI API 令牌和您选择的语言来回答问题。

本篇 Part 1 主要介绍了 K8sGPT、kubectl-ai、KoPylot 和 Kopilot 四款 AI 工具,后续的 Part 2 会延续并介绍更多的工具内容,帮助您简化 K8s 的使用过程,敬请期待!


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK