Kubernetes集群诊断服务器

一个基于Python的Kubernetes集群只读诊断服务器,通过Model Context Protocol (MCP)提供全面的API来检索集群信息并诊断问题。

  • by vlttnv
  • Python
  • 本地部署
  • 7 星标
  • 更新于
在 GitHub 查看 vlttnv/k8s-mcp

使用说明

k8s mcp

基于Python的只读 模型上下文协议(MCP) 用于Kubernetes集群的服务器,它公开了一个全面的API来检索集群信息和诊断问题。

使用Claude聊天示例

安装

先决条件

  • Python 3.8+
  • 访问Kubernetes集群(通过kubeconfig或集群内配置)
  • 所需的Python包(请参阅 dependencies 在……里面 pyproject.toml)
  • 紫外线https://github.com/astral-sh/uv
# To install uv
curl -LsSf https://astral.sh/uv/install.sh | sh
# Clone the repository
git clone git@github.com:vlttnv/k8s-mcp.git
cd k8s-mcp

# Install dependencies
uv venv
source .venv/bin/activate
uv sync

如果使用Claude configure,请在文本编辑器中打开位于~/Library/ApplicationSupport/Claude/Claude_Desktop_config.json的Claude for Desktop App配置。如果文件不存在,请确保创建该文件。

code ~/Library/Application\ Support/Claude/claude_desktop_config.json
{
    "mcpServers": {
        "k8s-mcp": {
            "command": "uv",
            "args": [
                "--directory",
                "/ABSOLUTE/PATH/TO/PARENT/FOLDER/k8s-mcp",
                "run",
                "server.py"
            ]
        }
    }
}

您可能需要在命令字段中输入uv可执行文件的完整路径。您可以通过在MacOS/Linux上运行which uv或在Windows上运行where uv来获得此信息。

配置

应用程序会自动尝试两种方法连接到Kubernetes集群:

  1. Kubeconfig文件:使用本地kubeconfig文件(通常位于 ~/.kube/config)
  2. 在集群配置中:如果在Kubernetes pod内运行,则使用服务帐户令牌

如果你的kubeconfig设置正确,或者你在具有适当RBAC权限的集群内运行,则不需要额外的配置。

用法

例子

以下是一些有用的示例提示,您可以向Claude询问您的Kubernetes集群及其资源:

一般群集状态

  • “我的集群的整体健康状况如何?”
  • “显示集群中的所有命名空间”
  • “我的集群中有哪些节点可用,它们的状态是什么?”
  • “我的节点上的资源利用率如何?”

Pod和部署

  • “列出生产命名空间中的所有Pod”
  • “是否有处于CrashLoopBackOff状态的Pod?”
  • “显示重启次数高的Pod”
  • “列出所有命名空间中的所有部署”
  • “哪些部署未能取得进展?”

调试问题

  • “为什么我的临时命名空间中的pod失败了?”
  • “获取生产命名空间中服务的YAML配置”
  • “显示默认命名空间中的最近事件”
  • “是否有任何吊舱卡在待定状态?”
  • “是什么导致我的集群中出现ImagePullBackOff错误?”

资源管理

  • “显示集群中节点的资源消耗”
  • “有没有我应该清理的孤儿资源?”
  • “列出生产命名空间中的所有服务”
  • “比较临时和生产之间的资源请求”

特定资源检查

  • “显示kube系统中coredns部署的配置”
  • “在暂存中获取反向代理服务的详细信息”
  • “吊舱xyz中运行着哪些容器?”
  • “给我看看故障吊舱的日志”

api参考

命名空间

  • get_namespaces():列出群集中所有可用的命名空间

容器组

  • list_pods(namespace=None):列出所有Pod,可选择按命名空间过滤
  • failed_pods():列出所有处于失败或错误状态的Pod
  • pending_pods():列出所有处于挂起状态的Pod及其原因
  • high_restart_pods(restart_threshold=5):查找重启次数高于阈值的Pod

节点

  • list_nodes():列出所有节点及其状态
  • node_capacity():显示所有节点上的可用容量

部署和服务

  • list_deployments(namespace=None):列出所有部署
  • list_services(namespace=None):列出所有服务
  • list_events(namespace=None):列出所有事件

资源管理

  • orphaned_resources():列出没有所有者引用的资源
  • get_resource_yaml(namespace, resource_type, resource_name):获取特定资源的YAML配置

许可证

MIT许可证

贡献

欢迎投稿!请随时提交拉取请求。