Kubernetes自然语言交互服务器

mcp-kubernetes-server是一个实现模型上下文协议(MCP)的服务器,使AI助手(如Claude、Cursor和GitHub Copilot)能够通过自然语言与Kubernetes集群交互,适用于Kubernetes集群管理和故障诊断场景。

  • by feiskyer
  • Python
  • 混合部署
  • 20 星标
  • 更新于
在 GitHub 查看 feiskyer/mcp-kubernetes-server

使用说明

mcp kubernetes服务器

这 mcp-kubernetes-server 是一个实现模型上下文协议(MCP)的服务器,使AI助手(如Claude、Cursor和GitHub Copilot)能够与Kubernetes集群交互。它充当桥梁,将来自这些助手的自然语言请求转换为Kubernetes操作并返回结果。

它允许AI助手:

  • 查询Kubernetes资源
  • 执行kubectl命令
  • 通过自然语言交互管理Kubernetes集群
  • 诊断和解释Kubernetes资源的状态

运作原理

这 mcp-kubernetes-server 充当AI助手(支持模型上下文协议)和Kubernetes集群之间的中介。它接收来自这些助手的自然语言请求,并将其翻译成 kubectl 命令或直接调用Kubernetes API,并针对目标集群执行它们。然后,服务器处理结果并返回结构化响应,通过AI助手实现与Kubernetes环境的无缝交互。

如何安装

先决条件

安装前 mcp-kubernetes-server,确保您拥有以下内容:

  • 一个工作的Kubernetes集群。
  • A. kubeconfig 文件已正确配置以访问Kubernetes集群(服务器需要此文件进行交互)。
  • 这 kubectl 命令行工具已安装并位于系统的PATH中(服务器用于执行许多Kubernetes命令)。
  • 这 helm 命令行工具已安装并位于系统的PATH中(由服务器用于Helm chart操作)。
  • Python>=3.11,如果你打算直接使用 uvx (没有Docker)。

码头工人

获取Kubernetes集群的kubeconfig文件,并在mcpServers中进行设置(将src路径替换为kubeconfig路径):

{
  "mcpServers": {
    "kubernetes": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "--mount", "type=bind,src=/home/username/.kube/config,dst=/home/mcp/.kube/config",
        "ghcr.io/feiskyer/mcp-kubernetes-server"
      ]
    }
  }
}

UVX

使用以下命令运行服务器 uvx (随附的工具 uvPython打包器),首先确保 uv 已安装:

Install uv

安装 紫外线 如果尚未安装,请将其添加到PATH中,例如使用curl:

# For Linux and MacOS
curl -LsSf https://astral.sh/uv/install.sh | sh
Install kubectl

安装 kubectl 如果尚未安装,请将其添加到PATH中,例如。

# For Linux
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"

# For MacOS
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/darwin/arm64/kubectl"
Install helm

安装 舵 如果尚未安装,请将其添加到PATH中,例如。

curl -sSL https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash

在中配置MCP服务器 克劳德桌面, 光标, ChatGPT 副驾驶, Github Copilot 以及其他受支持的AI客户端,例如。

{
  "mcpServers": {
    "kubernetes": {
      "command": "uvx",
      "args": [
        "mcp-kubernetes-server"
      ],
      "env": {
        "KUBECONFIG": "<your-kubeconfig-path>"
      }
    }
  }
}

MCP服务器选项

Environment Variables

环境变量:

  • KUBECONFIG:kubeconfig文件的路径,例如。 /home/<username>/.kube/config.
Command line arguments

命令行参数:

usage: main.py [-h] [--disable-kubectl] [--disable-helm] [--disable-write]
               [--disable-delete] [--transport {stdio,sse,streamable-http}]
               [--host HOST] [--port PORT]

MCP Kubernetes Server

options:
  -h, --help            show this help message and exit
  --disable-kubectl     Disable kubectl command execution
  --disable-helm        Disable helm command execution
  --disable-write       Disable write operations
  --disable-delete      Disable delete operations
  --transport {stdio,sse,streamable-http}
                        Transport mechanism to use (stdio or sse or streamable-http)
  --host HOST           Host to use for sse or streamable-http server
  --port PORT           Port to use for sse or streamable-http server

用法

一旦 mcp-kubernetes-server 在您的AI客户端中安装和配置(使用Docker或UVX的“如何安装”部分中提供的JSON片段),您可以通过自然语言开始与Kubernetes集群交互。例如,你可以问:

What is the status of my Kubernetes cluster?

What is wrong with my nginx pod?

验证服务器: 如果您正在运行服务器 stdio 运输(通用 uvx AI客户端通常将启动并管理服务器进程。对于 sse 或 streamable-http 传输时,服务器独立运行。您本可以手动启动它(例如。, uvx mcp-kubernetes-server --transport sse)并且应该在终端中看到输出,指示它正在运行(例如。, INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)).如果AI客户端无法连接,您还可以检查服务器终端中的任何错误消息。

可用工具

mcp kubernetes服务器提供了一套全面的与kubernetes集群交互的工具,按操作类型分类:

Command Tools

命令工具

这些工具提供一般命令执行功能:

工具 说明 参数
kubectl 运行任何kubectl命令并返回输出 command (字符串)
舵 运行任何helm命令并返回输出 command (字符串)
Read Tools

阅读工具

这些工具提供对Kubernetes资源的只读访问:

工具 说明 参数
k8s_get 获取任何Kubernetes对象(或列表)作为JSON字符串 resource (字符串), name (字符串), namespace (字符串)
k8s_describes 显示特定资源或资源组的详细信息 resource_type (字符串), name (字符串,可选), namespace (字符串,可选), selector (字符串,可选), all_namespaces (布尔值,可选)
k8s_logs 打印pod中容器的日志 pod_name (字符串), container (字符串,可选), namespace (字符串,可选), tail (整数,可选), previous (布尔值,可选), since (字符串,可选), timestamps (布尔值,可选), follow (布尔值,可选)
k8s_事件 列出集群中的事件 namespace (字符串,可选), all_namespaces (布尔值,可选), field_selector (字符串,可选), resource_type (字符串,可选), resource_name (字符串,可选), sort_by (字符串,可选), watch (布尔值,可选)
k8s_api 列出Kubernetes集群中的所有可用API 无
k8s_crds 列出Kubernetes集群中的所有自定义资源定义(CRD) 无
k8s_top_nodes 显示节点的资源使用情况(CPU/内存) sort_by (字符串,可选)
k8s_top_pods 显示Pod的资源使用情况(CPU/内存) namespace (字符串,可选), all_namespaces (布尔值,可选), sort_by (字符串,可选), selector (字符串,可选)
k8s_推出状态 获取部署、守护进程启动或状态集的卷展状态 resource_type (字符串), name (字符串), namespace (字符串,可选)
k8s_推出历史 获取部署、守护进程启动或状态集的推出历史记录 resource_type (字符串), name (字符串), namespace (字符串,可选), revision (字符串,可选)
k8s_auth_can_i 检查是否允许某个操作 verb (字符串), resource (字符串), subresource (字符串,可选), namespace (字符串,可选), name (字符串,可选)
k8s_auth_woami 显示您当前身份验证为 none的主题
Write Tools

写入工具

这些工具为Kubernetes资源提供创建、更新或补丁操作:

工具 说明 参数
k8s_create 从YAML/JSON内容创建Kubernetes资源 yaml_content (字符串), namespace (字符串,可选)
k8s_apply 按文件名或stdin将配置应用于资源 yaml_content (字符串), namespace (字符串,可选)
k8s_曝光 将资源作为新的Kubernetes服务公开 resource_type (字符串), name (字符串), port (整数), target_port (整数,可选), namespace (字符串,可选), protocol (字符串,可选), service_name (字符串,可选), labels (对象,可选), selector (字符串,可选), type (字符串,可选)
k8s_run 在pod中创建并运行特定图像 name (字符串), image (字符串), namespace (字符串,可选), command (数组,可选), env (对象,可选), labels (对象,可选), restart (字符串,可选)
k8s_set_resources 设置容器的资源限制和请求 resource_type (字符串), resource_name (字符串), namespace (字符串,可选), containers (数组,可选), limits (对象,可选), requests (对象,可选)
k8s_set_image 设置容器的图像 resource_type (字符串), resource_name (字符串), container (字符串), image (字符串), namespace (字符串,可选)
k8s_set_env 为容器设置环境变量 resource_type (字符串), resource_name (字符串), container (字符串), env_dict (对象), namespace (字符串,可选)
k8s_推出_ ndo 撤消部署、守护进程启动或状态集的卷展栏 resource_type (字符串), name (字符串), namespace (字符串,可选), to_revision (字符串,可选)
k8s_rollout_restart 重新启动部署、守护进程启动或状态集的卷展栏 resource_type (字符串), name (字符串), namespace (字符串,可选)
k8s_推出_使用 暂停部署、守护进程启动或状态集的推出 resource_type (字符串), name (字符串), namespace (字符串,可选)
k8s_推出_总结 恢复部署、守护进程启动或状态集的推出 resource_type (字符串), name (字符串), namespace (字符串,可选)
k8s_刻度 扩展资源 resource_type (字符串), name (字符串), replicas (整数), namespace (字符串,可选)
k8s_自动缩放 自动缩放部署、副本集、有状态集或复制控制器 resource_type (字符串), name (字符串), min (整数), max (整数), namespace (字符串,可选), cpu_percent (整数,可选)
k8s_警戒线 将节点标记为不可调度 node_name (字符串)
k8s_解锁 将节点标记为可调度 node_name (字符串)
k8s_排水管 排空节点,为维护做准备 node_name (字符串), force (布尔值,可选), ignore_daemonsets (布尔值,可选), delete_local_data (布尔值,可选), timeout (整数,可选)
k8s_污染 更新一个或多个节点上的污染 node_name (字符串), key (字符串), value (字符串,可选), effect (字符串)
k8s_取消打印 从节点中删除污点 node_name (字符串), key (字符串), effect (字符串,可选)
k8s_exec_命令 在容器中执行命令 pod_name (字符串), command (字符串), container (字符串,可选), namespace (字符串,可选), stdin (布尔值,可选), tty (布尔值,可选), timeout (整数,可选)
k8s_port_forward 将一个或多个本地端口转发到pod resource_type (字符串), name (字符串), ports (阵列), namespace (字符串,可选), address (字符串,可选)
k8s_cp 在容器之间复制文件和目录 src_path (字符串), dst_path (字符串), container (字符串,可选), namespace (字符串,可选)
k8s_patch 更新资源的字段 resource_type (字符串), name (字符串), patch (对象), namespace (字符串,可选)
k8s_标签 更新资源上的标签 resource_type (字符串), name (字符串), labels (对象), namespace (字符串,可选), overwrite (布尔值,可选)
k8s_注释 更新资源上的注释 resource_type (字符串), name (字符串), annotations (对象), namespace (字符串,可选), overwrite (布尔值,可选)
Delete Tools

删除工具

这些工具为Kubernetes资源提供删除操作:

工具 说明 参数
k8s_delete 按名称、标签选择器或命名空间中的所有资源删除资源 resource_type (字符串), name (字符串,可选), namespace (字符串,可选), label_selector (字符串,可选), all_namespaces (布尔值,可选), force (布尔值,可选), grace_period (整数,可选)

发展

如何在本地运行项目:

uv run -m src.mcp_kubernetes_server.main

如何检查MCP服务器请求和响应:

npx @modelcontextprotocol/inspector uv run -m src.mcp_kubernetes_server.main

故障排除

以下是使用时遇到的一些常见问题及其解决方案 mcp-kubernetes-server:

问题: mcp-kubernetes-server 无法连接到Kubernetes集群或报告身份验证错误。 解决方案:

  • 确保您的 kubeconfig 文件配置正确,并指向预期的集群。
  • 验证您的路径 kubeconfig 文件在中正确指定 mcpServers 配置(对于Docker,确保挂载路径正确;对于 uvx,确保 KUBECONFIG 环境变量设置正确)。
  • 检查您的凭据 kubeconfig 具有在群集上执行操作所需的权限。您可以通过以下方式进行测试 kubectl 直接(例如。, kubectl get pods).

问题: kubectl 或 helm 命令返回错误,如“找不到命令”或被禁用。 解决方案:

  • 如果通过运行 uvx,确保 kubectl 和 helm 已安装在您的系统上,并在PATH中可用。有关安装指南,请参阅“先决条件”部分。
  • 如果您看到“不允许写入操作”或“不允许删除操作”之类的消息,则服务器可能已启动,并带有以下标志 --disable-kubectl, --disable-helm, --disable-write,或 --disable-delete。有关这些标志的详细信息,请查看服务器的启动命令和README中的“MCP服务器选项”部分。

问题: 我如何查看我的AI客户端和 mcp-kubernetes-server? 解决方案:

  • 您可以使用 @modelcontextprotocol/inspector “开发”一节中提到的工具: npx @modelcontextprotocol/inspector uv run -m src.mcp_kubernetes_server.main。这将显示正在交换的MCP消息。

问题: 服务器启动,但AI客户端无法连接。 解决方案:

  • 如果使用 stdio 传输(默认为 uvx 直接执行),确保您的AI客户端已配置为启动 mcp-kubernetes-server 命令正确。
  • 如果使用 sse 或 streamable-http 传输,确保在 mcp-kubernetes-server (例如。, --host 0.0.0.0 --port 8000)可以从您的AI客户端运行的位置访问。检查防火墙规则或网络配置问题。此外,请验证AI客户端是否配置了服务器的正确URL。

贡献

这个项目是开源的,可以在GitHub上找到 feiskyer/mcp kubernetes服务器 并根据 Apache许可证.

如果您想为该项目做出贡献,请遵循以下准则:

  1. 分叉存储库并将其克隆到本地计算机。
  2. 为您的更改创建一个新分支。
  3. 进行更改,并使用描述性提交消息进行提交。
  4. 将您的更改推送到您的分叉存储库。
  5. 打开对主存储库的拉取请求。

许可证

该项目根据Apache License 2.0获得许可。请参阅 许可证 文件以获取更多详细信息。