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:
k8sllm -q "列出默认命名空间中的所有 pod"
工具会自动将这条指令转换为 kubectl get pods
命令并执行。
支持的命令类型
K8S-LLM 支持多种类型的 Kubernetes 命令,包括但不限于:
- 查询命令:如“列出所有 Pod”、“查看某个服务的状态”。
- 部署命令:如“部署一个新的应用”、“更新现有应用的镜像”。
- 删除命令:如“删除某个 Pod”、“删除某个命名空间”。
- 调试命令:如“查看 Pod 日志”、“获取 Pod 描述”。
本质上,这取决于使用的大模型的能力。
上下文感知的对话
K8S-LLM 还支持多轮对话,能够理解上下文,使用户可以在之前的操作基础上继续提问。例如,用户可以先列出所有 Pod,然后继续提问“删除第一个 Pod”。
k8sllm -q "列出默认命名空间中的所有 pod"
k8sllm -q "删除第一个 Pod"
换句话话,他能自动捕捉命令的输出作为上下文,这在 debug 的时候很有用。
危险操作的提示与确认
为了避免误操作,K8S-LLM 在识别到潜在的危险操作时,会提示用户进行确认。例如,当用户尝试删除资源时,工具会要求用户明确确认:
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 非常简单,只需克隆项目并安装依赖即可:
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 密钥和模型名称即可。例如:
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:
k8sllm -q "列出默认命名空间中的所有 pod"
别名设置
为了更方便地使用,用户还可以设置别名:
alias qk8sllm='k8sllm -q'
alias ck8sllm='k8sllm -c'
设置别名后,用户可以直接使用 qk8sllm
和 ck8sllm
来提问或清除上下文。
# 提问
qk8sllm "列出默认命名空间中的所有 pod"# 清除对话上下文
ck8sllm
这样使用起来更加方便,不用再输入参数
技术实现与架构
技术栈
K8S-LLM 使用 Python 3.8+ 开发,主要依赖以下库:
- click:用于构建命令行接口。
- pyyaml:用于配置文件的管理。
- openai:用于与 LLM 服务的集成。
核心模块
K8S-LLM 的核心模块包括:
- 自然语言解析模块:将用户输入的自然语言指令转换为 Kubernetes 命令。
- 上下文管理模块:维护对话历史,支持多轮交互。
- 安全检测模块:识别并提示高风险操作。
上下文管理
K8S-LLM 会在用用户的根目录下,生成一个.k8sllm/context.json
里面记录的是用户的历史提问、大模型的回答、执行的命令和输出,可以用于审计,可以执行
k8sllm -c
来清理上下文。
结语
K8S-LLM 为 Kubernetes 的管理提供了一种全新的交互方式,极大地降低了学习和使用的门槛。无论是 Kubernetes 新手还是资深开发者,都可以通过自然语言轻松完成复杂的操作。
这个工具我是为了解决自己的问题开发的,顺便开源了,如果正好有人也需要,希望这篇博客能帮助你更简单地使用K8S-LLM.
相关链接
- GitHub 项目地址
- DeepSeek 官网
- Kubernetes 官方文档
希望这篇博客能帮助你更好地了解和使用 K8S-LLM。如果你有任何问题或建议,欢迎在评论区留言或直接参与项目的开发!
相关文章:
K8S-LLM:用自然语言轻松操作 Kubernetes
在 Kubernetes (K8s) 的日常管理中,复杂的命令行操作常常让开发者感到头疼。无论是部署应用、管理资源还是调试问题,都需要记住大量的命令和参数。Kubernetes 作为容器编排的行业标准,其强大的功能伴随着陡峭的学习曲线和复杂的命令行操作。这…...
lua和C API库一些记录
相关头文件解释 lua.h:声明lua提供的基础函数,所有内容都有个前缀lua_; luaxlib.h:声明辅助库提供的函数,所有内容都有个前缀luaL_; lualib.h:声明了打开标准库的函数; 辅助库对…...

SpringSecurity中的过滤器链与自定义过滤器
关于 Spring Security 框架中的过滤器的使用方法,系列文章: 《SpringSecurity中的过滤器链与自定义过滤器》 《SpringSecurity使用过滤器实现图形验证码》 1、Spring Security 中的过滤器链 Spring Security 中的过滤器链(Filter Chain)是一个核心的概念,它定义了一系列过…...
Slate文档编辑器-Decorator装饰器渲染调度
Slate文档编辑器-Decorator装饰器渲染调度 在之前我们聊到了基于文档编辑器的数据结构设计,聊了聊基于slate实现的文档编辑器类型系统,那么当前我们来研究一下slate编辑器中的装饰器实现。装饰器在slate中是非常重要的实现,可以为我们方便地…...

本地Docker部署Flowise并实现远程构建LLM应用程序原型高效开发
文章目录 前言1. Docker安装Flowise2. Ubuntu安装Cpolar3. 配置Flowise公网地址4. 远程访问Flowise5. 固定Cpolar公网地址6. 固定地址访问 前言 相信很多对AI感兴趣的小伙伴都会觉得正在逐渐流行的工作流自动化和AI集成特别酷炫,没错,这些技术像“秘密武…...

多点通信、流式域套接字
一、广播 1.1广播的发送端模型: #include<myhead.h>#define BEN_IP "192.168.191.129" #define BEN_PORT 8888#define PORT 6666int main(int argc, const char *argv[]) {int oldfd socket(AF_INET,SOCK_DGRAM,0);if(oldfd -1){perror("soc…...

vue3使用video-player实现视频播放(可拖动视频窗口、调整大小)
1.安装video-player npm install video.js videojs-player/vue --save在main.js中配置全局引入 // 导入视频播放组件 import VueVideoPlayer from videojs-player/vue import video.js/dist/video-js.cssconst app createApp(App) // 视频播放组件 app.use(VueVideoPlayer)2…...
模块化和面向接口的设计:深入理解和应用
模块化和面向接口的设计:深入理解和应用 在面向对象编程中,模块化 和 面向接口设计 是两种非常重要的编程理念。它们能帮助开发人员构建更加清晰、可维护和易于扩展的系统。接下来,我们将详细解释这两种设计思想,并结合 Python 中…...
《SwiftUI 实现点击按钮播放 MP3 音频》
功能介绍 点击按钮时,应用会播放名为 yinpin.mp3 的音频文件。使用 AVAudioPlayer 来加载和播放音频。 关键点: 按钮触发:点击按钮会调用 playAudio() 播放音频。音频加载:通过 Bundle.main.url(forResource:) 加载音频文件。播…...

微机接口课设——基于Proteus和8086的打地鼠设计(8255、8253、8259)Proteus中Unknown 1-byte opcode / Unknown 2-byte opcode错误
原理图设计 汇编代码 ; I/O 端口地址定义 IOY0 EQU 0600H IOY1 EQU 0640H IOY2 EQU 0680HMY8255_A EQU IOY000H*2 ; 8255 A 口端口地址 MY8255_B EQU IOY001H*2 ; 8255 B 口端口地址 MY8255_C EQU IOY002H*2 ; 8255 C 口端口地址 MY8255_MODE EQU IOY003H*2 ; …...
MySQL如何执行.sql 文件:详细教学指南
在使用MySQL数据库过程中,我们经常需要执行包含SQL语句的.sql文件。这些文件通常用于数据库的备份和恢复或批量执行SQL脚本。本文将详细介绍如何在不同环境下执行MySQL的.sql文件。 前置准备 在开始之前,请确保以下条件已经满足: 已经安装…...

非周期性脑活动的动态重构支持癫痫患者的认知功能:一种神经指纹识别方法
摘要 颞叶癫痫(TLE)的特征是大脑活动模式发生大规模的变化,并且这种变化与患者的认知功能受损密切相关。本研究旨在使用神经指纹方法分析大脑活动的动态重构,以描绘TLE患者的个体特征及其认知功能相关性。本研究收集了68名TLE患者和34名对照组的10min静息…...

ZYNQ初识6(zynq_7010)clock时钟IP核
基于板子的PL端无时钟晶振,需要从PS端借用clock1(50M)晶振 接下去是自定义clock的IP核封装,为后续的simulation可以正常仿真波形,需要注意顶层文件的设置,需要将自定义的IP核对应的.v文件设置为顶层文件&a…...

使用MFC编写一个paddleclas预测软件
目录 写作目的 环境准备 下载编译环境 解压预编译库 准备训练文件 模型文件 图像文件 路径整理 准备预测代码 创建预测应用 新建mfc应用 拷贝文档 配置环境 界面布局 添加回cpp文件 修改函数 报错1解决 报错2未解决 修改infer代码 修改MFCPaddleClasDlg.cp…...

SAP SD BP名称和销售订单描述的对应不起来的问题
问题 VBPA-ADRNR地址 和 KNA1-ADRNR 指向同一个号码 销售订单读取这个地址 改正后恢复正常 原因:推测 应该是创建Y0 电商客户的时候,引起锁和混乱导致的。 具体实际时什么样,不太清楚 写于20241230 浙江台州...
FlastOcc-网络复现-1.环境配置及问题
研究OCC网络 1.RuntimeError: Ninja is required to load C extensions RuntimeError: Ninja is required to load C extensions #32 Ninja is required to load C extensions File “/FlashOCC/projects/mmdet3d_plugin/core/evaluation/ray_metrics.py”, line 12, in dvr …...
Go语言中值接收者和指针接收者的区别?
在 Go 语言中,值接收者和指针接收者是方法定义中的两种接收者类型。它们的主要区别在于方法调用时的行为、接收者是否可以被修改,以及性能上的差异。 值接收者 定义 值接收者的方法接收的是调用对象的一个副本,方法内部对该副本的修改不会影…...

kafka小实站
需要先在前面的文章里面照着下载好kafka,并且启动 先启动zookeeper 项目目录 package kafka; import lombok.extern.slf4j.Slf4j; import org.apache.kafka.clients.consumer.ConsumerRecord; import org.springframework.kafka.annotation.KafkaListener; import…...

基于Python实现车辆检测、机动车检测、识别位置标记、计数
目录 引言背景与应用场景车辆检测的研究意义相关工作车辆检测概述机动车检测方法分类基于传统计算机视觉的检测方法基于深度学习的检测方法技术与方法车辆检测技术概述基于Python的车辆检测方法图像处理与特征提取深度学习方法(如YOLO、SSD、Faster R-CNN等)数据集与标注常用…...

心理学硕士
心理学硕士的主要研究方向包括基础心理学、发展心理学和应用心理学。 基础心理学研究一般的心理现象与规律,如心理的实质及神经机制、感觉与知觉、意识与注意、学习与记忆、思维与语言、情绪与意识、人格等。发展心理学研究人类个体心理发生发展的特点和规律&a…...

工业安全零事故的智能守护者:一体化AI智能安防平台
前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...
STM32+rt-thread判断是否联网
一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...

k8s业务程序联调工具-KtConnect
概述 原理 工具作用是建立了一个从本地到集群的单向VPN,根据VPN原理,打通两个内网必然需要借助一个公共中继节点,ktconnect工具巧妙的利用k8s原生的portforward能力,简化了建立连接的过程,apiserver间接起到了中继节…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)
上一章用到了V2 的概念,其实 Fiori当中还有 V4,咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务),代理中间件(ui5-middleware-simpleproxy)-CSDN博客…...

论文笔记——相干体技术在裂缝预测中的应用研究
目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术:基于互相关的相干体技术(Correlation)第二代相干体技术:基于相似的相干体技术(Semblance)基于多道相似的相干体…...

Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...

LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf
FTP 客服管理系统 实现kefu123登录,不允许匿名访问,kefu只能访问/data/kefu目录,不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...

深度学习水论文:mamba+图像增强
🧀当前视觉领域对高效长序列建模需求激增,对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模,以及动态计算优势,在图像质量提升和细节恢复方面有难以替代的作用。 🧀因此短时间内,就有不…...