简单的K8s MCP服务器
一个简化的Kubernetes MCP(模型上下文协议)服务器,用于学习Go和K8s集成。该项目提供了一个易于使用的界面,用于通过各种模式(包括stdio和SSE)管理Kubernetes命名空间和Pod。
特性
命名空间管理
- 列出命名空间:获取集群中所有命名空间的详细信息
- 获取命名空间:检索特定命名空间的全面详细信息
- 创建命名空间:使用可选标签和注释创建新的命名空间
- 更新命名空间:修改现有命名空间的标签和注释
- 删除命名空间:标准命名空间删除和状态监视
- 智能删除命名空间:智能删除,自动选择最佳策略
- 强制删除命名空间:使用多种策略增强对卡住命名空间的删除
- 获取命名空间YAML:以YAML格式导出命名空间配置
- 资源配额管理:设置和获取命名空间的资源配额
- 限额范围管理:配置和检索限制范围
- 命名空间事件:获取与特定命名空间相关的事件
Pod管理
- 列出Pod:使用过滤选项获取命名空间中的所有Pod
- 获取Pod:检索特定Pod的详细信息
- 获取Pod日志:从pod容器流式传输或检索日志
- 获取Pod指标:监控CPU和内存使用情况
- 描述Pod:获取全面的pod描述(kubectl describes等效)
- 删除Pod:删除具有可配置宽限期的特定Pod
- 重新启动Pod:通过删除和重新创建来重新启动Pod
- 创建Pod:从JSON清单部署新Pod
- 更新Pod:修改pod标签和注释
- 获取Pod事件:检索与特定Pod相关的事件
多环境支持
- 自动检测:自动检测并配置不同的群集类型
- K3s集成:对K3集群的原生支持,具有增强的删除策略
- 集群内部署:在Kubernetes中作为pod部署时无缝工作
- 标准Kubernetes:与托管和自托管集群完全兼容
先决条件
- 转到1.21或更高版本
- 访问Kubernetes集群(K8s或K3s)
kubectl配置了适当的群集访问权限
安装和设置
1.安装Go(如果尚未安装)
wget https://go.dev/dl/go1.21.5.linux-amd64.tar.gz
sudo rm -rf /usr/local/go && sudo tar -C /usr/local -xzf go1.21.5.linux-amd64.tar.gz
echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc
source ~/.bashrc2.克隆和构建
git clone https://github.com/hendzormati/simple-k8s-mcp-server.git
cd simple-k8s-mcp-server
go mod tidy
go build -o main src/main.go3.设置测试环境(可选)
kubectl run test-pod --image=nginx --restart=Never群集设置
适用于K3s集群
curl -sfL https://get.k3s.io | INSTALL_K3S_VERSION="v1.32.6+k3s1" \
sh -s - \
--write-kubeconfig-mode 644服务器会自动检测K3的安装并应用适当的优化。
对于标准Kubernetes
确保您的 ~/.kube/config 已正确配置或设置 KUBECONFIG 环境变量。
用法
标准模式
在stdio模式下启动服务器以进行直接CLI交互:
./main --mode stdio命令示例:
创建命名空间:
{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"createNamespace","arguments":{"name":"test-interactive","labels":"{}","annotations":"{}"}}}获取命名空间详细信息:
{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"getNamespace","arguments":{"name":"test-interactive"}}}删除命名空间:
{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"deleteNamespace","arguments":{"name":"test-interactive"}}}智能删除(建议用于K3):
{"jsonrpc":"2.0","id":4,"method":"tools/call","params":{"name":"smartDeleteNamespace","arguments":{"name":"stuck-namespace","force":true}}}SSE模式
以SSE模式启动服务器进行web集成:
./main --mode sse --host 192.168.1.14 --port 8080SSE模式与n8n工作流等自动化平台完美配合,为Kubernetes管理提供了一个对话界面。
对话流程示例:
用户: “您已连接到群集吗?”
服务器: “是的,我已连接到Kubernetes集群,并准备帮助您管理资源。”
用户: “创建一个名为ns-delete的命名空间”
服务器: 已成功创建命名空间“ns delete”
用户: “现在为我描述一下”
服务器: 命名空间'ns-delete'创建于2025-08-15T18:29:14+01:00,标签为kubernetes.io/元数据.name:ns-delete,其当前状态为活动
用户: “我想用标签更新它,举个例子”
服务器: 命名空间“ns delete”已更新为标签“environment:test”
用户: “现在删除它”
服务器: “警告:删除命名空间'ns-delete'将删除其中的所有资源。是否确实要继续?”
用户: “是”
服务器: 命名空间“ns delete”正在终止。如果它卡住,可以使用forceDeleteNamespace将其删除
用户: “现在列出命名空间”
服务器: 当前的命名空间是:default、kube-node-lease、kube-poublic和kube-system。ns-delete命名空间不再列出,表示它已被成功删除
增强的删除功能
此服务器包括专门为命名空间可能陷入“终止”状态的环境设计的高级删除功能:
- 智能删除:自动在常规删除和强制删除之间进行选择
- 多种策略:对卡住的命名空间使用4种不同的方法
- K3s已优化:针对K3s API发现问题的特殊处理
- 定稿管理:自动删除阻塞终结器
测试环境
该项目已在以下方面进行了彻底测试:
- Killerkoda:在线Kubernetes游乐场环境
- K3s集群:轻量级Kubernetes发行版
- 标准Kubernetes:各种管理和自托管集群
可用服务器模式
- 标准:用于脚本和CLI工具的直接命令行界面
- SSE:web应用程序和自动化平台的服务器发送事件模式
- 超文本传输协议:标准HTTP API模式
配置选项
服务器会自动从以下位置检测您的群集配置:
- 集群内服务帐户(作为pod运行时)
KUBECONFIG环境变量- K3s默认位置(
/etc/rancher/k3s/k3s.yaml) - 标准kubeconfig位置(
~/.kube/config)
致谢
这个项目的灵感来自 k8s mcp服务器 项目。在保持核心MCP协议兼容性的同时,这个简化版本侧重于学习Go和Kubernetes的集成,以及增强的命名空间和pod管理功能。
许可证
这个项目是开源的,可以在MIT许可证下使用。请参阅 许可证 文件以获取更多信息。
