MCP Kubernetes Server 是基于模型上下文协议(Model Context Protocol, MCP)的Kubernetes管理服务器,提供Kubernetes集群信息获取、操作执行、状态监控和资源分析功能。项目地址:https://github.com/guolisen/mcp_k8s_server
技术架构
MCP Kubernetes Server基于Python实现,使用FastMCP框架与Kubernetes API交互。主要模块包括:
K8sClient: 基础客户端,封装Kubernetes API调用K8sOperations: 资源操作实现K8sMonitoring: 监控系统核心Resource Tools: 资源信息获取工具Operation Tools: 资源操作工具Monitoring Tools: 监控工具
例:

监控系统技术实现
监控系统架构
监控系统基于K8sMonitoring类实现,采用线程池技术进行异步数据收集,主要技术特点:
-
多线程异步架构
- 使用
threading模块创建守护线程执行监控循环 - 通过
_monitor_loop方法定期收集集群数据 - 可配置的监控间隔控制数据采集频率
- 使用
-
回调机制
- 基于观察者模式实现的事件通知系统
- 支持针对Pod、节点、Deployment和整体集群状态的回调注册
- 状态变更自动触发已注册回调函数
-
状态缓存
- 使用字典结构实现高效的内存缓存
- 分层存储不同资源类型的状态数据
- 增量更新机制减少资源消耗
监控数据采集
通过定期轮询Kubernetes API收集以下资源数据:
节点监控
def _update_nodes_status(self) -> None:
"""更新所有节点状态"""
try:
# 获取所有节点
nodes = self.client.get_nodes()
# 更新状态缓存
new_status = {}
for node in nodes:
name = node["name"]
# 检查节点是否就绪
ready = False
for condition in node.get("status", {}).get("conditions", []):
if condition.get("type") == "Ready":
ready = condition.get("status") == "True"
break
# 构建节点状态结构
node_status = {
"name": name,
"ready": ready,
"conditions": node.get("status", {}).get("conditions", []),
"capacity": node.get("status", {}).get("capacity", {}),
# 更多状态数据...
}
# 添加指标数据
metrics = self._get_node_metrics(name)
node_status["metrics"] = metrics
new_status[name] = node_status
# 更新缓存
self._resource_status["nodes"] = new_status
# 通知回调
for callback in self._callbacks["nodes"]:
callback(new_status)
except Exception as e:
logger.error(f"更新节点状态出错: {e}")
Pod监控
系统收集Pod的详细状态信息,包括:
- 运行阶段(Running、Pending、Failed等)
- 容器状态和重启次数
- IP地址分配情况
- QoS类别
- 启动时间
- 容器资源使用情况
资源指标采集
通过Kubernetes Metrics API收集CPU和内存使用数据:
def _get_pod_metrics(self, name: str, namespace: str) -> Dict[str, Any]:
"""获取Pod指标数据"""
try:
# 使用自定义资源API获取Pod指标
metrics_list = self.client.list_custom_resources(
group="metrics.k8s.io",
version="v1beta1",
plural="pods",
namespace=namespace
)
# 查找特定Pod的指标
pod_metrics = next(
(item for item in metrics_list
if item.get("metadata", {}).get("name") == name),
None
)
if not pod_metrics:
return {}
# 提取容器指标并进行单位转换
container_metrics = {}
for container in pod_metrics.get("containers", []):
container_name = container.get("name")
usage = container.get("usage", {})
cpu = usage.get("cpu", "0")
memory = usage.get("memory", "0")
# CPU单位转换逻辑
if cpu.endswith("n"):
cpu_millicores = int(cpu[:-1]) / 1000000
elif cpu.endswith("u"):
cpu_millicores = int(cpu[:-1]) / 1000
# 更多转换逻辑...
container_metrics[container_name] = {
"cpu": {
"raw": cpu,
"millicores": cpu_millicores,
},
"memory": {
"raw": memory,
"mib": memory_mib,
},
}
return {
"timestamp": pod_metrics.get("timestamp"),
"containers": container_metrics,
}
except Exception as e:
logger.warning(f"获取Pod指标出错: {e}")
return {}
集群健康评估系统
系统通过check_cluster_health()工具实现综合健康评估:
-
数据聚合与分析
- 汇总各类资源状态数据
- 计算关键健康指标:
- 节点就绪率 (ready_nodes / total_nodes)
- Pod运行率 (running_pods / total_pods)
- Deployment可用率 (available_deployments / total_deployments)
-
问题资源识别算法
- 自动识别非就绪节点
- 检测非Running状态的Pod
- 找出不满足期望副本数的Deployment
-
状态判定逻辑
# 确定集群状态 status = "Healthy" if nodes_ready < nodes_total: status = "Degraded" if nodes_ready == 0: status = "Critical" if pods_failed > 0 or pods_pending > 0: status = "Warning" -
健康报告生成
- 生成包含以下内容的结构化JSON报告:
- 整体状态评估
- 各组件健康分数
- 问题资源列表
- 针对性建议
- 生成包含以下内容的结构化JSON报告:
未来技术路线:诊断与修复系统
后续计划开发的诊断和自动修复系统将基于以下技术实现:
诊断系统
-
数据分析引擎
- 使用时序数据分析识别异常模式
- 基于规则引擎进行问题分类和匹配
- 采用图数据结构构建依赖关系和影响分析
-
故障诊断算法
- 基于历史数据的异常检测
- 采用决策树模型进行根因分析
- 使用相似度匹配找出已知问题模式
自动修复框架
-
修复执行引擎
- 基于问题类型选择修复策略
- 执行前状态备份机制
- 分阶段执行与验证流程
-
修复知识库
- 结构化存储常见问题的修复方案
- 支持修复效果评估和改进
- 与诊断系统的双向集成
-
自适应修复策略
- 基于环境上下文调整修复参数
- 执行中实时监控与调整
- 修复后验证和回滚机制
MCP协议集成
通过MCP协议,系统能够与大型语言模型集成,实现以下技术能力:
-
自然语言处理接口
- 将自然语言转换为Kubernetes API操作
- 通过语义理解实现复杂操作序列
-
语境感知的结果解析
- 基于当前上下文生成针对性分析
- 技术数据转换为可读性更强的输出
部署配置
系统支持多种部署方式:
-
直接运行
mcp-k8s-server --config /path/to/config.yaml -
Docker容器
docker run -p 8000:8000 -v ~/.kube:/home/mcp/.kube mcp-k8s-server -
Kubernetes部署
kubectl apply -f k8s/
主要配置参数:
server:
name: mcp-k8s-server
transport: sse # stdio或sse
port: 8000
host: 0.0.0.0
kubernetes:
config_path: "" # Kubeconfig路径
context: "" # Kubernetes上下文
namespace: default
monitoring:
enabled: true
interval: 30 # 监控间隔(秒)
resources: # 要监控的资源
- pods
- nodes
- deployments
- volume
metrics: # 要收集的指标
- cpu
- memory
- disk
- network
安装方法
pip install mcp-k8s-server
项目遵循MIT许可证,源代码可在GitHub获取:https://github.com/guolisen/mcp_k8s_server

368

被折叠的 条评论
为什么被折叠?



