    
MCP Kubernetes服务器
Kubernetes管理MCP(模型上下文协议)服务器,提供用于获取Kubernetes集群信息、执行操作、监控状态和分析资源的接口。
特性
- 集群信息:获取有关Kubernetes资源(Pod、部署、服务等)的详细信息
- 集群操作:对Kubernetes资源执行操作(创建、更新、删除、缩放等)
- 监控:监控Kubernetes集群和资源的状态
- 分析:分析Kubernetes资源并提供建议
- 鼓励:包括常见Kubernetes分析任务的提示
例子
示例1
示例2
示例3
安装
来源
git clone https://github.com/yourusername/mcp-k8s-server.git
cd mcp-k8s-server
pip install -e .使用pip
pip install mcp-k8s-server用法
直接运行
# Run with default settings
mcp-k8s-server
# Specify transport type
mcp-k8s-server --transport sse
# Specify port for SSE transport
mcp-k8s-server --port 8000
# Specify config file
mcp-k8s-server --config /path/to/config.yaml使用Docker
Dockerfile使用命令和args模式来运行服务器:
CMD ["python", "-m", "mcp_k8s_server.main", \
"--transport", "sse", \
"--port", "8000", \
"--host", "0.0.0.0", \
"--config", "/etc/rancher/rke2/rke2.yaml", \
"--debug"]构建并运行Docker容器:
# Build the Docker image
docker build -t mcp-k8s-server .
# Run the Docker container
docker run -p 8000:8000 -v ~/.kube:/home/mcp/.kube mcp-k8s-server或者,您可以使用提供的脚本:
# Make the script executable
chmod +x docker-run.sh
# Run the script
./docker-run.sh此脚本构建Docker映像,并运行具有必要卷装载的容器。
部署到Kubernetes
# Apply the Kubernetes manifests
kubectl apply -f k8s/部署到Kubernetes时,服务器将自动使用集群内配置。Kubernetes体现在 k8s/ 目录设置为:
- 创建具有适当权限的ServiceAccount
- 装载服务帐户令牌和证书
- 使用命令行参数配置服务器
您可以通过编辑清单来自定义部署:
# k8s/deployment.yaml (example)
apiVersion: apps/v1
kind: Deployment
metadata:
name: mcp-k8s-server
# ...
spec:
# ...
template:
# ...
spec:
serviceAccountName: mcp-k8s-server # Uses the ServiceAccount defined in rbac.yaml
containers:
- name: mcp-k8s-server
# ...
command:
- python
- -m
- mcp_k8s_server.main
args:
- --transport
- sse
- --port
- "8000"
- --host
- "0.0.0.0"
- --config
- "/app/config/config.yaml"
- --debug这种方法使用命令和参数模式来配置服务器,这是Kubernetes中的常见模式。该命令指定要运行的可执行文件,args指定要传递给可执行文件的命令行参数。
这 KUBERNETES_SERVICE_HOST 和 KUBERNETES_SERVICE_PORT Kubernetes在创建pod时会自动设置环境变量,因此您不需要在部署清单中指定它们。
配置
服务器可以使用YAML配置文件、环境变量或命令行参数进行配置。
在集群配置中
在Kubernetes集群内运行时,服务器会自动使用集群内配置。这取决于以下因素:
- 环境变量:
- KUBERNETES_SERVICE_HOST:由Kubernetes设置为Kubernetesneneneba API服务器的IP地址 - KUBERNETES_SERVICE_PORT:由Kubernetes设置到Kubernetesneneneba API服务器的端口
- 服务帐户令牌和证书:
- /var/run/secrets/kubernetes.io/serviceaccount/token:服务帐户令牌 - /var/run/secrets/kubernetes.io/serviceaccount/ca.crt:CA证书
这些是Kubernetes在pod中运行时自动设置的。如果你在Kubernetes集群外运行服务器,但想测试集群内的配置,你需要手动设置这些环境变量并创建令牌和证书文件。
当在集群外运行时,服务器会回退到使用kubeconfig文件。
本地测试集群配置
如果你想在本地(Kubernetes集群外)测试集群内的配置,你可以手动设置所需的环境变量和文件:
- 设置环境变量:
export KUBERNETES_SERVICE_HOST=
export KUBERNETES_SERVICE_PORT=您可以通过运行以下命令来获取这些值:
kubectl cluster-info- 创建服务帐户令牌和证书目录:
mkdir -p /var/run/secrets/kubernetes.io/serviceaccount/- 复制Kubernetes证书并创建令牌:
# Copy the CA certificate
kubectl config view --raw -o jsonpath='{.clusters[0].cluster.certificate-authority-data}' | base64 -d > /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
# Create a token file (you can use a service account token or generate a temporary one)
echo "your-service-account-token" > /var/run/secrets/kubernetes.io/serviceaccount/token请注意,此方法需要root权限才能在中创建文件 /var/run/secrets/。或者,您可以修改代码以使用不同的路径进行测试。
配置文件
# config.yaml
server:
name: mcp-k8s-server
transport: both # stdio, sse, or both
port: 8000
host: 0.0.0.0
kubernetes:
config_path: ~/.kube/config
context: default
namespace: defaultMCP资源
服务器通过模型上下文协议(MCP)提供对Kubernetes资源的访问。资源由以下URI模式标识 k8s:// 协议。
资源URI模式
资源按层次结构组织:
k8s://resources-所有可用Kubernetes资源的列表k8s://namespaces-所有Kubernetes命名空间的列表k8s:///{namespace}-命名空间中所有资源的概述
命名空间资源
k8s://{namespace}/{resource_type}-列出命名空间中特定类型的资源
- 例子: k8s://default/pods -'default'命名空间中的所有Pod
k8s://{namespace}/{resource_type}/{name}-获取特定命名空间资源
- 例子: k8s://default/deployments/nginx -'default'命名空间中的'nginx'部署
支持的资源类型:
podsdeploymentsservicespersistentvolumeclaimsevents
集群范围内的资源
k8s:///{resource_type}-列出特定类型的群集范围的资源
- 例子: k8s:///nodes -群集中的所有节点
k8s:///{resource_type}/{name}-获取特定集群范围的资源
- 例子: k8s:///nodes/worker-1 -“worker-1”节点
支持的资源类型:
nodespersistentvolumesnamespaces
MCP工具
服务器提供以下MCP工具:
资源信息
get_resources:获取特定类型的资源列表get_resource:获取特定资源的详细信息get_resource_status:获取特定资源的状态get_resource_events:获取与特定资源相关的事件get_resource_logs:获取特定资源的日志
资源操作
create_resource:创建新资源update_resource:更新现有资源delete_resource:删除资源scale_deployment:扩展部署restart_deployment:重新启动部署execute_command:在pod中执行命令
监控
get_cluster_status:获取集群的整体状态get_node_status:获取群集节点的状态get_resource_metrics:获取特定资源的指标get_cluster_metrics:获取整个集群的指标check_cluster_health:对集群进行全面的健康检查,并获得详细的摘要
许可证
麻省理工学院
