Files
taiji-AI-PAD/services/mcp-server/scripts/deploy-azure.sh
T
2025-12-25 07:56:49 +00:00

148 lines
4.7 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
# Azure AKS部署脚本
set -e
# 颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
echo -e "${GREEN}========================================${NC}"
echo -e "${GREEN} Taiji AI PAD - Azure AKS部署脚本 ${NC}"
echo -e "${GREEN}========================================${NC}"
# 配置变量(从环境变量读取或使用默认值)
RESOURCE_GROUP=${RESOURCE_GROUP:-"taiji-ai-rg"}
AKS_CLUSTER_NAME=${AKS_CLUSTER_NAME:-"taiji-aks-cluster"}
ACR_NAME=${ACR_NAME:-"taijiregistry"}
LOCATION=${LOCATION:-"southeastasia"}
NAMESPACE=${NAMESPACE:-"taiji-ai"}
# 检查Azure CLI
if ! command -v az &> /dev/null; then
echo -e "${RED}错误:未安装Azure CLI${NC}"
echo "请访问 https://docs.microsoft.com/cli/azure/install-azure-cli 安装"
exit 1
fi
# 检查kubectl
if ! command -v kubectl &> /dev/null; then
echo -e "${RED}错误:未安装kubectl${NC}"
echo "请访问 https://kubernetes.io/docs/tasks/tools/ 安装"
exit 1
fi
echo -e "${YELLOW}正在登录Azure...${NC}"
az login
echo -e "${YELLOW}设置订阅...${NC}"
# 如果有多个订阅,请设置SUBSCRIPTION_ID环境变量
if [ ! -z "$SUBSCRIPTION_ID" ]; then
az account set --subscription $SUBSCRIPTION_ID
fi
echo -e "${YELLOW}当前使用的订阅:${NC}"
az account show --output table
# 1. 创建资源组(如果不存在)
echo -e "${GREEN}[1/8] 检查资源组...${NC}"
if ! az group show --name $RESOURCE_GROUP &> /dev/null; then
echo -e "${YELLOW}创建资源组 $RESOURCE_GROUP...${NC}"
az group create --name $RESOURCE_GROUP --location $LOCATION
else
echo -e "${GREEN}资源组已存在${NC}"
fi
# 2. 创建ACR(如果不存在)
echo -e "${GREEN}[2/8] 检查容器注册表...${NC}"
if ! az acr show --name $ACR_NAME --resource-group $RESOURCE_GROUP &> /dev/null; then
echo -e "${YELLOW}创建ACR $ACR_NAME...${NC}"
az acr create --resource-group $RESOURCE_GROUP \
--name $ACR_NAME \
--sku Standard \
--location $LOCATION
else
echo -e "${GREEN}ACR已存在${NC}"
fi
# 3. 获取AKS凭据
echo -e "${GREEN}[3/8] 连接到AKS集群...${NC}"
if az aks show --name $AKS_CLUSTER_NAME --resource-group $RESOURCE_GROUP &> /dev/null; then
az aks get-credentials --resource-group $RESOURCE_GROUP \
--name $AKS_CLUSTER_NAME \
--overwrite-existing
else
echo -e "${RED}错误:AKS集群 $AKS_CLUSTER_NAME 不存在${NC}"
echo -e "${YELLOW}请先创建AKS集群或检查集群名称${NC}"
exit 1
fi
# 4. 创建命名空间
echo -e "${GREEN}[4/8] 创建命名空间...${NC}"
kubectl create namespace $NAMESPACE --dry-run=client -o yaml | kubectl apply -f -
# 5. 配置ACR集成
echo -e "${GREEN}[5/8] 配置ACR集成...${NC}"
ACR_ID=$(az acr show --name $ACR_NAME --resource-group $RESOURCE_GROUP --query "id" -o tsv)
az aks update --name $AKS_CLUSTER_NAME \
--resource-group $RESOURCE_GROUP \
--attach-acr $ACR_NAME || true
# 6. 构建并推送Docker镜像
echo -e "${GREEN}[6/8] 构建并推送Docker镜像...${NC}"
cd ../../
ACR_LOGIN_SERVER="${ACR_NAME}.azurecr.io"
az acr login --name $ACR_NAME
echo -e "${YELLOW}构建MCP Server镜像...${NC}"
docker build -t ${ACR_LOGIN_SERVER}/mcp-server:latest -f services/mcp-server/Dockerfile services/mcp-server/
docker push ${ACR_LOGIN_SERVER}/mcp-server:latest
# 7. 部署Secrets(需要手动配置实际的密钥)
echo -e "${GREEN}[7/8] 配置Secrets...${NC}"
echo -e "${YELLOW}请确保已正确配置k8s/secrets.yaml中的密钥${NC}"
read -p "是否已配置Secrets?(y/n) " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
kubectl apply -f services/mcp-server/k8s/secrets.yaml
else
echo -e "${YELLOW}跳过Secrets部署,请稍后手动配置${NC}"
fi
# 8. 部署应用
echo -e "${GREEN}[8/8] 部署应用到AKS...${NC}"
# 替换ACR名称
export ACR_NAME=$ACR_NAME
envsubst < services/mcp-server/k8s/deployment.yaml | kubectl apply -f -
kubectl apply -f services/mcp-server/k8s/ingress.yaml
# 等待部署完成
echo -e "${YELLOW}等待Pod启动...${NC}"
kubectl wait --for=condition=ready pod \
-l app=mcp-server \
-n $NAMESPACE \
--timeout=300s || true
# 显示部署状态
echo -e "${GREEN}========================================${NC}"
echo -e "${GREEN} 部署完成! ${NC}"
echo -e "${GREEN}========================================${NC}"
echo -e "\n${YELLOW}部署状态:${NC}"
kubectl get pods -n $NAMESPACE
kubectl get svc -n $NAMESPACE
kubectl get ingress -n $NAMESPACE
echo -e "\n${YELLOW}查看日志:${NC}"
echo "kubectl logs -f -l app=mcp-server -n $NAMESPACE"
echo -e "\n${YELLOW}查看服务状态:${NC}"
echo "kubectl get all -n $NAMESPACE"
echo -e "\n${GREEN}部署成功!${NC}"