为了账号安全,请及时绑定邮箱和手机立即绑定

K8sGPT+Ollama:一个免费的Kubernetes自动诊断工具

周末检查了我的博客草稿,发现了这篇。我记得大约一年前用中文发布的“Kubernetes 自动诊断工具:k8sgpt-operator”。我的拖延似乎已经到了一个临界点。最初,我计划使用 K8sGPT + LocalAI。试用了 Ollama 后,我发现它更方便。Ollama 同样支持 OpenAI API,因此我决定改用 Ollama。

发布介绍 k8sgpt 的文章后,一些读者提到使用 OpenAI 存在较高的门槛。这个问题确实有挑战性,但并不是无法克服的。然而,这篇文章并不是为了解决这个问题而写的,而是要介绍一个 OpenAI 的替代方案:Ollama。去年底,k8sgpt 加入了 CNCF 沙盒(https://landscape.cncf.io/?item=observability-and-analysis--observability--k8sgpt)。

1. 安装Ollama:

Ollama 是一个开源的大模型工具,允许您轻松地在本地或云中安装并运行各种大型模型,例如。它非常易于使用,并且通过简单的命令即可运行。在 macOS 上,您可以使用 homebrew 只需一条命令即可完成安装:

运行此命令来安装ollama:

    brew install ollama

最新版本是0.1.44。

    ollama -v   
    警告:无法连接到正在运行的 Ollama 实例  
    警告:客户端版本是 0.1.44

在 Linux 上,你也可以用官方脚本安装它。

执行以下命令来安装ollama:

    curl -sSL https://ollama.com/install.sh | sh

启动 Ollama 后,通过环境变量设置将监听地址设置为 0.0.0.0,以便从容器或 Kubernetes 集群中进行访问。

OLLAMA_HOST=0.0.0.0 启动 ollama
    ...  
    time=2024-06-16T07:54:57.329+08:00 level=INFO source=routes.go:1057 msg="监听在 127.0.0.1:11434(版本 0.1.44)"  
    time=2024-06-16T07:54:57.329+08:00 level=INFO source=payload.go:30 msg="正在提取嵌入文件" dir=/var/folders/9p/2tp6g0896715zst_bfkynff00000gn/T/ollama1722873865/runners  
    time=2024-06-16T07:54:57.346+08:00 level=INFO source=payload.go:44 msg="动态 LLM 库:metal"  
    time=2024-06-16T07:54:57.385+08:00 level=INFO source=types.go:71 msg="推断计算任务" id=0 library=metal compute="" driver=驱动版本:0.0 name="" total="21.3 GiB" available="可用:21.3 GiB"
2. 下载并运行大型模型

Llama3是由Meta在4月开源的一个流行大型模型。Llama3有两个版本:8B和70B。

我在macOS上使用它,所以我选了8B版本。8B版本是4.7GB,在高速互联网下,下载只需要3到4分钟。

    ollama run llama3

在我的M1 Pro上,拥有32GB内存,启动大概要12秒。

time=2024-06-17T09:30:25.070+08:00 level=INFO source=server.go:572 msg=llama runner 启动成功,耗时 12.58 秒

每个查询大约要花14秒。

    curl http://localhost:11434/api/generate -d '{  
      "model": "llama3",  
      "prompt": "天空为什么是蓝色的呢?",  
      "stream": false  
    }'
    ....  
    "total_duration":14064009500,"load_duration":1605750,"prompt_eval_duration":166998000,"eval_count":419,"eval_duration":13894579000}
3. 配置 K8sGPT CLI 后端 (步骤 3)

如果你想测试 k8sgpt-operator,这步可以跳过。

我们将使用Ollama REST API作为k8sgpt的后端,提供推理服务。我们将后端类型选择为localai,因为LocalAI与OpenAI API兼容,而实际的推理提供者仍然是运行Llama模型的Ollama。

运行以下命令来添加认证信息,使用本地AI模型:

k8sgpt auth add --backend localai --model llama3 --baseurl http://localhost:11434/v1

请确保你已经安装了k8sgpt工具。

将其设置为默认服务商。

    k8sgpt 配置 默认 --默认提供者 localai  
    默认提供者已设置为 localai

试一试。

在 k8s 里用不存在的镜像 image-not-exist 创建一个 pod

    kubectl get po k8sgpt-test  
    NAME          READY   STATUS         RESTARTS   AGE  
    k8sgpt-test   0/1     镜像拉取错误   0          6秒

名称\t就绪状态\t重启次数\t持续时间

用k8sgpt分析这个错误。

    k8sgpt 分析 --解释 --筛选=Pod --命名空间=default --输出=json
    {  
      "provider": "localai",  
      "errors": null,  
      "status": "状态:检测到问题",  
      "problems": 1,  
      "results": [  
        {  
          "kind": "Pod",  
          "name": "default/k8sgpt-test",  
          "error": [  
            {  
              "Text": "拉取 'image-not-exist' 镜像时出现回退",  
              "KubernetesDoc": "",  
              "Sensitive": []  
            }  
          ],  
          "details": "错误: 拉取 'image-not-exist' 镜像时出现回退\n\n解决方案: \n1. 检查 Docker Hub 或您的本地仓库中是否存在该镜像。\n2. 如果不存在,请创建并构建 Dockerfile。\n3. 如果镜像存在,请检查镜像的拼写并重试。\n4. 验证 Kubernetes 配置文件(例如 deployment.yaml 中的)镜像仓库 URL。",  
          "parentObject": ""  
        }  
      ]  
    }
4. 部署和配置 k8sgpt-operator

k8sgpt-operator 可以自动化集群中的 k8sgpt。您可以使用 Helm 进行安装。

helm 仓库添加 k8sgpt https://charts.k8sgpt.ai/  # 添加 Helm 仓库
helm 仓库更新  # 更新 Helm 仓库
helm 安装发布 release k8sgpt/k8sgpt-operator -n k8sgpt --create-namespace  # 安装名为 release 的发布,使用 k8sgpt 命名空间并创建命名空间 k8sgpt

k8sgpt-operator 提供了两个自定义资源定义 (CRD):K8sGPT 用于配置 k8sgpt 服务,Result 用于展示分析结果。

    kubectl api-resources  | grep -i gpt  
    k8sgpts                                        core.k8sgpt.ai/v1alpha1                true         K8sGPT  
    results                                        core.k8sgpt.ai/v1alpha1                true         结果

注:k8sgptsresults 是与 Kubernetes 和 GPT 模型相关的技术术语,分别代表 K8sGPT 实例和操作结果。

配置 K8sGPT,将 Ollama 的 IP 地址设置为 baseUrl

    kubectl apply -n k8sgpt -f - << EOF  
    apiVersion: core.k8sgpt.ai/v1alpha1  
    kind: K8sGPT  
    metadata:  
      name: k8sgpt-ollama  
    spec:  
      ai:  
        enabled: true  
        model: llama3  
        backend: localai  
        baseUrl: http://198.19.249.3:11434/v1  
      noCache: false  
      filters: ["Pod"]  
      repository: ghcr.io/k8sgpt-ai/k8sgpt  
      version: v0.3.8  
    EOF

创建 K8sGPT CR 之后,控制器将自动为其创建一个 pod。检查 Result CR 结果相同。

    kubectl get result -n k8sgpt -o jsonpath='{.items[].spec}' | jq .  
    {  
      "backend": "localai",  
      "details": "错误:Kubernetes 无法拉取图像“image-not-exist”,因为它不存在的原因。\n\n解决方法:\n1. 检查图像是否实际存在,\n2. 如果不存在,请创建该图像或使用替代的图像。\n3. 如果图像存在,请确保 Docker 守护程序和注册表配置正确。",  
      "error": [  
        {  
          "text": "回退拉取图像“image-not-exist”"  
        }  
      ],  
      "kind": "Pod",  
      "name": "default/k8sgpt-test",  
      "parentObject": ""  
    }
点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消