forked from xiaohei/taiji-AI-PAD
146 lines
5.0 KiB
Bash
146 lines
5.0 KiB
Bash
#!/bin/bash
|
|
# Taiji AI-PAD AKS 部署脚本 (测试环境)
|
|
# 部署到 testagnet AKS 集群
|
|
|
|
set -e
|
|
|
|
# 配置变量 - 测试环境
|
|
ACR_NAME="taiji"
|
|
ACR_LOGIN_SERVER="${ACR_NAME}.azurecr.io"
|
|
RESOURCE_GROUP="taiji-ai-test"
|
|
AKS_NAME="testagnet"
|
|
NAMESPACE="taiji-ai-test"
|
|
|
|
# 颜色输出
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
NC='\033[0m' # No Color
|
|
|
|
echo -e "${BLUE}=== Taiji AI-PAD AKS 部署脚本 (测试环境) ===${NC}"
|
|
echo -e "${YELLOW}目标集群: ${AKS_NAME}${NC}"
|
|
echo -e "${YELLOW}命名空间: ${NAMESPACE}${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 集群凭据 (${AKS_NAME})...${NC}"
|
|
az aks get-credentials --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --overwrite-existing
|
|
|
|
# 构建并推送 Docker 镜像
|
|
echo -e "${YELLOW}构建并推送 Docker 镜像到 ACR...${NC}"
|
|
|
|
# 构建 Data Ingestion
|
|
# --platform linux/amd64: 显式锁定架构,与 AKS 标准节点 (amd64) 匹配
|
|
echo -e "${YELLOW}[1/2] 构建 Data Ingestion 镜像...${NC}"
|
|
docker build --platform linux/amd64 -t ${ACR_LOGIN_SERVER}/data-ingestion:latest ./services/data-ingestion/
|
|
docker push ${ACR_LOGIN_SERVER}/data-ingestion:latest
|
|
|
|
# 构建 MCP Server
|
|
echo -e "${YELLOW}[2/2] 构建 MCP Server 镜像...${NC}"
|
|
docker build --platform linux/amd64 -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/test/namespace.yaml
|
|
|
|
# 创建 ACR 拉取凭据 (如果不存在)
|
|
echo -e "${YELLOW}检查 ACR 拉取凭据...${NC}"
|
|
if ! kubectl get secret acr-secret -n ${NAMESPACE} > /dev/null 2>&1; then
|
|
echo -e "${YELLOW}创建 ACR 拉取凭据...${NC}"
|
|
ACR_PASSWORD=$(az acr credential show --name ${ACR_NAME} --query "passwords[0].value" -o tsv)
|
|
kubectl create secret docker-registry acr-secret \
|
|
--namespace ${NAMESPACE} \
|
|
--docker-server=${ACR_LOGIN_SERVER} \
|
|
--docker-username=${ACR_NAME} \
|
|
--docker-password=${ACR_PASSWORD}
|
|
fi
|
|
|
|
# 部署 Secrets 和 ConfigMap
|
|
echo -e "${YELLOW}部署 Secrets 和 ConfigMap...${NC}"
|
|
kubectl apply -f k8s/test/secrets.yaml
|
|
kubectl apply -f k8s/test/configmap.yaml
|
|
|
|
# 部署 NATS
|
|
echo -e "${YELLOW}部署 NATS 消息队列...${NC}"
|
|
kubectl apply -f k8s/test/nats.yaml
|
|
|
|
# 等待 NATS 就绪
|
|
echo -e "${YELLOW}等待 NATS 就绪...${NC}"
|
|
kubectl wait --for=condition=ready pod -l app=nats -n ${NAMESPACE} --timeout=120s || true
|
|
|
|
# 部署 Data Ingestion
|
|
echo -e "${YELLOW}部署 Data Ingestion...${NC}"
|
|
kubectl apply -f k8s/test/data-ingestion.yaml
|
|
|
|
# 部署 MCP Server
|
|
echo -e "${YELLOW}部署 MCP Server...${NC}"
|
|
kubectl apply -f k8s/test/mcp-server.yaml
|
|
|
|
# 部署 API Gateway
|
|
echo -e "${YELLOW}部署 API Gateway...${NC}"
|
|
kubectl apply -f k8s/test/api-gateway.yaml
|
|
|
|
# 部署 Ingress
|
|
echo -e "${YELLOW}部署 Ingress...${NC}"
|
|
kubectl apply -f k8s/test/ingress.yaml
|
|
|
|
# 部署 Prometheus 监控
|
|
echo -e "${YELLOW}部署 Prometheus 监控...${NC}"
|
|
kubectl apply -f k8s/test/monitoring.yaml
|
|
|
|
# 等待所有服务就绪
|
|
echo -e "${YELLOW}等待所有服务就绪...${NC}"
|
|
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
|
|
kubectl wait --for=condition=ready pod -l app=prometheus -n ${NAMESPACE} --timeout=180s || true
|
|
|
|
# 获取 API Gateway 外部 IP
|
|
echo -e "${YELLOW}获取 API Gateway 外部 IP...${NC}"
|
|
EXTERNAL_IP=$(kubectl get svc api-gateway -n ${NAMESPACE} -o jsonpath='{.status.loadBalancer.ingress[0].ip}' 2>/dev/null)
|
|
|
|
echo ""
|
|
echo -e "${GREEN}=== 测试环境部署完成! ===${NC}"
|
|
echo ""
|
|
echo -e "查看所有 Pod 状态:"
|
|
kubectl get pods -n ${NAMESPACE}
|
|
echo ""
|
|
echo -e "查看所有 Service:"
|
|
kubectl get svc -n ${NAMESPACE}
|
|
echo ""
|
|
echo -e "查看 Ingress:"
|
|
kubectl get ingress -n ${NAMESPACE}
|
|
echo ""
|
|
echo -e "${BLUE}测试环境配置信息:${NC}"
|
|
echo -e " - 数据库: taiji (测试库)"
|
|
echo -e " - Redis: testagnet.redis.cache.windows.net"
|
|
echo -e " - 命名空间: ${NAMESPACE}"
|
|
|
|
if [ -n "$EXTERNAL_IP" ]; then
|
|
echo ""
|
|
echo -e "${GREEN}API Gateway 外部访问地址: http://${EXTERNAL_IP}${NC}"
|
|
echo -e " - 健康检查: http://${EXTERNAL_IP}/health"
|
|
echo -e " - MCP Server: http://${EXTERNAL_IP}/api/mcp/"
|
|
echo -e " - Data Ingestion: http://${EXTERNAL_IP}/api/data/"
|
|
else
|
|
echo ""
|
|
echo -e "${YELLOW}LoadBalancer IP 尚未分配,请稍后运行以下命令查看:${NC}"
|
|
echo -e " kubectl get svc api-gateway -n ${NAMESPACE}"
|
|
fi
|