EKS上的MCP服务器
该项目使用Terraform在Amazon EKS上部署了一个模型上下文协议(MCP)服务器,用于基础设施管理。
建筑
- MCP服务器:基于Python的服务器实现MCP协议
- 容器:MCP服务器的Docker容器
- 库贝内特斯:用于容器编排的EKS集群
- 卡彭特:Kubernetes原生节点自动缩放器,实现高效缩放
- 基础设施:AWS资源管理平台
先决条件
- 配置了适当权限的AWS CLI
- Docker已安装
- 地形>=1.0
- kubectl已安装
- 已创建带有ECR存储库的AWS帐户
快速开始
- 设置环境变量:
export AWS_REGION=us-east-1
export AWS_ACCOUNT_ID=your-account-id
export CLUSTER_NAME=mcp-eks-cluster- 使用Karpenter进行部署(推荐):
# Option 1: Deploy everything at once
./scripts/deploy.sh all
# Option 2: Phase-by-phase deployment
./scripts/deploy.sh infrastructure # Deploy EKS cluster
./scripts/deploy.sh karpenter # Deploy Karpenter autoscaler
./scripts/deploy.sh app # Deploy MCP server- 传统部署(不含Karpenter):
make init
make plan
make apply
make deploy项目结构
├── server-enhanced.py # MCP server with real Kubernetes API integration
├── client-example.py # Example MCP client for testing
├── Dockerfile # Container definition
├── requirements.txt # Python dependencies
├── terraform/ # Infrastructure as code
│ ├── main.tf # Main Terraform configuration with integrated Karpenter
│ ├── variables.tf # Variable definitions
│ ├── outputs.tf # Output definitions
│ └── userdata.sh # EC2 user data script for Karpenter nodes
├── k8s/ # Kubernetes manifests
│ ├── namespace.yaml # Namespace definition
│ ├── deployment.yaml # Application deployment
│ ├── service.yaml # Service definition
│ └── configmap.yaml # Configuration map
├── scripts/ # Deployment scripts
│ ├── deploy.sh # Main deployment script
│ ├── terraform-init.sh # Terraform initialization
│ └── test-deployment.sh # Complete deployment test
├── claude-desktop-config.json # Claude Desktop MCP configuration
├── integrate-with-claude.md # Claude Desktop integration guide
└── Makefile # Build automationMCP服务器功能
服务器(server-simple.py)
- Real Kubernetes API集成:使用适当的RBAC连接到实际的EKS集群
- HTTP REST API:简单的HTTP端点,便于测试和集成
- 端点:
- GET /health -使用Kubernetes API连接状态进行健康检查 - GET /cluster-info -包含命名空间计数的实时群集信息 - GET /nodes -实时节点状态和信息 - GET /pods?namespace= -来自任何命名空间的实时pod信息 - GET /deployments?namespace= -部署状态和副本计数
- 安全:具有最低所需权限的适当RBAC
- 错误处理:优雅的API错误处理和详细的错误响应
- 负载均衡器:通过AWS应用程序负载均衡器进行外部访问
什么是MCP(模型上下文协议)?
主控程序 使像Claude这样的人工智能助手能够连接到外部数据源和工具。除了运行kubectl命令,您还可以询问有关集群的自然语言问题!
魔术: 您的EKS集群↔️ MCP服务器↔️ 克劳德桌面↔️ 自然语言
自然语言示例
而不是像这样的命令 kubectl get nodes你可以问克劳德:
- *“我的集群怎么样了?”* → 获取运行状况、节点和状态
- *“我的MCP服务器Pod是否正在运行?”* → 检查pod运行状况并重新启动
- *“我有什么Karpenter节点?”* → 显示自动缩放节点
- *“显示我的所有命名空间”* → 列出群集命名空间
- *“我的集群有问题吗?”* → 全面健康检查
演示自然语言界面
# See what natural language queries would look like
python3 demo-natural-language.py客户端集成选项
- HTTP REST API:用于测试和集成的直接HTTP访问
- 克劳德桌面:通过MCP桥的自然语言接口(见claude desktop config.json)
- 负载均衡器:通过AWS ELB进行外部访问以供生产使用
部署命令
基于Karpenter的部署(推荐)
# Deploy everything with Karpenter
./scripts/deploy.sh all
# Or deploy in phases for more control
./scripts/deploy.sh infrastructure # Phase 1: EKS cluster with minimal nodes
./scripts/deploy.sh karpenter # Phase 2: Karpenter installation
./scripts/deploy.sh app # Phase 3: MCP server application
# Test deployment
./scripts/test-deployment.sh传统基础设施部署
# Initialize and deploy infrastructure (without Karpenter)
make init plan apply
# Build and deploy application
make deploy
# Complete deployment (infrastructure + app)
make full-deploy局部测试
# Install dependencies
pip install -r requirements.txt
# Test server locally (requires kubectl access to EKS)
python server-enhanced.py
# Run client example
python client-example.pyClaude桌面集成
# Follow the integration guide
cat integrate-with-claude.md
# Copy configuration (macOS example)
cp claude-desktop-config.json ~/Library/Application\ Support/Claude/claude_desktop_config.json配置
环境变量:
AWS_REGION:AWS区域(默认:us-east-1)CLUSTER_NAME:EKS群集名称(默认值:mcp-EKS-cluster)IMAGE_TAG:Docker镜像标签(默认:最新)AWS_ACCOUNT_ID:您的AWS帐户ID
卡彭特配置
Karpenter设置遵循AWS EKS蓝图模式,包括:
- EKS模块集成:使用具有内置Karpenter支持的地形aws模块/eks
- 受管节点组:2个带有karpenter.sh/controller污点的t3.medium节点,用于系统Pod
- Pod标识:使用EKS Pod Identity安全访问AWS API
- 节点池:配置实例类型(t3.中型/大型/xlarge)和容量类型(现货/按需)
- EC2节点类:使用发现标签定义AMI系列(AL2023)、安全组和子网
- 自动缩放:节点根据pod调度要求进行扩展,整合时间为30秒
- 成本优化:更喜欢定点实例并整合未充分利用的节点
当前状态✅
- 卡彭特:成功部署和配置节点(AL2023 AMI)
- MCP服务器:运行在Karpenter-托管节点上的HTTP REST API
- 负载均衡器:外部访问已配置并正常工作
- RBAC:Kubernetes API访问的正确权限
监控
访问您的MCP服务器:
kubectl get service mcp-server-service -n mcp-server查看日志:
kubectl logs -f deployment/mcp-server -n mcp-server使用示例
HTTP REST API
通过HTTP端点直接访问服务器:
# Get LoadBalancer URL
LB_URL=$(kubectl get service mcp-server-service -n mcp-server -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')
# Health check
curl http://$LB_URL/health
# Cluster information
curl http://$LB_URL/cluster-info
# Node information
curl http://$LB_URL/nodes
# Pod information
curl http://$LB_URL/pods?namespace=mcp-server
# Deployment information
curl http://$LB_URL/deployments?namespace=default局部测试
# Port forward for local access
kubectl port-forward -n mcp-server service/mcp-server-service 8080:80
# Test endpoints
curl http://localhost:8080/health
curl http://localhost:8080/cluster-info测试
快速测试
运行综合测试套件:
./test-all.sh手动测试
# Get LoadBalancer URL
LB_URL=$(kubectl get service mcp-server-service -n mcp-server -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')
# Test all endpoints
curl http://$LB_URL/health
curl http://$LB_URL/cluster-info
curl http://$LB_URL/nodes
curl http://$LB_URL/pods?namespace=mcp-server
curl http://$LB_URL/deployments?namespace=default测试卡彭特自动缩放
# Apply test workload to trigger node provisioning
kubectl apply -f test-karpenter.yaml
# Watch Karpenter create new nodes
kubectl get nodeclaim -w
# Scale up to test more provisioning
kubectl scale deployment test-workload --replicas=8
# Check new nodes
kubectl get nodes -l karpenter.sh/nodepool
# Clean up
kubectl delete -f test-karpenter.yaml监视器Karpenter
# Check Karpenter status
kubectl get nodepool,ec2nodeclass -o wide
# Watch Karpenter logs
kubectl logs -f -n karpenter -l app.kubernetes.io/name=karpenter
# Check node provisioning
kubectl get nodeclaim故障排除
常见问题
- 导入错误:安装依赖项
pip install -r requirements.txt - Kubernetes API访问:确保
kubectl已配置并正在工作 - ECR权限:验证AWS凭据是否具有ECR访问权限
- Claude桌面连接:检查配置文件路径和格式
日志和调试
# Check pod logs
kubectl logs -f deployment/mcp-server -n mcp-server
# Test Kubernetes connectivity
kubectl get nodes
# Verify ECR repository
aws ecr describe-repositories --repository-names mcp-server清理
Karpenter部署清理
# Remove in reverse order
kubectl delete -f k8s/
cd terraform && terraform destroy -auto-approve遗留部署清理
make destroy
