Files
taiji-AI-PAD/k8s/deploy.sh
T
2025-12-30 06:22:47 +00:00

134 lines
4.3 KiB
Bash
Executable File

#!/bin/bash
# Taiji AI-PAD AKS 部署脚本
set -e
# 配置变量
ACR_NAME="taiji"
ACR_LOGIN_SERVER="${ACR_NAME}.azurecr.io"
RESOURCE_GROUP="taiji-ai-pda"
AKS_NAME="taiji-ai-pda"
NAMESPACE="taiji-ai"
# 颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
echo -e "${GREEN}=== Taiji AI-PAD AKS 部署脚本 ===${NC}"
echo ""
# 检查 Azure CLI 登录状态
echo -e "${YELLOW}检查 Azure 登录状态...${NC}"
az account show > /dev/null 2>&1 || { echo -e "${RED}请先运行 'az login' 登录 Azure${NC}"; exit 1; }
echo -e "${GREEN}Azure 已登录${NC}"
# 登录 ACR
echo -e "${YELLOW}登录 Azure Container Registry...${NC}"
az acr login --name ${ACR_NAME}
# 获取 AKS 凭据
echo -e "${YELLOW}获取 AKS 集群凭据...${NC}"
az aks get-credentials --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --overwrite-existing
# 构建并推送 Docker 镜像
echo -e "${YELLOW}构建并推送 Docker 镜像到 ACR...${NC}"
# 构建 LiteLLM Gateway
echo -e "${YELLOW}[1/3] 构建 LiteLLM Gateway 镜像...${NC}"
docker build -t ${ACR_LOGIN_SERVER}/litellm-gateway:latest ./services/model-gateway/
docker push ${ACR_LOGIN_SERVER}/litellm-gateway:latest
# 构建 Data Ingestion
echo -e "${YELLOW}[2/3] 构建 Data Ingestion 镜像...${NC}"
docker build -t ${ACR_LOGIN_SERVER}/data-ingestion:latest ./services/data-ingestion/
docker push ${ACR_LOGIN_SERVER}/data-ingestion:latest
# 构建 MCP Server
echo -e "${YELLOW}[3/3] 构建 MCP Server 镜像...${NC}"
docker build -t ${ACR_LOGIN_SERVER}/mcp-server:latest ./services/mcp-server/
docker push ${ACR_LOGIN_SERVER}/mcp-server:latest
echo -e "${GREEN}所有镜像构建并推送完成!${NC}"
# 部署到 AKS
echo -e "${YELLOW}部署到 AKS...${NC}"
# 创建命名空间
echo -e "${YELLOW}创建命名空间...${NC}"
kubectl apply -f k8s/namespace.yaml
# 部署 Secrets 和 ConfigMap
echo -e "${YELLOW}部署 Secrets 和 ConfigMap...${NC}"
kubectl apply -f k8s/secrets.yaml
kubectl apply -f k8s/configmap.yaml
# 部署 NATS
echo -e "${YELLOW}部署 NATS 消息队列...${NC}"
kubectl apply -f k8s/nats.yaml
# 等待 NATS 就绪
echo -e "${YELLOW}等待 NATS 就绪...${NC}"
kubectl wait --for=condition=ready pod -l app=nats -n ${NAMESPACE} --timeout=120s
# 部署 LiteLLM Gateway
echo -e "${YELLOW}部署 LiteLLM Gateway...${NC}"
kubectl apply -f k8s/litellm-gateway.yaml
# 部署 Data Ingestion
echo -e "${YELLOW}部署 Data Ingestion...${NC}"
kubectl apply -f k8s/data-ingestion.yaml
# 部署 MCP Server
echo -e "${YELLOW}部署 MCP Server...${NC}"
kubectl apply -f k8s/mcp-server.yaml
# 部署 API Gateway
echo -e "${YELLOW}部署 API Gateway...${NC}"
kubectl apply -f k8s/api-gateway.yaml
# 部署监控服务
echo -e "${YELLOW}部署 Prometheus 监控...${NC}"
kubectl apply -f k8s/monitoring.yaml
# 等待所有服务就绪
echo -e "${YELLOW}等待所有服务就绪...${NC}"
kubectl wait --for=condition=ready pod -l app=litellm-gateway -n ${NAMESPACE} --timeout=180s || true
kubectl wait --for=condition=ready pod -l app=data-ingestion -n ${NAMESPACE} --timeout=180s || true
kubectl wait --for=condition=ready pod -l app=mcp-server -n ${NAMESPACE} --timeout=180s || true
kubectl wait --for=condition=ready pod -l app=api-gateway -n ${NAMESPACE} --timeout=180s || true
# 获取外部 IP
echo -e "${YELLOW}获取 API Gateway 外部 IP...${NC}"
echo -e "${YELLOW}(LoadBalancer IP 分配可能需要几分钟)${NC}"
for i in {1..30}; do
EXTERNAL_IP=$(kubectl get svc api-gateway -n ${NAMESPACE} -o jsonpath='{.status.loadBalancer.ingress[0].ip}' 2>/dev/null)
if [ -n "$EXTERNAL_IP" ]; then
break
fi
echo -e "等待外部 IP 分配... ($i/30)"
sleep 10
done
echo ""
echo -e "${GREEN}=== 部署完成! ===${NC}"
echo ""
echo -e "查看所有 Pod 状态:"
kubectl get pods -n ${NAMESPACE}
echo ""
echo -e "查看所有 Service:"
kubectl get svc -n ${NAMESPACE}
echo ""
if [ -n "$EXTERNAL_IP" ]; then
echo -e "${GREEN}API Gateway 外部访问地址: http://${EXTERNAL_IP}${NC}"
echo -e " - MCP Server: http://${EXTERNAL_IP}/api/mcp/"
echo -e " - Data Ingestion: http://${EXTERNAL_IP}/api/data/"
echo -e " - LiteLLM Gateway: http://${EXTERNAL_IP}/api/llm/"
else
echo -e "${YELLOW}LoadBalancer IP 尚未分配,请稍后运行以下命令查看:${NC}"
echo -e " kubectl get svc api-gateway -n ${NAMESPACE}"
fi