k8s部署
将RAG管道和MCP服务器部署到Kubernetes——相同的Helm charts在本地运行,在EKS上运行。
这有什么作用
向Kubernetes部署两个服务:
- 抹布管道 --通过RAG(pgvector+LlamaIndex+Voyage AI嵌入)查询EPA水处理法规的FastAPI服务。带有HPA、Ingress、ConfigMap/Secret分离和可选pgvector StatefulSet的全控图。
- mcp装置 --用于单位转换的MCP服务器。简单部署+服务。
两者都在EKS上本地运行,也在生产环境中运行——具有不同值的相同Helm图表覆盖处理环境提升。Terraform提供AWS基础设施。GitHub Actions处理CI(lint+kind集成测试)和CD(手动部署到EKS)。
建筑
graph TB
subgraph EKS Cluster
ingress[Ingress] --> rag_svc[rag-pipeline Service]
ingress --> mcp_svc[mcp-units Service]
rag_svc --> rag1[rag-pipeline Pod]
rag_svc --> rag2[rag-pipeline Pod]
rag_svc --> ragN[rag-pipeline Pod ...]
mcp_svc --> mcp1[mcp-units Pod]
hpa[HPA] -.->|scales| rag_svc
end
rag1 --> neon[(Neon pgvector)]
rag1 --> voyage[Voyage AI API]
rag1 --> anthropic[Anthropic API]演示
这两项服务都在EKS上运行,并具有HPA自动缩放功能:
RAG查询回答EPA水处理问题(EKS吊舱→ 航程人工智能→ 氖pgvector→ 克劳德):
Neon管理的pgvector中有942个索引文档块:
Locust负载测试期间HPA缩放副本:
MCP单元服务器通过ngrok隧道从Claude Desktop访问:
https://github.com/user-attachments/assets/179e4e38-c2a1-46e4-a73a-d8c7067eb21f
运作原理
Helm charts使用值覆盖模式进行环境升级:
values.yaml--默认值values-local.yaml--kind:内部pgvector StatefulSet,nginx入口,较小的资源values-eks.yaml--EKS:外部霓虹DB、ALB入口、生产资源
这 database.mode 切换(internal 对比 external)控制pgvector是在集群内作为StatefulSet运行,还是连接到集群外的托管数据库。
快速启动
当地(种类)
需要:Docker、kind、kubectl、helm
# One-command setup: creates cluster, installs ingress + metrics-server,
# builds images, deploys both charts
export VOYAGE_API_KEY=your-key
export ANTHROPIC_API_KEY=your-key
bash kind/setup.sh
# Verify
kubectl get pods
curl http://localhost/healthAWS(EKS)
需要:AWS CLI、terraform、kubectl、helm
警告:这会产生成本高昂的AWS资源(约5-7美元/天)。完成后记得销毁。
# Provision infrastructure
cd terraform
cp terraform.tfvars.example terraform.tfvars # edit as needed
terraform init && terraform apply
# Configure kubectl
$(terraform output -raw configure_kubectl)
# Build and push images to ECR
RAG_ECR=$(terraform output -raw ecr_rag_pipeline_url)
MCP_ECR=$(terraform output -raw ecr_mcp_units_url)
aws ecr get-login-password | docker login --username AWS --password-stdin "${RAG_ECR%/*}"
docker build -t "$RAG_ECR:latest" /path/to/rag-pipeline
docker push "$RAG_ECR:latest"
docker build -t "$MCP_ECR:latest" /path/to/mcp-units
docker push "$MCP_ECR:latest"
# Deploy both services
cd ..
helm install rag charts/rag-pipeline \
-f charts/rag-pipeline/values-eks.yaml \
--set image.repository="$RAG_ECR" \
--set database.host="$NEON_HOST" \
--set secrets.POSTGRES_PASSWORD="$NEON_PASSWORD" \
--set secrets.VOYAGE_API_KEY="$VOYAGE_API_KEY" \
--set secrets.ANTHROPIC_API_KEY="$ANTHROPIC_API_KEY"
helm install mcp charts/mcp-units \
--set image.repository="$MCP_ECR"
# Tear down when done
cd terraform && terraform destroy项目结构
k8s-deploy/
├── charts/
│ ├── rag-pipeline/ Helm chart (Deployment, Service, Ingress,
│ │ ├── templates/ HPA, ConfigMap, Secret, StatefulSet)
│ │ ├── values.yaml
│ │ ├── values-local.yaml
│ │ └── values-eks.yaml
│ └── mcp-units/ Simple Deployment + Service chart
├── kind/
│ ├── cluster.yaml 3-node cluster config
│ └── setup.sh One-command local setup
├── terraform/ EKS + VPC + ECR (terraform-aws-modules)
├── load-test/ Locust load tests for HPA measurement
└── .github/workflows/
├── ci.yaml Lint + kind integration test on PR
└── deploy.yaml Manual deploy to EKS下一步行动
- 服务网格 (Linkerd)——服务之间的mTLS、流量分割、每条路由的可观察性
- GitOps (ArgoCD)--来自git的声明性部署,自动漂移检测和协调
- 外部秘密操作员 -从AWS Secrets Manager中提取API密钥,而不是Helm
--set - 网络策略 (Cilium)-将pod到pod的流量限制在所需的范围内
- 可观测性堆栈 (Prometheus+Grafana)——集群和应用程序指标、仪表板、警报
- 渐进式交付 (Argo推出)-具有自动回滚功能的金丝雀部署
贡献
PR欢迎。跑 pre-commit install 克隆后,确保 helm lint charts/* 提交前通过。
许可证
麻省理工学院
