返回市场
k8s多集群MCP

k8s多集群MCP

作者:razvanmacovei11 星标更新:2025-08-06

项目介绍

多集群 Kubernetes MCP 服务器

smithery 徽章

这是一个用于 Kubernetes 操作的 MCP(模型上下文协议)服务器应用程序,提供了一个标准化的 API,可以使用多个 kubeconfig 文件同时与多个 Kubernetes 集群进行交互。

MCPO 服务器配置

在您的 MCPO 服务器的 config.json 文件中添加以下配置(例如,在 Claude Desktop 中):

{
  "mcpServers": {
    "kubernetes": {
      "command": "python3",
      "args": ["/path/to/k8s-multicluster-mcp/app.py"],
      "env": {
        "KUBECONFIG_DIR": "/path/to/your/kubeconfigs"
      }
    }
  }
}

/path/to/your/kubeconfigs 替换为您实际的 kubeconfig 文件目录路径。

服务器期望您指定的目录中放置多个 kubeconfig 文件。每个 kubeconfig 文件代表一个不同的 Kubernetes 集群,您可以与其进行交互。

安装

通过 Smithery 安装

要通过 Smithery 自动安装 Claude Desktop 的多集群 Kubernetes 服务器:

npx -y @smithery/cli install @razvanmacovei/k8s-multicluster-mcp --client claude

先决条件

  • Python 3.8 或更高版本
  • pip 包管理器
  • uv 包管理器(可选,推荐用于更快的安装)

设置本地环境

  1. 克隆仓库

    git clone https://github.com/razvanmacovei/k8s-multicluster-mcp.git
    cd k8s-multicluster-mcp
    
  2. 创建虚拟环境

    # 使用 venv(内置)
    python3 -m venv .venv
    
    # 激活虚拟环境
    # 在 Windows 上
    .venv\Scripts\activate
    
    # 在 macOS/Linux 上
    source .venv/bin/activate
    
  3. 安装依赖项

    # 使用 pip
    pip install -r requirements.txt
    
    # 或者使用 uv(更快)
    uv pip install -r requirements.txt
    
  4. 配置您的环境

    • 确保您已准备好 kubeconfig 文件
    • 设置 KUBECONFIG_DIR 环境变量指向您的 kubeconfig 目录
  5. 运行应用程序

    python3 app.py
    

多集群管理

此 MCP 服务器专门设计用于处理多个 Kubernetes 集群:

  • 多个 Kubeconfig 文件:将您的 kubeconfig 文件放在由 KUBECONFIG_DIR 指定的目录中
  • 上下文选择:通过在命令中指定上下文参数轻松切换集群
  • 跨集群操作:比较不同集群之间的资源、状态和配置
  • 集中式管理:从单一界面管理所有 Kubernetes 环境(开发、预发布、生产)

功能

Kubernetes MCP 服务器提供了与 Kubernetes 集群交互的一整套工具:

集群管理

  • 列出可用的 Kubernetes 上下文
  • 列出集群中的命名空间和节点
  • 列出并检索关于 Kubernetes 资源的详细信息
  • 发现可用的 API 和自定义资源定义(CRD)

资源管理

  • 列出并检查任何 Kubernetes 资源(pod、部署、服务等)
  • 获取 pod 日志
  • 获取关于部署、有状态集和守护进程集的详细状态信息
  • 描述带有详细信息的资源,类似于 kubectl describe

指标和监控

  • 显示节点的资源使用情况(CPU/内存)
  • 显示 pod 的资源使用情况(CPU/内存)
  • 通过检查状态、事件和日志来诊断应用问题

回滚管理

  • 获取回滚状态和历史记录
  • 回滚、重新启动、暂停和恢复回滚
  • 缩放和自动缩放资源
  • 更新资源限制(CPU/内存限制和请求)

使用示例

这里有一些如何使用 Kubernetes MCP 服务器与 AI 助手的例子:

多集群操作

列出我所有 kubeconfig 文件中的可用上下文。
比较我的 'prod' 和 'staging' 上下文中 'backend' 命名空间运行的 pod 数量。
显示我 'dev' 和 'prod' 集群中所有节点的资源使用情况。

诊断应用问题

我在 'production' 命名空间有一个名为 'my-app' 的部署,它有问题。你能检查一下吗?

缩放资源

我需要将 'default' 命名空间中的 'backend' 部署缩放到 5 个副本。

调查资源使用情况

显示我集群中节点的资源使用情况。

更新资源限制

我的 'web' 命名空间中的 'web-app' 应用程序遇到了 OOM 问题。你能将 'app' 容器的内存限制增加到 512Mi 吗?

回滚部署

我需要将 'services' 命名空间中的 'api-gateway' 部署回滚到上一个版本。

发现 API 资源

我的 Kubernetes 集群中有哪些可用的 API?

描述资源

你能描述 'default' 命名空间中的 'my-pod' pod 吗?

创建新资源

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  namespace: default
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.21
        ports:
        - containerPort: 10

暴露部署

将 'default' 命名空间中的 'backend' 部署暴露为服务,目标端口 8080,服务端口 80。

在 Pod 中执行命令

在 'default' 命名空间中的 'web-app-1234' pod 的 'app' 容器中执行命令 'ls -la /app'。

节点维护

我需要对节点 'worker-1' 进行维护,请将其标记为不可调度,然后排空它,完成工作后再取消标记。

应用配置

应用此配置以更新我现有的部署:
apiVersion: apps/v1
kind: Deployment
metadata:
  name: existing-deployment
  namespace: default
spec:
  replicas: 3
  template:
    spec:
      containers:
      - name: app
        image: myapp:v2

补丁资源

补丁 'default' 命名空间中的 'my-configmap' ConfigMap,添加新的键 'NEW_SETTING',值为 'enabled'。

更新标签

在 'backend' 命名空间中的 'api' 部署上添加标签 'environment=production'。

实现的工具

服务器实现了以下 MCP 工具:

核心工具

  • k8s_get_contexts: 列出所有可用的 Kubernetes 上下文
  • k8s_get_namespaces: 列出指定上下文中的所有命名空间
  • k8s_get_nodes: 列出集群中的所有节点
  • k8s_get_resources: 列出指定类型的资源
  • k8s_get_resource: 获取特定资源的详细信息
  • k8s_get_pod_logs: 获取特定 pod 的日志
  • k8s_describe: 显示特定资源或一组资源的详细信息

API 发现工具

  • k8s_apis: 列出 Kubernetes 集群中的所有可用 API
  • k8s_crds: 列出集群中的所有自定义资源定义(CRD)

指标工具

  • k8s_top_nodes: 显示节点的资源使用情况
  • k8s_top_pods: 显示 pod 的资源使用情况

回滚管理工具

  • k8s_rollout_status: 获取回滚的状态
  • k8s_rollout_history: 获取回滚的修订历史
  • k8s_rollout_undo: 回滚到之前的修订
  • k8s_rollout_restart: 重新启动回滚
  • k8s_rollout_pause: 暂停回滚
  • k8s_rollout_resume: 恢复暂停的回滚

缩放工具

  • k8s_scale_resource: 将资源缩放到指定数量的副本
  • k8s_autoscale_resource: 配置水平 pod 自动扩展器(HPA)
  • k8s_update_resources: 更新资源请求和限制

诊断工具

  • k8s_diagnose_application: 诊断应用的问题

资源创建和管理工具

  • k8s_create_resource: 从 YAML/JSON 内容创建 Kubernetes 资源
  • k8s_apply_resource: 应用配置到资源(创建或更新)
  • k8s_patch_resource: 更新资源的字段
  • k8s_label_resource: 更新资源上的标签
  • k8s_annotate_resource: 更新资源上的注解

工作负载管理工具

  • k8s_expose_resource: 将资源暴露为新的 Kubernetes 服务
  • k8s_set_resources_for_container: 设置容器的资源限制和请求

节点管理工具

  • k8s_cordon_node: 将节点标记为不可调度
  • k8s_uncordon_node: 将节点标记为可调度
  • k8s_drain_node: 排空节点以准备维护
  • k8s_taint_node: 更新节点的污点
  • k8s_untaint_node: 移除节点的污点

Pod 操作工具

  • k8s_pod_exec: 在容器中执行命令

贡献

欢迎贡献!请随时提交拉取请求。