Files
taiji-AI-PAD/services/mcp-server/DEPLOY_AZURE.md
T
2025-12-25 07:56:49 +00:00

7.6 KiB
Raw Blame History

MCP Server - Azure AKS 部署指南

本文档说明如何将Taiji AI PAD的MCP Server部署到Azure Kubernetes Service (AKS)。

前置条件

  1. Azure CLI - 安装指南
  2. kubectl - 安装指南
  3. Docker - 用于构建镜像
  4. Azure订阅 - 具有足够权限创建资源

架构概览

Internet
   ↓
Application Gateway (Ingress)
   ↓
AKS Cluster
   ├── MCP Server (Deployment, 3-10 replicas)
   ├── Redis Cache (Azure Cache for Redis)
   └── PostgreSQL (Azure Database for PostgreSQL)

快速部署

1. 设置环境变量

export RESOURCE_GROUP="taiji-ai-rg"
export AKS_CLUSTER_NAME="taiji-aks-cluster"
export ACR_NAME="taijiregistry"
export LOCATION="southeastasia"
export SUBSCRIPTION_ID="your-subscription-id"

2. 登录Azure

az login
az account set --subscription $SUBSCRIPTION_ID

3. 创建AKS集群(如果还没有)

# 创建资源组
az group create --name $RESOURCE_GROUP --location $LOCATION

# 创建AKS集群
az aks create \
  --resource-group $RESOURCE_GROUP \
  --name $AKS_CLUSTER_NAME \
  --node-count 3 \
  --node-vm-size Standard_D4s_v3 \
  --enable-cluster-autoscaler \
  --min-count 3 \
  --max-count 10 \
  --network-plugin azure \
  --enable-managed-identity \
  --generate-ssh-keys

4. 配置数据库

Azure Database for PostgreSQL

# 创建PostgreSQL服务器
az postgres flexible-server create \
  --resource-group $RESOURCE_GROUP \
  --name taijipda \
  --location $LOCATION \
  --admin-user taiji \
  --admin-password 'By@123456.' \
  --sku-name Standard_D4s_v3 \
  --tier GeneralPurpose \
  --storage-size 128 \
  --version 14

# 配置防火墙规则(允许Azure服务访问)
az postgres flexible-server firewall-rule create \
  --resource-group $RESOURCE_GROUP \
  --name taijipda \
  --rule-name AllowAzureServices \
  --start-ip-address 0.0.0.0 \
  --end-ip-address 0.0.0.0

Azure Cache for Redis

# 创建Redis缓存
az redis create \
  --resource-group $RESOURCE_GROUP \
  --name taiji \
  --location $LOCATION \
  --sku Standard \
  --vm-size c1 \
  --enable-non-ssl-port false

5. 配置Secrets

编辑 k8s/secrets.yaml 文件,填入实际的连接字符串和密钥:

stringData:
  database-url: "postgresql+asyncpg://taiji:By%40123456.@taijipda.postgres.database.azure.com:5432/postgres?sslmode=require"
  redis-url: "rediss://:YOUR_REDIS_PASSWORD@taiji.southeastasia.redis.azure.net:10000/0?ssl_cert_reqs=none"
  jwt-secret: "YOUR_STRONG_SECRET_KEY"
  encryption-key: "YOUR_ENCRYPTION_KEY"

6. 运行部署脚本

cd services/mcp-server
chmod +x scripts/deploy-azure.sh
./scripts/deploy-azure.sh

手动部署步骤

如果您希望手动控制每一步部署:

1. 构建并推送镜像

# 登录ACR
az acr login --name $ACR_NAME

# 构建镜像
docker build -t ${ACR_NAME}.azurecr.io/mcp-server:latest .

# 推送镜像
docker push ${ACR_NAME}.azurecr.io/mcp-server:latest

2. 配置kubectl

az aks get-credentials \
  --resource-group $RESOURCE_GROUP \
  --name $AKS_CLUSTER_NAME

3. 创建命名空间

kubectl create namespace taiji-ai

4. 部署Secrets

kubectl apply -f k8s/secrets.yaml

5. 部署应用

kubectl apply -f k8s/deployment.yaml
kubectl apply -f k8s/ingress.yaml

6. 验证部署

# 查看Pod状态
kubectl get pods -n taiji-ai

# 查看服务
kubectl get svc -n taiji-ai

# 查看Ingress
kubectl get ingress -n taiji-ai

# 查看日志
kubectl logs -f -l app=mcp-server -n taiji-ai

配置Application Gateway Ingress Controller

安装AGIC

# 添加Helm仓库
helm repo add application-gateway-kubernetes-ingress https://appgwingress.blob.core.windows.net/ingress-azure-helm-package/
helm repo update

# 安装AGIC
helm install ingress-azure \
  application-gateway-kubernetes-ingress/ingress-azure \
  --namespace taiji-ai \
  --set appgw.subscriptionId=$SUBSCRIPTION_ID \
  --set appgw.resourceGroup=$RESOURCE_GROUP \
  --set appgw.name=taiji-appgw \
  --set appgw.shared=false \
  --set armAuth.type=servicePrincipal \
  --set armAuth.secretJSON=$(cat sp-credentials.json | base64 -w0)

SSL/TLS证书配置

使用cert-manager自动管理证书

# 安装cert-manager
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.13.0/cert-manager.yaml

# 创建Let's Encrypt Issuer
cat <<EOF | kubectl apply -f -
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: letsencrypt-prod
spec:
  acme:
    server: https://acme-v02.api.letsencrypt.org/directory
    email: admin@taiji-ai.com
    privateKeySecretRef:
      name: letsencrypt-prod
    solvers:
    - http01:
        ingress:
          class: azure/application-gateway
EOF

监控和日志

查看实时日志

# 查看所有Pod日志
kubectl logs -f -l app=mcp-server -n taiji-ai

# 查看特定Pod日志
kubectl logs -f <pod-name> -n taiji-ai

查看资源使用情况

# 查看Pod资源使用
kubectl top pods -n taiji-ai

# 查看节点资源使用
kubectl top nodes

Azure Monitor集成

# 启用AKS监控
az aks enable-addons \
  --resource-group $RESOURCE_GROUP \
  --name $AKS_CLUSTER_NAME \
  --addons monitoring

扩容和更新

手动扩容

# 扩容到5个副本
kubectl scale deployment mcp-server --replicas=5 -n taiji-ai

自动扩容

HPA(HorizontalPodAutoscaler)已在 deployment.yaml 中配置:

  • 最小副本数:3
  • 最大副本数:10
  • CPU使用率阈值:70%
  • 内存使用率阈值:80%

滚动更新

# 更新镜像
kubectl set image deployment/mcp-server \
  mcp-server=${ACR_NAME}.azurecr.io/mcp-server:v2 \
  -n taiji-ai

# 查看更新状态
kubectl rollout status deployment/mcp-server -n taiji-ai

# 回滚到上一个版本
kubectl rollout undo deployment/mcp-server -n taiji-ai

故障排查

Pod无法启动

# 查看Pod详情
kubectl describe pod <pod-name> -n taiji-ai

# 查看事件
kubectl get events -n taiji-ai --sort-by='.lastTimestamp'

数据库连接问题

# 测试数据库连接
kubectl run -it --rm debug --image=postgres:14 --restart=Never -- \
  psql "postgresql://taiji:PASSWORD@taijipda.postgres.database.azure.com:5432/postgres?sslmode=require"

查看Secret配置

# 查看Secret(base64编码)
kubectl get secret taiji-secrets -n taiji-ai -o yaml

# 解码查看内容(谨慎操作)
kubectl get secret taiji-secrets -n taiji-ai -o jsonpath='{.data.database-url}' | base64 -d

清理资源

# 删除应用
kubectl delete namespace taiji-ai

# 删除AKS集群
az aks delete --resource-group $RESOURCE_GROUP --name $AKS_CLUSTER_NAME --yes

# 删除整个资源组(谨慎操作)
az group delete --name $RESOURCE_GROUP --yes

安全最佳实践

  1. 使用Azure Key Vault - 将敏感信息存储在Key Vault中
  2. 启用RBAC - 配置适当的角色和权限
  3. 网络策略 - 限制Pod之间的网络通信
  4. 定期更新 - 保持AKS和容器镜像更新
  5. 备份 - 定期备份数据库和配置

成本优化

  1. 使用Spot实例 - 用于非关键工作负载
  2. 配置自动扩缩容 - 根据负载动态调整资源
  3. 使用预留实例 - 长期运行的服务可节省成本
  4. 监控资源使用 - 及时发现和优化资源浪费

支持

如有问题,请联系:

许可证

Copyright © 2025 Taiji AI. All rights reserved.