K8S-LLM:用自然语言轻松操作 Kubernetes

在 Kubernetes (K8s) 的日常管理中,复杂的命令行操作常常让开发者感到头疼。无论是部署应用、管理资源还是调试问题,都需要记住大量的命令和参数。Kubernetes 作为容器编排的行业标准,其强大的功能伴随着陡峭的学习曲线和复杂的命令行操作。这种复杂性不仅增加了新手的学习难度,也让资深开发者在频繁的操作中容易出错。

我以前是一名 DevOps 工程师,经常也做 SRE 的工作,所以经常操作 k8s,所以倒也还好,但是现在转岗 Gen AI Developer 之后,那些命令很多都不记得了,而且,解决k8s 问题的能力也下降了,干脆就开发了这个小工具,帮助我操作 k8s。

我把这个工具称作 K8S-LLM, 它允许用户通过自然语言与 Kubernetes 进行交互,极大地简化了操作流程。K8S-LLM 基于大型语言模型(LLM)提供支持,能够将用户的自然语言指令转换为对应的 Kubernetes 操作命令。它不仅简化了命令的输入,还提供了上下文感知的对话功能,使得与 Kubernetes 的交互更加直观和高效。

K8S-LLM 的核心功能

自然语言到 Kubernetes 命令的转换

K8S-LLM 的核心功能之一是将自然语言指令转换为 Kubernetes 命令。例如,用户可以通过简单的自然语言指令来列出所有 Pod:

bash 复制代码
k8sllm -q "列出默认命名空间中的所有 pod"

工具会自动将这条指令转换为 kubectl get pods 命令并执行。

支持的命令类型

K8S-LLM 支持多种类型的 Kubernetes 命令,包括但不限于:

  • 查询命令:如"列出所有 Pod"、"查看某个服务的状态"。
  • 部署命令:如"部署一个新的应用"、"更新现有应用的镜像"。
  • 删除命令:如"删除某个 Pod"、"删除某个命名空间"。
  • 调试命令:如"查看 Pod 日志"、"获取 Pod 描述"。

本质上,这取决于使用的大模型的能力。

上下文感知的对话

K8S-LLM 还支持多轮对话,能够理解上下文,使用户可以在之前的操作基础上继续提问。例如,用户可以先列出所有 Pod,然后继续提问"删除第一个 Pod"。

bash 复制代码
k8sllm -q "列出默认命名空间中的所有 pod"
k8sllm -q "删除第一个 Pod"

换句话话,他能自动捕捉命令的输出作为上下文,这在 debug 的时候很有用。

危险操作的提示与确认

为了避免误操作,K8S-LLM 在识别到潜在的危险操作时,会提示用户进行确认。例如,当用户尝试删除资源时,工具会要求用户明确确认:

bash 复制代码
k8sllm -q "删除所有 Pod"

工具会显示以下的提示:

This is a potentially dangerous operation!
Command to be executed: {command}
Please confirm you want to proceed (y/n):

输入 y后,会自动执行命令。

安装与快速上手

安装步骤

安装 K8S-LLM 非常简单,只需克隆项目并安装依赖即可:

bash 复制代码
git clone git@github.com:yexia553/k8sllm.git
cd k8sllm
pip install -r requirements.txt && pip install .
配置大模型

K8S-LLM 支持多种 LLM 服务,用户可以根据需求灵活配置。我个人推荐使用 DeepSeek,因为它提供良好的性能、价格便宜,并且配置简单。用户也可以选择其他兼容 OpenAI SDK 的模型。

用户只需在根目录下创建 .k8sllm/config.yaml 文件,配置 LLM 服务的 URL、API 密钥和模型名称即可。例如:

yaml 复制代码
llm:
  base_url: "https://api.deepseek.com/v1"
  api_key: "your-api-key"
  model: "deepseek-chat"

除了 DeepSeek,K8S-LLM 还支持其他兼容 OpenAI SDK 的 LLM 服务。用户可以根据自己的需求选择合适的模型,并在配置文件中进行相应的设置。

具体怎么获取 api key,请参考这里

基本使用

使用 K8S-LLM 也非常直观。例如,用户可以通过以下命令列出默认命名空间中的所有 Pod:

bash 复制代码
k8sllm -q "列出默认命名空间中的所有 pod"
别名设置

为了更方便地使用,用户还可以设置别名:

bash 复制代码
alias qk8sllm='k8sllm -q'
alias ck8sllm='k8sllm -c'

设置别名后,用户可以直接使用 qk8sllmck8sllm 来提问或清除上下文。

bash 复制代码
# 提问
qk8sllm "列出默认命名空间中的所有 pod"

# 清除对话上下文
ck8sllm

这样使用起来更加方便,不用再输入参数

技术实现与架构

技术栈

K8S-LLM 使用 Python 3.8+ 开发,主要依赖以下库:

  • click:用于构建命令行接口。
  • pyyaml:用于配置文件的管理。
  • openai:用于与 LLM 服务的集成。
核心模块

K8S-LLM 的核心模块包括:

  1. 自然语言解析模块:将用户输入的自然语言指令转换为 Kubernetes 命令。
  2. 上下文管理模块:维护对话历史,支持多轮交互。
  3. 安全检测模块:识别并提示高风险操作。

上下文管理

K8S-LLM 会在用用户的根目录下,生成一个.k8sllm/context.json

里面记录的是用户的历史提问、大模型的回答、执行的命令和输出,可以用于审计,可以执行

k8sllm -c

来清理上下文。

结语

K8S-LLM 为 Kubernetes 的管理提供了一种全新的交互方式,极大地降低了学习和使用的门槛。无论是 Kubernetes 新手还是资深开发者,都可以通过自然语言轻松完成复杂的操作。

这个工具我是为了解决自己的问题开发的,顺便开源了,如果正好有人也需要,希望这篇博客能帮助你更简单地使用K8S-LLM.

相关链接

希望这篇博客能帮助你更好地了解和使用 K8S-LLM。如果你有任何问题或建议,欢迎在评论区留言或直接参与项目的开发!

相关推荐
predisw1 小时前
请求是如何通过k8s service 路由到对应的pod
云原生·容器·kubernetes·cloud native
Linux运维老纪3 小时前
Nginx常用配置之详解(Detailed Explanation of Common Nginx Configurations)
计算机网络·nginx·微服务·云原生·架构·云计算·运维开发
周圣贤7 小时前
区块链、量子与机器学习:边缘计算与云原生的未来互联之路
机器学习·云原生·区块链·边缘计算·量子计算
檀越剑指大厂8 小时前
【fnOS使用Docker快速搭建WordPress站点并免费配置公网地址】
运维·docker·容器
Aries2638 小时前
微服务间通信的端口开放性探究:从单机到多机的转变
微服务·云原生·架构
u0100559608 小时前
sudo mkdir -p /etc/docker其中的 -p 什么意思?
运维·docker·容器
嗑瓜子儿溜茶水儿15 小时前
docker 部署 NginX
nginx·docker·容器
G_whang16 小时前
mac m2 安装 docker
macos·docker·容器
Ethan301421 小时前
微服务概论(https://microservices.io/)
微服务·云原生·架构
童安格粉丝1 天前
Docker图形化界面工具Portainer最佳实践
运维·redis·docker·容器·portainer·实践·详解