a-cloud-all/k8s/03-nacos/deploy.sh

169 lines
4.4 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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