K8sGPT+Ollama:免费的 Kubernetes 自动化诊断方案

2024-06-19 04:20

本文主要是介绍K8sGPT+Ollama:免费的 Kubernetes 自动化诊断方案,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

周末检查博客草稿,发现了这篇。记得当时是与 Kubernetes 自动化诊断工具:k8sgpt-operator 一起写的,算算过去了一年之久,这拖延症也算是病入膏肓了。原本想使用 K8sGPT + LocalAI 的方案,由于之前试过 Ollama,感觉使用起来也更加友好,而且 Ollama 同样提供了 对 OpenAI API 的支持,索性改成用 Ollama 吧。


介绍 k8sgpt-operator 的文章发布后,有小伙伴反馈 OpenAI 的使用门槛,这个问题确实比较棘手,但也不是不能解决。不过本文并不是介绍如何解决这种问题的,而是介绍 OpenAI 的替代方案: Ollama。

对 k8sgpt 和 k8sgpt-operator 就不做过多介绍了,有兴趣的可以看回 上一篇,去年底 k8sgpt 进入了 CNCF Sandbox。

1. 安装 Ollama

Ollama 是一个开源的大模型工具,使用它可以在本地或云端轻松的安装和运行 多种流量的大模型。它的操作非常友好,只需简单的命令就能运行。在 macOS 上可以通过 homebrew 一键安装:

brew install ollama

当前最新的版本是 0.1.44。

ollama -v 
Warning: could not connect to a running Ollama instance
Warning: client version is 0.1.44

在 Linux 上也可以通过官方的脚本一键安装。

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

启动 Ollama,通过环境变量将 Ollama 的监听地址设置为 0.0.0.0,便于后面从容器或者 K8s 集群访问。

OLLAMA_HOST=0.0.0.0 ollama start...
time=2024-06-16T07:54:57.329+08:00 level=INFO source=routes.go:1057 msg="Listening on 127.0.0.1:11434 (version 0.1.44)"
time=2024-06-16T07:54:57.329+08:00 level=INFO source=payload.go:30 msg="extracting embedded files" 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="Dynamic LLM libraries [metal]"
time=2024-06-16T07:54:57.385+08:00 level=INFO source=types.go:71 msg="inference compute" 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.7 GB,网速快的话 3-4 分钟就可以完成下载。

ollama run llama3

我是 m1 pro + 32g 内存,启动 12s 多。

time=2024-06-17T09:30:25.070+08:00 level=INFO source=server.go:572 msg="llama runner started in 12.58 seconds"

执行一次 query 的时间在 14s 左右。

curl http://localhost:11434/api/generate -d '{"model": "llama3","prompt": "Why is the sky blue?","stream": false
}'....
"total_duration":14064009500,"load_duration":1605750,"prompt_eval_duration":166998000,"eval_count":419,"eval_duration":13894579000}

3. 配置 K8sGPT CLI 后端

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

我们将使用 Ollama REST API 作为 k8sgpt 的后端,作为推理的 provider,这里后端类型选择 localai。因为 LocalAI 与 Ollama 同样兼容 OpenAI API,真正的 provider 还是 Ollama 运行的 Llama。

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

同时将其设置成默认的 provider。

k8sgpt auth default --provider localai
Default provider set to localai

测试:

我们在 k8s 上创建一个 pod,使用镜像 image-not-exit

kubectl get po k8sgpt-test
NAME          READY   STATUS         RESTARTS   AGE
k8sgpt-test   0/1     ErrImagePull   0          6s

使用 k8sgpt 对错误进行分析。

k8sgpt analyze --explain --filter=Pod --=default --output=json{"provider": "localai","errors": null,"status": "ProblemDetected","problems": 1,"results": [{"kind": "Pod","name": "default/k8sgpt-test","error": [{"Text": "Back-off pulling image \"image-not-exist\"","KubernetesDoc": "","Sensitive": []}],"details": "Error: Back-off pulling image \"image-not-exist\"\n\nSolution: \n1. Check if the image exists on Docker Hub or your local registry.\n2. If not, create the image using a Dockerfile and build it.\n3. If the image exists, check the spelling and try again.\n4. Verify the image repository URL in your Kubernetes configuration file (e.g., deployment.yaml).","parentObject": ""}]
}

4. 部署并配置 k8sgpt-operator

k8sgpt-operator 可以在集群中开启自动化的 k8sgpt。可以通过 Helm 来安装

helm repo add k8sgpt https://charts.k8sgpt.ai/
helm repo update
helm install release k8sgpt/k8sgpt-operator -n k8sgpt --create-namespace

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         Result

配置 K8sGPT,这里 baseUrl 要使用 Ollama 的 IP 地址。

kubectl apply -n k8sgpt -f - << EOF
apiVersion: core.k8sgpt.ai/v1alpha1
kind: K8sGPT
metadata:name: k8sgpt-ollama
spec:ai:enabled: truemodel: llama3backend: localaibaseUrl: http://198.19.249.3:11434/v1noCache: falsefilters: ["Pod"]repository: ghcr.io/k8sgpt-ai/k8sgptversion: v0.3.8
EOF

创建 CR K8sGPT 之后,operator 会自动为其创建 Pod。检查 CR Result 也可以看到同样的结果。

kubectl get result -n k8sgpt -o jsonpath='{.items[].spec}' | jq .
{"backend": "localai","details": "Error: Kubernetes is unable to pull the image \"image-not-exist\" due to it not existing.\n\nSolution: \n1. Check if the image actually exists.\n2. If not, create the image or use an alternative one.\n3. If the image does exist, ensure that the Docker daemon and registry are properly configured.","error": [{"text": "Back-off pulling image \"image-not-exist\""}],"kind": "Pod","name": "default/k8sgpt-test","parentObject": ""
}

关注"云原生指北"微信公众号 (转载本站文章请注明作者和出处乱世浮生,请勿用于任何商业用途)

这篇关于K8sGPT+Ollama:免费的 Kubernetes 自动化诊断方案的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1073988

相关文章

SpringBoot3.X 整合 MinIO 存储原生方案

《SpringBoot3.X整合MinIO存储原生方案》本文详细介绍了SpringBoot3.X整合MinIO的原生方案,从环境搭建到核心功能实现,涵盖了文件上传、下载、删除等常用操作,并补充了... 目录SpringBoot3.X整合MinIO存储原生方案:从环境搭建到实战开发一、前言:为什么选择MinI

Knife4j+Axios+Redis前后端分离架构下的 API 管理与会话方案(最新推荐)

《Knife4j+Axios+Redis前后端分离架构下的API管理与会话方案(最新推荐)》本文主要介绍了Swagger与Knife4j的配置要点、前后端对接方法以及分布式Session实现原理,... 目录一、Swagger 与 Knife4j 的深度理解及配置要点Knife4j 配置关键要点1.Spri

SQLite3 在嵌入式C环境中存储音频/视频文件的最优方案

《SQLite3在嵌入式C环境中存储音频/视频文件的最优方案》本文探讨了SQLite3在嵌入式C环境中存储音视频文件的优化方案,推荐采用文件路径存储结合元数据管理,兼顾效率与资源限制,小文件可使用B... 目录SQLite3 在嵌入式C环境中存储音频/视频文件的专业方案一、存储策略选择1. 直接存储 vs

k8s上运行的mysql、mariadb数据库的备份记录(支持x86和arm两种架构)

《k8s上运行的mysql、mariadb数据库的备份记录(支持x86和arm两种架构)》本文记录在K8s上运行的MySQL/MariaDB备份方案,通过工具容器执行mysqldump,结合定时任务实... 目录前言一、获取需要备份的数据库的信息二、备份步骤1.准备工作(X86)1.准备工作(arm)2.手

SpringBoot服务获取Pod当前IP的两种方案

《SpringBoot服务获取Pod当前IP的两种方案》在Kubernetes集群中,SpringBoot服务获取Pod当前IP的方案主要有两种,通过环境变量注入或通过Java代码动态获取网络接口IP... 目录方案一:通过 Kubernetes Downward API 注入环境变量原理步骤方案二:通过

Springboot3+将ID转为JSON字符串的详细配置方案

《Springboot3+将ID转为JSON字符串的详细配置方案》:本文主要介绍纯后端实现Long/BigIntegerID转为JSON字符串的详细配置方案,s基于SpringBoot3+和Spr... 目录1. 添加依赖2. 全局 Jackson 配置3. 精准控制(可选)4. OpenAPI (Spri

关于跨域无效的问题及解决(java后端方案)

《关于跨域无效的问题及解决(java后端方案)》:本文主要介绍关于跨域无效的问题及解决(java后端方案),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录通用后端跨域方法1、@CrossOrigin 注解2、springboot2.0 实现WebMvcConfig

在Java中将XLS转换为XLSX的实现方案

《在Java中将XLS转换为XLSX的实现方案》在本文中,我们将探讨传统ExcelXLS格式与现代XLSX格式的结构差异,并为Java开发者提供转换方案,通过了解底层原理、性能优势及实用工具,您将掌握... 目录为什么升级XLS到XLSX值得投入?实际转换过程解析推荐技术方案对比Apache POI实现编程

详解如何使用Python构建从数据到文档的自动化工作流

《详解如何使用Python构建从数据到文档的自动化工作流》这篇文章将通过真实工作场景拆解,为大家展示如何用Python构建自动化工作流,让工具代替人力完成这些数字苦力活,感兴趣的小伙伴可以跟随小编一起... 目录一、Excel处理:从数据搬运工到智能分析师二、PDF处理:文档工厂的智能生产线三、邮件自动化:

Python实现自动化Word文档样式复制与内容生成

《Python实现自动化Word文档样式复制与内容生成》在办公自动化领域,高效处理Word文档的样式和内容复制是一个常见需求,本文将展示如何利用Python的python-docx库实现... 目录一、为什么需要自动化 Word 文档处理二、核心功能实现:样式与表格的深度复制1. 表格复制(含样式与内容)2