GitOps MCP-Kubernetes部署
备注:这个项目是用 光标 以及Composer模型,展示了Kubernetes基础设施作为代码的人工智能辅助开发。
此存储库包含专用于HTTP MCP服务器的Kubernetes部署清单 mcp-servers 命名空间。
存储库结构
gitops-mcp/
├── namespace.yaml # MCP servers namespace
├── kustomization.yaml # Kustomize configuration
├── README.md # This file
├── .cursorrules # Cursor IDE instructions
├── .gitignore # Git ignore rules
├── docs/ # Documentation
│ ├── MCP_SERVERS_REVIEW.md # Server review and details
│ └── STRUCTURE.md # Repository structure guide
└── mcp-servers/ # MCP server deployments
├── proxmox-ve-mcp/
│ ├── deployment.yaml
│ ├── service.yaml
│ ├── configmap.yaml
│ └── secret.yaml.example
├── unifi-network-mcp/
│ ├── deployment.yaml
│ ├── service.yaml
│ ├── configmap.yaml
│ └── secret.yaml.example
├── unifi-protect-mcp/
│ ├── deployment.yaml
│ ├── service.yaml
│ ├── configmap.yaml
│ └── secret.yaml.example
└── high-command-mcp/
├── deployment.yaml
├── service.yaml
├── configmap.yaml
└── secret.yaml.exampleMCP服务器
已配置以下HTTP MCP服务器:
- proxmox ve mcp -Proxmox VE管理MCP服务器
- unifi网络mcp -UniFi网络管理MCP服务器
- unifi保护mcp -UniFi Protect管理MCP服务器
- 高级命令mcp -高级命令MCP服务器
有关每台服务器的详细信息,请参阅 docs/MCP_SERVERS_REVIEW.md.
先决条件
- Kubernetes集群访问
kubectl配置- 港口登记处提供的集装箱图像:
- harbor.dataknife.net/library/proxmox-ve-mcp:latest - harbor.dataknife.net/library/unifi-network-mcp:latest - harbor.dataknife.net/library/unifi-protect-mcp:latest - harbor.dataknife.net/library/high-command-mcp:latest
- 具有拉取访问权限的港口注册表凭据
快速开始
使用Kustomize(推荐)
- 创建港口注册密码 (拉取图像时需要):
# Create the Harbor registry secret in the mcp-servers namespace
kubectl create secret docker-registry harbor-registry-secret \
--docker-server=harbor.dataknife.net \
--docker-username= \
--docker-password= \
--docker-email= \
--namespace=mcp-servers
# Verify the secret was created
kubectl get secret harbor-registry-secret -n mcp-servers替代:使用示例模板并手动应用:
# Edit mcp-servers/harbor-registry-secret.yaml.example with your credentials
# Then apply it
kubectl apply -f mcp-servers/harbor-registry-secret.yaml- 创建应用程序机密 (一次性设置):
# Copy example secrets and fill in your values
cp mcp-servers/proxmox-ve-mcp/secret.yaml.example mcp-servers/proxmox-ve-mcp/secret.yaml
cp mcp-servers/unifi-network-mcp/secret.yaml.example mcp-servers/unifi-network-mcp/secret.yaml
cp mcp-servers/unifi-protect-mcp/secret.yaml.example mcp-servers/unifi-protect-mcp/secret.yaml
# Edit each secret.yaml file with your actual credentials
# DO NOT commit these files to git!- 更新kustomization.yaml 包括秘密:
resources:
# ... existing resources ...
- mcp-servers/proxmox-ve-mcp/secret.yaml
- mcp-servers/unifi-network-mcp/secret.yaml
- mcp-servers/unifi-protect-mcp/secret.yaml- 部署一切:
kubectl apply -k .使用单个文件
- 创建命名空间:
kubectl apply -f namespace.yaml- 创建港口注册密码 (拉取图像时需要):
kubectl create secret docker-registry harbor-registry-secret \
--docker-server=harbor.dataknife.net \
--docker-username= \
--docker-password= \
--docker-email= \
--namespace=mcp-servers- 部署每个MCP服务器:
# Proxmox VE MCP
kubectl apply -f mcp-servers/proxmox-ve-mcp/configmap.yaml
kubectl apply -f mcp-servers/proxmox-ve-mcp/secret.yaml # After creating from example
kubectl apply -f mcp-servers/proxmox-ve-mcp/deployment.yaml
kubectl apply -f mcp-servers/proxmox-ve-mcp/service.yaml
# Repeat for other MCP servers...配置
命名空间
所有资源都部署到 mcp-servers 命名空间,它是自动创建的。
港口注册认证
所有部署都配置为使用Harbor注册表(harbor.dataknife.net)并且需要认证才能提取图像。这 harbor-registry-secret 必须在 mcp-servers 在部署之前使用命名空间。
创建港口注册密码:
kubectl create secret docker-registry harbor-registry-secret \
--docker-server=harbor.dataknife.net \
--docker-username= \
--docker-password= \
--docker-email= \
--namespace=mcp-servers备注:如果使用Harbor机器人帐户(建议用于CI/CD),请使用机器人帐户用户名和令牌。机器人帐户格式: robot$library+botname.
使用GitHub CLI和操作:
- 使用GitHub CLI设置机密:
# Use the interactive setup script
./scripts/setup-harbor-secrets.sh
# Or manually set secrets
echo "robot\$library+ci-bot" | gh secret set HARBOR_USERNAME
echo "your-token" | gh secret set HARBOR_PASSWORD- 通过GitHub操作进行部署:运行工作流
.github/workflows/deploy-harbor-secret.yml它将自动提取secrets并创建Kubernetes secret。
所有部署包括 imagePullSecrets 引用这个秘密。
环境变量
所有服务器都使用HTTP传输模式,并具有以下常见设置:
MCP_TRANSPORT=httpMCP_HTTP_ADDR=:8000LOG_LEVEL(来自ConfigMap,默认值:“info”)
服务器特定配置
Proxmox VE MCP
- 康福特地图:
proxmox-ve-mcp-config
- LOG_LEVEL (默认值:“info”) - PROXMOX_SKIP_SSL_VERIFY (默认值:“false”)
- 秘密:
proxmox-ve-mcp-secrets
- PROXMOX_BASE_URL -Proxmox服务器URL - PROXMOX_API_USER -API用户 - PROXMOX_API_TOKEN_ID -API令牌ID - PROXMOX_API_TOKEN_SECRET -API令牌机密
UniFi网络MCP
- 康福特地图:
unifi-network-mcp-config
- LOG_LEVEL (默认值:“info”) - UNIFI_BASE_URL (默认值:“https://192.168.1.1") - UNIFI_SKIP_SSL_VERIFY (默认值:“false”)
- 秘密:
unifi-network-mcp-secrets
- UNIFI_API_KEY -API密钥
UniFi保护MCP
- 康福特地图:
unifi-protect-mcp-config
- LOG_LEVEL (默认值:“info”) - UNIFI_BASE_URL (默认值:“https://192.168.1.1") - UNIFI_SKIP_SSL_VERIFY (默认值:“false”)
- 秘密:
unifi-protect-mcp-secrets
- UNIFI_API_KEY -API密钥
UniFi管理器MCP
高级命令MCP
- 康福特地图:
high-command-mcp-config
- LOG_LEVEL (默认值:“info”) - MCP_WORKERS (默认值:“4”) - X_SUPER_CLIENT (默认:“hc.mcp服务器.cluster”) - X_SUPER_CONTACT (默认值:“ops@example.com")
健康检查
所有部署包括:
- 存活探针:HTTP获取
/health每30秒 - 就绪探针:HTTP获取
/health每10秒
资源限制
每个吊舱都有:
- 请求::100米CPU,128米内存
- 限制:500米CPU,512米内存
安全
所有部署都使用:
- 非root用户(UID 1000)
- 只读根文件系统
- 能力下降
- 无特权升级
- 用于隔离的专用命名空间
高可用性
- 每个部署2个副本
- Pod反亲和性,在节点间传播Pod
- 自动恢复的健康检查
服务端点
所有服务都在8000端口上公开 mcp-servers 命名空间:
proxmox-ve-mcp.mcp-servers.svc.cluster.local:8000unifi-network-mcp.mcp-servers.svc.cluster.local:8000unifi-protect-mcp.mcp-servers.svc.cluster.local:8000high-command-mcp.mcp-servers.svc.cluster.local:8000
监控
检查部署状态:
# All MCP servers
kubectl get deployments -n mcp-servers
kubectl get pods -n mcp-servers -l component=mcp-server
kubectl get services -n mcp-servers -l component=mcp-server
# Specific server
kubectl get pods -n mcp-servers -l app=proxmox-ve-mcp故障排除
查看日志:
# All pods in namespace
kubectl logs -n mcp-servers -l component=mcp-server
# Specific server
kubectl logs -n mcp-servers -l app=proxmox-ve-mcp
# Specific pod
kubectl logs -n mcp-servers
描述资源:
kubectl describe pod -n mcp-servers
kubectl describe deployment -n mcp-servers proxmox-ve-mcp检查事件:
kubectl get events -n mcp-servers --sort-by='.lastTimestamp'GitOps
此存储库专为GitOps工作流而设计。更新清单并通过GitOps工具(ArgoCD、Flux、Fleet等)应用更改。
车队兼容性
备注:The kustomization.yaml 文件已重命名为 .kustomization.yaml 以防止Rancher Fleet自动检测到它并试图使用Kustomize后渲染,这导致了部署失败。
Fleet将直接处理所有Kubernetes YAML清单,这是因为:
- 所有清单都已指定命名空间和标签
- 单个资源文件是自包含且有效的
- Fleet可以直接应用Kubernetes清单,无需Kustomize
对于本地Kustomize用法,请临时重命名文件:
mv .kustomization.yaml kustomization.yaml
kubectl kustomize .
mv kustomization.yaml .kustomization.yaml重要:从不承诺 secret.yaml 将文件保存到存储库。使用以下机密管理解决方案:
- 密封的秘密
- 外部秘密操作员
- 金库
- GitOps工具的秘密管理
文档
文件组织
每个MCP服务器都有自己的目录,其中包含:
deployment.yaml-部署清单service.yaml-服务清单configmap.yaml-非敏感配置secret.yaml.example-机密模板(复制到secret.yaml并填写)
该组织使以下操作变得容易:
- 独立管理各个服务器
- 将更改应用于特定服务器
- 一目了然地了解结构
- 扩展到其他MCP服务器
有关更多详细信息,请参阅 docs/STRUCTURE.md.
发展
该项目使用Cursor IDE和Composer模型进行人工智能辅助开发。看 .cursorrules 针对特定项目的编码指南和模式。
