forked from xiaohei/taiji-AI-PAD
131 lines
3.9 KiB
Bash
Executable File
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"
|
|
|