Files
taiji-AI-PAD/k8s/deploy.sh
T
2025-12-28 08:33:23 +00:00

131 lines
3.9 KiB
Bash
Executable File

#!/bin/bash
# AKS 部署脚本
# 使用方法: ./deploy.sh <ACR_NAME> <AKS_RESOURCE_GROUP> <AKS_CLUSTER_NAME>
set -e
# 颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# 检查参数
if [ $# -lt 3 ]; then
echo -e "${RED}错误: 缺少参数${NC}"
echo "使用方法: $0 <ACR_NAME> <AKS_RESOURCE_GROUP> <AKS_CLUSTER_NAME>"
echo "示例: $0 myregistry myresourcegroup myakscluster"
exit 1
fi
ACR_NAME=$1
AKS_RESOURCE_GROUP=$2
AKS_CLUSTER_NAME=$3
echo -e "${GREEN}开始部署到 AKS...${NC}"
echo "ACR 名称: $ACR_NAME"
echo "资源组: $AKS_RESOURCE_GROUP"
echo "AKS 集群: $AKS_CLUSTER_NAME"
# 检查 kubectl 是否安装
if ! command -v kubectl &> /dev/null; then
echo -e "${RED}错误: kubectl 未安装${NC}"
exit 1
fi
# 检查 az 是否安装
if ! command -v az &> /dev/null; then
echo -e "${RED}错误: Azure CLI 未安装${NC}"
exit 1
fi
# 获取 AKS 凭据
echo -e "${YELLOW}获取 AKS 集群凭据...${NC}"
az aks get-credentials --resource-group $AKS_RESOURCE_GROUP --name $AKS_CLUSTER_NAME --overwrite-existing
# 检查是否已连接到集群
if ! kubectl cluster-info &> /dev/null; then
echo -e "${RED}错误: 无法连接到 AKS 集群${NC}"
exit 1
fi
# 创建命名空间
echo -e "${YELLOW}创建命名空间...${NC}"
kubectl apply -f namespace.yaml
# 创建 ACR 拉取密钥(如果需要)
echo -e "${YELLOW}配置 ACR 访问...${NC}"
# 检查 AKS 是否已附加 ACR
ACR_ATTACHED=$(az aks show -n $AKS_CLUSTER_NAME -g $AKS_RESOURCE_GROUP --query "servicePrincipalProfile" -o tsv)
if [ -z "$ACR_ATTACHED" ]; then
echo "附加 ACR 到 AKS..."
az aks update -n $AKS_CLUSTER_NAME -g $AKS_RESOURCE_GROUP --attach-acr $ACR_NAME
else
echo "ACR 已附加,跳过..."
fi
# 创建 Secret(提示用户)
echo -e "${YELLOW}请确保已创建 Secret:${NC}"
echo " kubectl create secret generic taiji-secrets --from-literal=... --namespace=taiji-ai"
echo " 或使用 Azure Key Vault Provider"
read -p "是否已创建 Secret? (y/n) " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
echo -e "${RED}请先创建 Secret 后再继续${NC}"
exit 1
fi
# 替换配置文件中的变量
echo -e "${YELLOW}替换配置变量...${NC}"
export ACR_NAME=$ACR_NAME
# 应用 ConfigMap
echo -e "${YELLOW}应用 ConfigMap...${NC}"
kubectl apply -f configmap.yaml
# 应用所有部署配置
echo -e "${YELLOW}部署 NATS...${NC}"
envsubst < nats-deployment.yaml | kubectl apply -f -
echo -e "${YELLOW}部署 Model Gateway...${NC}"
envsubst < model-gateway-deployment.yaml | kubectl apply -f -
echo -e "${YELLOW}部署 Data Ingestion...${NC}"
envsubst < data-ingestion-deployment.yaml | kubectl apply -f -
echo -e "${YELLOW}部署 MCP Server...${NC}"
envsubst < mcp-server-deployment.yaml | kubectl apply -f -
echo -e "${YELLOW}部署监控服务...${NC}"
kubectl apply -f monitoring-deployment.yaml
# 等待部署完成
echo -e "${YELLOW}等待部署就绪...${NC}"
kubectl wait --for=condition=available --timeout=300s deployment/nats -n taiji-ai || true
kubectl wait --for=condition=available --timeout=300s deployment/litellm-gateway -n taiji-ai || true
kubectl wait --for=condition=available --timeout=300s deployment/data-ingestion -n taiji-ai || true
kubectl wait --for=condition=available --timeout=300s deployment/mcp-server -n taiji-ai || true
# 应用 Ingress(可选)
read -p "是否部署 Ingress? (y/n) " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
echo -e "${YELLOW}部署 Ingress...${NC}"
kubectl apply -f ingress.yaml
fi
# 显示部署状态
echo -e "${GREEN}部署完成!${NC}"
echo ""
echo "查看部署状态:"
echo " kubectl get pods -n taiji-ai"
echo " kubectl get services -n taiji-ai"
echo " kubectl get ingress -n taiji-ai"
echo ""
echo "查看日志:"
echo " kubectl logs -f deployment/mcp-server -n taiji-ai"
echo " kubectl logs -f deployment/litellm-gateway -n taiji-ai"
echo " kubectl logs -f deployment/data-ingestion -n taiji-ai"