169 lines
4.4 KiB
Bash
Executable File
169 lines
4.4 KiB
Bash
Executable File
#!/bin/bash
|
||
|
||
set -e
|
||
|
||
DOCKER_DIR="../../docker"
|
||
|
||
echo "=========================================="
|
||
echo "部署 Nacos"
|
||
echo "=========================================="
|
||
|
||
# 检查是否需要清理旧数据
|
||
echo ""
|
||
echo "检查现有 Nacos 部署..."
|
||
if kubectl get statefulset nacos -n ruoyi &> /dev/null; then
|
||
echo "⚠️ 检测到已存在的 Nacos 部署"
|
||
echo ""
|
||
read -p "是否删除旧的 Nacos 部署和数据?(y/N): " -n 1 -r
|
||
echo
|
||
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
||
echo "删除旧的 Nacos StatefulSet..."
|
||
kubectl delete statefulset nacos -n ruoyi --ignore-not-found=true
|
||
|
||
echo "删除旧的 Nacos Service..."
|
||
kubectl delete service ruoyi-nacos -n ruoyi --ignore-not-found=true
|
||
|
||
echo "删除旧的 PVC(数据将被清空)..."
|
||
kubectl delete pvc -l app=nacos -n ruoyi --ignore-not-found=true
|
||
|
||
echo "等待资源清理完成..."
|
||
sleep 5
|
||
|
||
echo "✓ 旧数据清理完成"
|
||
else
|
||
echo "⚠️ 保留旧数据"
|
||
fi
|
||
fi
|
||
|
||
echo ""
|
||
# 步骤 1: 构建 Nacos 镜像
|
||
echo "步骤 1: 构建 Nacos 镜像..."
|
||
cd "$DOCKER_DIR"
|
||
docker-compose build --no-cache ruoyi-nacos
|
||
if [ $? -eq 0 ]; then
|
||
echo "✓ Nacos 镜像构建完成"
|
||
else
|
||
echo "✗ Nacos 镜像构建失败"
|
||
exit 1
|
||
fi
|
||
|
||
# 步骤 1.5: 检测环境并导入镜像(仅 Minikube 需要)
|
||
echo ""
|
||
if command -v minikube &> /dev/null && minikube status &> /dev/null; then
|
||
echo "检测到 Minikube 环境,导入镜像(可能需要 1-2 分钟)..."
|
||
|
||
# 先导出镜像到临时文件
|
||
TEMP_IMAGE="/tmp/nacos-runtime-$$.tar"
|
||
echo "导出镜像到临时文件..."
|
||
docker save -o "$TEMP_IMAGE" nacos-runtime
|
||
|
||
# 导入到 Minikube
|
||
echo "导入镜像到 Minikube..."
|
||
minikube image load "$TEMP_IMAGE" &
|
||
PID=$!
|
||
|
||
# 显示进度,最多等待 10 分钟
|
||
COUNT=0
|
||
MAX_COUNT=300
|
||
while kill -0 $PID 2>/dev/null; do
|
||
echo -n "."
|
||
sleep 2
|
||
COUNT=$((COUNT + 1))
|
||
if [ $COUNT -ge $MAX_COUNT ]; then
|
||
kill $PID 2>/dev/null
|
||
echo ""
|
||
echo "✗ 镜像导入超时(超过 10 分钟)"
|
||
exit 1
|
||
fi
|
||
done
|
||
wait $PID
|
||
EXIT_CODE=$?
|
||
|
||
echo ""
|
||
if [ $EXIT_CODE -eq 0 ]; then
|
||
echo "✓ 镜像导入到 Minikube 完成"
|
||
else
|
||
echo "✗ 镜像导入失败"
|
||
rm -f "$TEMP_IMAGE"
|
||
exit 1
|
||
fi
|
||
|
||
# 清理临时文件
|
||
rm -f "$TEMP_IMAGE"
|
||
else
|
||
echo "检测到 k3s/k8s 环境,跳过镜像导入(使用本地 Docker 镜像)"
|
||
fi
|
||
|
||
# 步骤 2: 部署到 K8s
|
||
echo ""
|
||
echo "步骤 2: 部署到 Kubernetes..."
|
||
cd -
|
||
kubectl apply -f service.yaml
|
||
kubectl apply -f statefulset.yaml
|
||
|
||
# 步骤 3: 等待 Pod 启动
|
||
echo ""
|
||
echo "步骤 3: 等待 Nacos Pod 启动..."
|
||
kubectl wait --for=condition=ready pod -l app=nacos -n ruoyi --timeout=300s
|
||
|
||
if [ $? -ne 0 ]; then
|
||
echo "✗ Nacos Pod 启动超时"
|
||
exit 1
|
||
fi
|
||
|
||
# 检查部署状态
|
||
echo ""
|
||
echo "=========================================="
|
||
echo "检查部署结果"
|
||
echo "=========================================="
|
||
|
||
# 检查 Pod 状态
|
||
echo "检查 Nacos Pod 状态..."
|
||
POD_STATUS=$(kubectl get pods -n ruoyi -l app=nacos -o jsonpath='{.items[0].status.phase}')
|
||
if [ "$POD_STATUS" == "Running" ]; then
|
||
echo "✓ Nacos Pod 运行正常"
|
||
kubectl get pods -n ruoyi -l app=nacos
|
||
else
|
||
echo "✗ Nacos Pod 状态异常: $POD_STATUS"
|
||
kubectl get pods -n ruoyi -l app=nacos
|
||
exit 1
|
||
fi
|
||
|
||
echo ""
|
||
# 检查 Service 状态
|
||
echo "检查 Nacos Service 状态..."
|
||
if kubectl get svc ruoyi-nacos -n ruoyi &> /dev/null; then
|
||
echo "✓ Nacos Service 创建成功"
|
||
kubectl get svc -n ruoyi ruoyi-nacos
|
||
else
|
||
echo "✗ Nacos Service 创建失败"
|
||
exit 1
|
||
fi
|
||
|
||
echo ""
|
||
|
||
# 检查 PVC 状态
|
||
echo "检查 Nacos PVC 状态..."
|
||
PVC_STATUS=$(kubectl get pvc -n ruoyi -l app=nacos -o jsonpath='{.items[0].status.phase}')
|
||
if [ "$PVC_STATUS" == "Bound" ]; then
|
||
echo "✓ Nacos PVC 绑定成功"
|
||
kubectl get pvc -n ruoyi -l app=nacos
|
||
else
|
||
echo "✗ Nacos PVC 状态异常: $PVC_STATUS"
|
||
kubectl get pvc -n ruoyi -l app=nacos
|
||
exit 1
|
||
fi
|
||
|
||
echo ""
|
||
echo "=========================================="
|
||
echo "✓ Nacos 部署完成!"
|
||
echo "=========================================="
|
||
echo ""
|
||
echo "连接信息:"
|
||
echo " Service: ruoyi-nacos.ruoyi.svc.cluster.local"
|
||
echo " HTTP 端口: 8848"
|
||
echo " Client RPC 端口: 9848"
|
||
echo " Raft RPC 端口: 9849"
|
||
echo ""
|
||
exit 0
|