forked from xiaohei/taiji-AI-PAD
148 lines
4.7 KiB
Bash
148 lines
4.7 KiB
Bash
#!/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}"
|
||
|
||
|