Files
taiji-AI-PAD/k8s/prod/deploy.bat
T
2026-05-05 14:13:59 +08:00

141 lines
4.2 KiB
Batchfile

@echo off
REM Taiji AI-PAD AKS 部署脚本 (生产环境) - Windows 版本
REM 部署到 taiji-ai-pda AKS 集群
setlocal enabledelayedexpansion
REM 配置变量 - 生产环境
set ACR_NAME=taiji
set ACR_LOGIN_SERVER=%ACR_NAME%.azurecr.io
set RESOURCE_GROUP=taiji-ai-pda
set AKS_NAME=taiji-ai-pda
set NAMESPACE=taiji-ai
echo === Taiji AI-PAD AKS 部署脚本 (生产环境) ===
echo 警告: 您正在部署到生产环境!
echo 目标集群: %AKS_NAME%
echo 命名空间: %NAMESPACE%
echo.
REM 确认生产环境部署
set /p confirm=确认部署到生产环境? (输入 'yes' 继续):
if not "%confirm%"=="yes" (
echo 部署已取消
exit /b 0
)
REM 检查 Azure CLI 登录状态
echo 检查 Azure 登录状态...
az account show >nul 2>&1
if errorlevel 1 (
echo 请先运行 'az login' 登录 Azure
exit /b 1
)
echo Azure 已登录
REM 登录 ACR
echo 登录 Azure Container Registry...
az acr login --name %ACR_NAME%
REM 获取 AKS 凭据
echo 获取 AKS 集群凭据 (%AKS_NAME%)...
az aks get-credentials --resource-group %RESOURCE_GROUP% --name %AKS_NAME% --overwrite-existing
REM 构建并推送 Docker 镜像
echo 构建并推送 Docker 镜像到 ACR...
REM 构建 Data Ingestion
REM --platform linux/amd64: 显式锁定架构,与 AKS 标准节点 (amd64) 匹配,避免在 arm64 Mac 上误构建为 arm64
echo [1/2] 构建 Data Ingestion 镜像...
docker build --platform linux/amd64 -t %ACR_LOGIN_SERVER%/data-ingestion:latest ./services/data-ingestion/
docker push %ACR_LOGIN_SERVER%/data-ingestion:latest
REM 构建 MCP Server
echo [2/2] 构建 MCP Server 镜像...
docker build --platform linux/amd64 -t %ACR_LOGIN_SERVER%/mcp-server:latest ./services/mcp-server/
docker push %ACR_LOGIN_SERVER%/mcp-server:latest
echo 所有镜像构建并推送完成!
REM 部署到 AKS
echo 部署到 AKS (生产环境)...
REM 创建命名空间
echo 创建命名空间...
kubectl apply -f k8s/prod/namespace.yaml
REM 部署 Secrets 和 ConfigMap
echo 部署 Secrets 和 ConfigMap...
kubectl apply -f k8s/prod/secrets.yaml
kubectl apply -f k8s/prod/configmap.yaml
REM 部署 NATS
echo 部署 NATS 消息队列...
kubectl apply -f k8s/prod/nats.yaml
REM 等待 NATS 就绪
echo 等待 NATS 就绪...
kubectl wait --for=condition=ready pod -l app=nats -n %NAMESPACE% --timeout=120s
REM 部署 Data Ingestion
echo 部署 Data Ingestion...
kubectl apply -f k8s/prod/data-ingestion.yaml
REM 部署 MCP Server
echo 部署 MCP Server...
kubectl apply -f k8s/prod/mcp-server.yaml
REM 部署 API Gateway
echo 部署 API Gateway...
kubectl apply -f k8s/prod/api-gateway.yaml
REM 部署 Ingress
echo 部署 Ingress...
kubectl apply -f k8s/prod/ingress.yaml
REM 部署 Prometheus 监控
echo 部署 Prometheus 监控...
kubectl apply -f k8s/prod/monitoring.yaml
REM 等待所有服务就绪
echo 等待所有服务就绪...
kubectl wait --for=condition=ready pod -l app=data-ingestion -n %NAMESPACE% --timeout=180s
kubectl wait --for=condition=ready pod -l app=mcp-server -n %NAMESPACE% --timeout=180s
kubectl wait --for=condition=ready pod -l app=api-gateway -n %NAMESPACE% --timeout=180s
kubectl wait --for=condition=ready pod -l app=prometheus -n %NAMESPACE% --timeout=180s
REM 获取 API Gateway 外部 IP
echo 获取 API Gateway 外部 IP...
for /f "tokens=*" %%a in ('kubectl get svc api-gateway -n %NAMESPACE% -o jsonpath^="{.status.loadBalancer.ingress[0].ip}"') do set EXTERNAL_IP=%%a
echo.
echo === 生产环境部署完成! ===
echo.
echo 查看所有 Pod 状态:
kubectl get pods -n %NAMESPACE%
echo.
echo 查看所有 Service:
kubectl get svc -n %NAMESPACE%
echo.
echo 查看 Ingress:
kubectl get ingress -n %NAMESPACE%
echo.
echo 生产环境配置信息:
echo - 数据库: taiji_prod (生产库)
echo - Redis: taiji2026.southeastasia.redis.azure.net
echo - 命名空间: %NAMESPACE%
if defined EXTERNAL_IP (
echo.
echo API Gateway 外部访问地址: http://%EXTERNAL_IP%
echo - 健康检查: http://%EXTERNAL_IP%/health
echo - MCP Server: http://%EXTERNAL_IP%/api/mcp/
echo - Data Ingestion: http://%EXTERNAL_IP%/api/data/
) else (
echo.
echo LoadBalancer IP 尚未分配,请稍后运行以下命令查看:
echo kubectl get svc api-gateway -n %NAMESPACE%
)
endlocal