注:正文中每个开源项目的github统计数据截止至2023年10月25日。
01
使用AI对K8s进行故障排查
1.1 K8sgpt
K8sgpt作为该方向最受关注、社区活跃度最高的工具,将会重点进行介绍(源码参考版本0.3.6)。
基本信息:
-
介绍:A tool for scanning your Kubernetes clusters, diagnosing, and triaging issues in simple English
-
官方网站:http://k8sgpt.ai/
-
GitHub主页:https://github.com/k8sgpt-ai/k8sgpt
-
GitHub星数:3.4k
-
首次commit:2023年5月21日
-
最近commit:2023年10月22日
-
781 commits,37 releases,43 contributors
-
语言:Go
主要功能:
K8sgpt是一个命令行工具,可用于扫描您的Kubernetes集群,使用简单的英语进行诊断和故障排除。它具有SRE经验的分析器,并通过AI帮助提取最相关的信息。
功能样例:
Github主页可查看简单的功能演示。
另外也可以访问下方的playground链接,实际操作体验:
https://killercoda.com/matthisholleville/scenario/k8sgpt-cli
总体流程:
支持2种方式触发分析任务:a. 可执行程序 b. 直接调用K8sgpt的http服务接口。
-
用户通过任意方式触发分析任务;
-
执行指定的filter,会扫描集群的K8s资源信息,根据资源status和event得到初步分析结果;
-
如果请求开启explain选项,将请求AI后端进行辅助分析;
1. 隐藏敏感信息
2. 发送给AI处理
3. 得到返回结果,恢复敏感信息 -
返回分析结果。
项目工程结构:
-
K8sgpt/pkg/ai:ai client配置相关实现
– iai.go:ai client汇总,定义IAI接口(Configure, GetCompletion, Parse, GetName)和IAIConfig接口(GetPassword、GetModel、GetBaseURL、GetEngine)
– prompts.go:默认提示
– 其他:ai client实现 -
K8sgpt/pkg/analysis:
– analysis.go:定义Analysis结构体,支持New、RunAnalysis、GetAIResults
– output.go:支持将ai分析结果通过不同格式输出。 -
K8sgpt/pkg/analyzer:各种具体的analyzer实现。
-
K8sgpt/pkg/cache:remote cache相关实现。
-
K8sgpt/pkg/integration:integration实现,目前只内置了trivy的实现。
-
K8sgpt/pkg/kubernetes:用于初始化K8s client和获取api doc。
-
K8sgpt/pkg/server:用于支持server mode运行。
通过什么方式对数据进行脱敏:
原理:提前确定敏感字段,发送给AI后端前先将它们加密,在收到分析结果后将它们恢复。
支持脱敏的字段:
-
CronJob:namespace和name
-
Deployment:namespace和name
-
Hpa:scaleTargetRef.Name
-
Ingress:namespace和name,ingressClassName
-
NetworkPolicy:name
-
PDB:selector.MatchLabels的所有key、value
-
Service:selector的所有key、value
-
Statefulset:namespace和name,VolumeClaimTemplates.Spec.StorageClassName
可扩展设计:
-
支持多种AI后端:除了OpenAI还支持AzureOpenAI、LocalAI等
-
支持多种analyzer:分析指令通过filter选择要分析的资源,每种资源都有一个对应的分析器,负责执行具体的分析逻辑。
– 目前已有许多内置实现,也支持编写自己的实现。
– 目前内置analyzer的实现逻辑都比较简单,一般是收集K8s资源的status和event信息,然后只做简单的预处理。 -
允许集成外部工具:可以通过K8sgpt的integration API集成外部工具,添加额外的资源到filter列表。
–目前项目中只对接了Trivy,它是一种开源的云原生安全扫描器。
–Trivy能够扫描的目标:容器镜像、文件系统、Git仓库(远程)、虚拟机镜像、Kubernetes、AWS。
–Trivy能够识别的安全问题:使用中的操作系统包和软件依赖(SBOM)、已知漏洞(CVEs)、IaC(Infrastructure as Code, 基础设施即代码)问题和错误配置、敏感信息和密钥、软件许可证。
以pod analyzer的实现为例,说明处理流程:
// 当前支持2种方式触发分析任务:1.可执行程序 2.http请求
// <1> 根据K8s资源信息进行初步分析
pkg/analysis/analysis.go:137
func (a *Analysis) RunAnalysis()
// 初步分析pod status的容器状态和相关事件
pkg/analyzer/pod.go:27
func (PodAnalyzer) Analyze(a common.Analyzer) ([]common.Result, error)
// <2> 如果开启了explain选项, 则基于初步分析结果让AI进一步辅助分析
pkg/analysis/analysis.go:243
func (a *Analysis) GetAIResults(output string, anonymize bool) error {
// 该方法最终将Analysis.Results从初步分析结果替换为ai分析结果
// 1. mask敏感信息
// 2. 通过ai client请求分析
parsedText, err := a.AIClient.Parse(a.Context, texts, a.Cache)
// 3. 恢复敏感信息
}
// 使用远端缓存的结果 或 直接请求ai后端
pkg/ai/openai.go:73
func (a *OpenAIClient) Parse(ctx context.Context, prompt []string, cache cache.ICache) (string, error) {
// 1. 如果开启cache,并且cache中存在当前cacheKey,则直接从cache加载response并返回
// 2. 发起completion请求
// 3. 将response保存到cache
}
// 调用openai的Chat Completions API
pkg/ai/openai.go:56
func (c *OpenAIClient) GetCompletion(ctx context.Context, prompt string) (string, error) {
resp, err := c.client.CreateChatCompletion(ctx, openai.ChatCompletionRequest{
Model: c.model,
Messages: []openai.ChatCompletionMessage{
{
Role: "user",
Content: fmt.Sprintf(default_prompt, c.language, prompt),
},
},
})
...
}
如何通过云原生的方式(operator)部署在K8s集群中:
K8sgpt-operator是一个能在Kubernetes集群内部启用K8sGPT的工具。它允许您创建自定义资源,定义受管理的K8sGPT工作负载的行为和范围。分析和输出也可以配置,以便将其集成到现有工作流程中。
该项目主要包含2个自定义资源:
-
K8sGPT - 相当于分析任务的描述,可指定多种参数:作用的ns、后端ai提供商、使用的ai模型、需要处理的filter列表等。
-
Result - 当K8sGPT描述的分析任务完成后,会将分析结果程呈现到该资源上。
operator只watch集群中的K8sGPT资源。当用户想发起分析任务,先创建一个K8sGPT资源,然后operator会创建一个对应的Deployment(以及一些配套的K8s资源,比如Service、RBAC相关的)用于拉起K8sgpt的http服务。
创建后的K8sGPT资源只要没被删除,operator会不停requeue处理它的事件。等Deployment的ReadyReplicas大于0时,operator会请求K8sgpt的http服务真正开始分析任务。拿到分析结果后,operator会通过创建或更新Result资源,将这些信息呈现出来。
如果K8sGPT资源被删除了,operator会清理Deployment以及配套K8s资源,最终停止reconcile。
另外operator支持上报一些全局指标到prometheus,比如:reconcile错误次数、Result总数、不同类型的Result总数。
评价:
K8sgpt已作为沙盒项目提交给CNCF,目前还在早期评估阶段。该工具有较好的可扩展设计,也有较高的社区热度,预计在将来会有一定的前景。
K8sgpt主要支持的应用场景有两个:1. 执行云原生相关的安全扫描 2. 作为日常运维工具,定期执行集群整体扫描。可以说当前的应用场景不多,和llm的结合也比较初步。比较期待后续能推出一些更有价值的玩法,比如结合llm自主地完成某些运维工作。
1.2 kubernetes-chatgpt-bot
-
介绍:A ChatGPT bot for Kubernetes issues -
GitHub主页:https://github.com/robusta-dev/kubernetes-chatgpt-bot -
GitHub星数:892 -
首次commit:2023年1月10日 -
最近commit:2023年9月6日 -
39 commits,0 release,8 contributors -
语言:Python
-
通过集成 AI 与 Slack 中展示的告警来排查 Kubernetes 问题。 -
监控组件通过Slack提供的incoming webhook功能将告警信息发送到Slack上,这样就可以在Slack上接收和查看告警信息。然后kubernetes-chatgpt-bot会为每条告警添加一个"Ask ChatGPT"按钮,点击该按钮它就会调用OpenAI接口获取一些处理告警的建议。
-
提供OpenAI API key。 -
已经或准备在 Prometheus 上安装 Robusta (也支持 VictoriaMetrics)和 AlertManager。 -
使用Slack。
该项目算是Slack上的OpenAI插件。当我们在Slack上看到告警信息后,不再需要手动拷贝告警信息,请求OpenAI接口获取建议,而是通过点击一个按钮就能完成。可以说这带来了一定便利,但对于运维效能的提升不大。
02
kubectl的AI驱动插件
2.1 kubectl-ai
-
介绍:Kubectl plugin for OpenAI GPT -
GitHub主页:https://github.com/sozercan/kubectl-ai -
GitHub星数:856 -
首次commit:2023年3月19日 -
最近commit:2023年8月13日 -
45 commits,11 releases,8 contributors -
语言:Go
-
为了避免开发和测试功能时,到处寻找和搜集各种K8s资源的manifest。通过kubectl插件的形式,基于OpenAI GPT生成manifest,并支持将其应用到集群中。 -
生成manifest后,reprompt选项能帮助进一步完善生成结果(要说明将什么参数调整为什么值)。 -
支持一次性生成多个资源对象的manifests。
$ 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
-
有可用的K8s集群(能够通过kubectl访问); -
能访问远程或本地的AI模型(当前支持OpenAI API、Azure OpenAI Service、Local AI)。
-
介绍:A kubectl plugin to generate kubectl commands from natural language input by using GPT model -
GitHub主页:https://github.com/devinjeon/kubectl-gpt -
GitHub星数:44 -
首次commit:2023年5月29日 -
最近commit:2023年5月29日 -
18 commits,3 releases,1 contributors -
语言:Go
# English
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"
# Korean
kubectl gpt "현재 namespace에서 각 pod 별 생성시간 출력"
kubectl gpt "coredns deployment의 replica를 2로 증가"
使用依赖:提供OpenAI API key。
kubectl-gpt和kubectl-ai一样都是同过kubectl插件的形式提供ai功能,但聚焦在kubectl命令的生成上。两者的功能更适合集成在一个kubectl插件中,用户通过不同的子命令选择使用即可。
03
面向Kubernetes的AIOps多功能工具
3.1 kopilot
-
介绍:Your AI Kubernetes Expert -
GitHub主页:https://github.com/knight42/kopilot -
GitHub星数:148 -
首次commit:2023年3月19日 -
最近commit:2023年5月6日 -
36 commits,3 releases,3 contributors -
语言:Go
-
诊断集群中任何不健康的工作负载,并告诉你可能的原因。 -
审计K8s资源并找到错误的安全配置。
-
功能1
-
功能2
3.2 kopylot
-
介绍:An AI-Powered assistant for Kubernetes developers -
GitHub主页:https://github.com/avsthiago/kopylot -
GitHub星数:78 -
首次commit:2023年3月28日 -
最近commit:2023年5月13日 -
69 commits,5 releases,2 contributors -
语言:Python
-
审计:使用LLM模型审计K8s资源,例如pods、deployments或services。 -
诊断:使用LLM模型诊断K8s资源,例如pods、deployments或services。 -
聊天:与 KoPylot 开始聊天,根据您的提示生成 kubectl 命令,并可以在确认后直接在集群中执行。 -
Ctl:kubectl 的包装器,传递给 ctl 子命令的参数由 kubectl 解析执行,不受AI的影响。
-
审计
-
诊断
-
聊天
-
Ctl
3.3 kube-copilot
-
介绍:Kubernetes Copilot powered by OpenAI -
GitHub主页:https://github.com/feiskyer/kube-copilot -
GitHub星数:89 -
首次commit:2023年3月25日 -
最近commit:2023年10月8日 -
94 commits,10 releases,3 contributors -
语言:Python
-
分析:为给定K8s资源分析问题。 -
审计:利用Trivy scanner为Pod审计安全问题。 -
诊断:为Pod诊断问题。 -
生成:根据提供的提示指令生成K8s资源yaml。 -
UI:提供了一套使用分析、审计、诊断和生成功能的简易UI。 -
CLI:利用原生的kubectl根据提示执行操作。 -
Google:支持在终端中访问Web并进行Google搜索。
-
提供OpenAI API key(也支持Azure OpenAI Service); -
安装trivy(用于审计功能)。
除了生成kubectl命令和直接聊天,功能集合已经覆盖能想到的大部分场景,连webUI都准备好了。看上去是一个比较全面的个人日常工作辅助工具。由于没深入使用过,实际体验有待确认。
04
管理应用的智能体
-
介绍:Chat to deploy and manage applications on any infrastructure -
GitHub主页:https://github.com/seal-io/appilot -
GitHub星数:58 -
首次commit:2023年8月1日 -
最近commit:2023年9月21日 -
112 commits,0 releases,1 contributors -
语言:Python
-
应用管理:部署、升级、回滚等等 -
环境变量管理:克隆、查看拓扑等等 -
诊断:查看日志、发现缺陷和提供修复方案
-
安全防护:任何涉及状态变化的操作需要人工审批 -
混合基础设施:可以在kubernetes、VM、云、本地工作 -
多语言支持:自由选择希望交互的自然语言 -
可插拔后端:已支持Walrus和kubernetes作为后端,也支持扩展
Walrus和Appilot都是seal-io公司推出的开源项目。Walrus是一个开源的应用管理平台,可以简化在任意基础设施上应用服务的部署和管理。有兴趣的读者可以访问官方进一步了解。
-
通过聊天在AWS部署llama-2(只有Walrus后端支持) -
从源代码部署服务(只有Walrus后端支持) -
管理环境变量(只有Walrus后端支持) -
使用helm chart管理kubernetes集群中的应用 -
操作原生kubernetes资源 -
诊断和修复问题
Appilot: What can I help?
# 用户输入想要Appilot完成的任务
> list existing apps
# Appilot内部实现了很多tools,用于完成不同的任务
# 每次遇到任务它会判断是否要使用tool,如果已选择使用某一个tool,交给executor执行并拿到结果
Appilot reasoning: To list all the existing applications in the current namespace, I need to use the 'list_application' tool.
# 因为list_application不涉及状态修改,执行前无需人工审批(有些tool需要)
Appilot reasoning: I have obtained the list of applications and can now present it to the user.
... (可能会出现多次)
# 展示最终结果
Appilot: Here is the list of existing applications in the current namespace:
...展示结果省略...
-
提供OpenAI API key(需要访问gpt-4模型); -
安装python3和make; -
安装kubectl和helm; -
有一个可用的kubernetes集群。
如果使用Walrus作为后端还需要安装Walrus。
-
已有的工具集只能完成一些较简单的运维操作。 -
使用外部AI模型(GPT-4)有信息泄露的风险。 -
没有通过本地知识库让LLM的处理变得更加精确。
《A Gentle Intro to Chaining LLMs, Agents, and utils via LangChain》对LangChain框架的一些概念和基本使用进行了清晰的介绍,感兴趣的读者可查看参考资料中的链接了解更多信息。
05
其他工具
-
Botkube:在Slack、Discord、Mattermost这样的即时通讯和协作平台上监控和排查K8s集群。可直接和AI对话咨询问题,也可以通过类似kubernetes-chatgpt-bot的按钮,获取错误事件的相关建议。Kubeshop作为Botkkube开源项目的创建方还推出了基于该项目的商业产品Botkube Cloud。该产品提供将更多的增强特性,包括用于跟踪 Kubernetes 集群变化的审计和事件日志、易于使用的用来设置配置的可视化仪表盘、多集群管理等。 -
InfraCopilot:一款商业产品(闭源),本质上是一个IaC(infrastructure as code)编辑器。可根据用户输入的指令(文本指令或UI操作)自动地调整IaC。比如用户可以与 InfraCopilot 进行对话,描述他们的基础设施需求,InfraCopilot 能将这些想法转化为低级别架构。用户可以通过逐步进行高级和低级别架构的变更来进行迭代。InfraCopilot 仅使用 LLM 来解释用户意图,而不是生成 IaC 模板(模板生成由同一公司推出的 Klotho 引擎处理)。生成最终可部署的IAC后,可通过Pulumi工具将其部署到公有云上(包括部署kubernetes资源)。 -
KubeGPT:一个闭源的针对K8s知识的问答系统(比如K8s架构和最佳实践)。 -
MagicHappens:一个玩具,在自定义资源的声明中描述一个任务(比如:create such a namespace and such deployment there),operator会将描述发送给OpenAI,根据返回的信息在K8s集群部署对应资源。 -
Kube or Fake:一个玩具,针对kubernetes知识的问答系统。有些问题的答案是错误的,你需要判断它们的对错。
许多知名工具也都开始引入OpenAI支持的新功能,比如ARMO Platform、KubeVela Workflow、Monokle、Portainer和Argo CD,有兴趣的读者可以访问文末链接获取更多信息。
06
结语
本文介绍了在 LLM + K8s-ops 方向的开源项目和产品功能。可以发现仅仅简单地使用这些工具并不能实质性地提升运维效能。由于 LLM 本质上是一个概率模型,很难保证高度的精确性。大部分工具直接使用外部 AI 模型,这导致无法直接调用公司内部 API,同时也涉及到信息安全的问题,无法在生产环境中真正应用。因此,我们需要一个更完善的解决方案,结合 LLM 构建自己的运维系统。这可能涉及训练私有的 LLM 模型、基于内部数据微调模型、基于先验知识构建向量数据库,以及引入 AI 自动化框架(例如 AutoGPT)等等。在后续的内容中,我们将介绍更多关于这方面的内容,以及 OPPO 和其他企业在该领域取得的进展。
07
参考资料
-
OpenAI-based Open Source tools for Kubernetes AIOps:https://blog.palark.com/chatgpt-tools-for-kubernetes/ -
A Gentle Intro to Chaining LLMs, Agents, and utils via LangChain:https://towardsdatascience.com/a-gentle-intro-to-chaining-llms-agents-and-utils-via-langchain-16cd385fca81 -
K8sGPT官网:https://docs.k8sgpt.ai/ -
Walrus官网:https://seal-io.github.io/docs/zh/ -
langchain官方文档:https://docs.langchain.com/docs -
InfraCopilot官网:https://infracopilot.io/
-
ARMO Platform:
https://www.armosec.io/blog/armo-chatgpt-create-custom-controls-faster/ -
KubeVela Workflow:
https://www.cncf.io/blog/2023/04/25/promptops-in-application-delivery-empowering-your-workflow-with-chatgpt/ -
Monokle:https://www.reddit.com/r/kubernetes/comments/1455yio/generate_kubernetes_resources_using_ai_explore/?rdt=59913
-
Portainer:
https://www.portainer.io/blog/portainer-chatgpt -
Argo CD:
https://akuity.io/blog/akuity-argo-ai-assistant/
主要负责K8s编排调度方向,目前的研究重点是如何通过llm提升K8s的运维效率。
安第斯智能云
OPPO 安第斯智能云(AndesBrain)是服务个人、家庭与开发者的泛终端智能云,致力于“让终端更智能”。安第斯智能云提供端云协同的数据存储与智能计算服务,是万物互融的“数智大脑”。
安第斯大模型(AndesGPT)是OPPO自主训练的、个性专属大模型与智能体。作为驱动OPPO公司AI战略的核心引擎,安第斯大模型全面赋能OPPO智慧终端,持续构建知识、记忆、工具、创作能力,并通过与终端结合的AI智能体和多模态对话范式,给用户带来全新的个性专属智能体验。
原文始发于微信公众号(安第斯智能云):这些实用的大模型工具帮你轻松运维Kubernetes
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论