ChatGPT 的诞生标志着AI技术迈入了一个新的纪元。这引发了各行各业的深入探讨,他们都在积极探索如何将AI的能力最大化,以解决困扰已久的问题或提升现有流程的效率。
如今在 Kubernetes 运维领域,涌现了许多开源项目和产品功能,旨在通过融合人工智能技术,进一步提升平台的运维效率和能力。OPPO正积极探索这一领域,并全面整理和分析了这些工具。希望本文能为那些有意借助人工智能技术更好地管理 Kubernetes 平台的团队提供参考。
注:正文中每个开源项目的github统计数据截止至2023年10月25日。
01
使用AI对K8s进行故障排查
1.1 K8sgpt
K8sgpt作为该方向最受关注、社区活跃度最高的工具,将会重点进行介绍(源码参考版本0.3.6)。
基本信息:
主要功能:
K8sgpt是一个命令行工具,可用于扫描您的Kubernetes集群,使用简单的英语进行诊断和故障排除。它具有SRE经验的分析器,并通过AI帮助提取最相关的信息。
功能样例:
Github主页可查看简单的功能演示。
另外也可以访问下方的playground链接,实际操作体验:
总体流程:
支持2种方式触发分析任务:a. 可执行程序 b. 直接调用K8sgpt的http服务接口。
用户通过任意方式触发分析任务;
执行指定的filter,会扫描集群的K8s资源信息,根据资源status和event得到初步分析结果;
如果请求开启explain选项,将请求AI后端进行辅助分析;
1. 隐藏敏感信息
2.发送给AI处理
3.得到返回结果,恢复敏感信息
返回分析结果。
项目工程结构:
通过什么方式对数据进行脱敏:
原理:提前确定敏感字段,发送给AI后端前先将它们加密,在收到分析结果后将它们恢复。
支持脱敏的字段:
可扩展设计:
以pod analyzer的实现为例,说明处理流程:
// 当前支持2种方式触发分析任务:1.可执行程序 2.http请求
// 根据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)
// 如果开启了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个自定义资源:
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
基本信息:
主要功能:
功能样例:可查看Github主页的演示视频。
使用依赖:
评价:
该项目算是Slack上的OpenAI插件。当我们在Slack上看到告警信息后,不再需要手动拷贝告警信息,请求OpenAI接口获取建议,而是通过点击一个按钮就能完成。可以说这带来了一定便利,但对于运维效能的提升不大。
02
kubectl的AI驱动插件
2.1 kubectl-ai
基本信息:
主要功能:
为了避免开发和测试功能时,到处寻找和搜集各种K8s资源的manifest。通过kubectl插件的形式,基于OpenAI GPT生成manifest,并支持将其应用到集群中。
生成manifest后,reprompt选项能帮助进一步完善生成结果(要说明将什么参数调整为什么值)。
支持一次性生成多个资源对象的manifests。
功能样例:详情可查看Github主页的演示视频,下面是功能1的文本例子。
$ 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
使用依赖:
评价:
kubectl-ai的应用场景聚焦在yaml生成上,提供的功能可以覆盖日常验证的主要场景。由于使用时无需提供内部涉密信息,请求外部模型也不会存在隐私问题。通过kubectl插件的形式集成ai功能比较轻量,作为一个辅助工具是个不错的选择。
2.2 kubectl-gpt
基本信息:
主要功能:通过kubectl插件的形式,基于OpenAI GPT从自然语言输入生成kubectl命令,并可以在确认后直接在集群中执行。
功能样例:详情可查看Github主页的演示视频,下面是一个文本例子。
# 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
基本信息:
主要功能:
诊断集群中任何不健康的工作负载,并告诉你可能的原因。
审计K8s资源并找到错误的安全配置。
功能样例:
使用依赖:提供ChatGPT的认证token。
评价:
kopilot可以帮我们省去手动请求ChatGPT的流程,通过不同prompt实现诊断和审计的功能。在诊断功能中,请求GPT前,除了pod自身的信息,还会携带相应的event信息。总体而言,该功能相对简单,在运维时能够提供一定的帮助。然而,如果您希望在咨询llm时附带其他参考信息,那就只能手动向 AI 后端发送请求了。
3.2 kopylot
基本信息:
主要功能:
功能样例:
使用依赖:提供OpenAI API key。
评价:
相比kopilot多出了聊天和Ctl的能力,功能集合更完善。作为个人日常工作的辅助工具是个不错的选择。需留意的是,该项目已有5个多月没有更新了。
3.3 kube-copilot
基本信息:
主要功能:
功能样例:以下是web UI的使用截图。
使用依赖:
评价:
除了生成kubectl命令和直接聊天,功能集合已经覆盖能想到的大部分场景,连webUI都准备好了。看上去是一个比较全面的个人日常工作辅助工具。由于没深入使用过,实际体验有待确认。
04
管理应用的智能体
4.1 appilot
基本信息:
主要功能:
另外还支持以下特性:
Walrus和Appilot都是seal-io公司推出的开源项目。Walrus是一个开源的应用管理平台,可以简化在任意基础设施上应用服务的部署和管理。有兴趣的读者可以访问官方进一步了解。
功能样例:官方提供了6个功能场景的演示视频(可访问github主页查看)。
可以看出appilot的工作模式如下:
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:
...展示结果省略...
使用依赖:
如果使用Walrus作为后端还需要安装Walrus。
架构设计:
这个架构图是官方提供的。笔者分析了当前开源的代码实现,未发现Appilot有使用基于本地知识构建的Vector DB。如希望借助Vector DB优化Appilot在特定任务的表现,需自行开发。
评价:
Appilot基于langchain的ConversationalAgent实现。通过gpt-4模型驱动决策,确定每一步要做什么,是否要使用某一个工具(由Agent executor执行工具),直到获得任务的最终结果。
项目针对不同后端(Kubernetes和Walrus)实现了不同的工具集。可以根据团队需要实现新的工具,让Appilot能完成更多特定的任务。
相比于前面介绍的工具,Appilot提供了更加智能的运维能力,但实际使用会面临一些问题:
总的来说,Appilot为llm + K8s-ops方向提供了一个较好的demo。但想在每个团队内部真正使用,还有很多需要优化的地方。
《A Gentle Intro to Chaining LLMs, Agents, and utils via LangChain》对LangChain框架的一些概念和基本使用进行了清晰的介绍,感兴趣的读者可查看参考资料中的链接了解更多信息。
05
其他工具
其他基于OpenAI构建的工具和服务
许多知名工具也都开始引入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:
A Gentle Intro to Chaining LLMs, Agents, and utils via LangChain:
K8sGPT官网:
Walrus官网:
langchain官方文档:
InfraCopilot官网:
ARMO Platform:
KubeVela Workflow:
Monokle:
Portainer:
Argo CD:
作者介绍
柳乔凡 云计算高级工程师
主要负责K8s编排调度方向,目前的研究重点是如何通过llm提升K8s的运维效率。
END
About AndesBrain
安第斯智能云
OPPO 安第斯智能云(AndesBrain)是服务个人、家庭与开发者的泛终端智能云,致力于“让终端更智能”。安第斯智能云提供端云协同的数据存储与智能计算服务,是万物互融的“数智大脑”。
安第斯大模型(AndesGPT)是OPPO自主训练的、个性专属大模型与智能体。作为驱动OPPO公司AI战略的核心引擎,安第斯大模型全面赋能OPPO智慧终端,持续构建知识、记忆、工具、创作能力,并通过与终端结合的AI智能体和多模态对话范式,给用户带来全新的个性专属智能体验。
基于AndesGPT打造的全新小布1.1 Beta版本目前公测中,欢迎体验。
暂无评论内容