Cpte-Boot/k8s/deploy.sh

321 lines
8.5 KiB
Bash
Raw Normal View History

2026-03-10 19:23:15 +08:00
#!/bin/bash
###############################################################################
# WMS 微服务 Kubernetes 部署脚本
# 适用于 KubeSphere 3.4.x + Kubernetes 1.28.x
###############################################################################
set -e
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# 日志函数
log_info() {
echo -e "${GREEN}[INFO]${NC} $1"
}
log_warn() {
echo -e "${YELLOW}[WARN]${NC} $1"
}
log_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
log_step() {
echo -e "${BLUE}[STEP]${NC} $1"
}
# 检查 kubectl 连接
check_kubectl() {
log_step "检查 kubectl 连接..."
if ! kubectl cluster-info &> /dev/null; then
log_error "无法连接到 Kubernetes 集群,请检查 kubeconfig 配置"
exit 1
fi
log_info "Kubernetes 集群连接正常"
}
# 创建命名空间和资源配额
create_namespace() {
log_step "创建命名空间和资源配额..."
kubectl apply -f namespace.yaml
log_info "命名空间 wms-system 创建完成"
}
# 创建 Secret
create_secrets() {
log_step "创建 Secret 配置..."
# 提示用户修改敏感信息
log_warn "请确保已修改 secrets.yaml 中的敏感信息(密码、证书等)"
read -p "按回车键继续创建 Secret..."
kubectl apply -f secrets.yaml
log_info "Secret 创建完成"
}
# 创建 ConfigMap
create_configmap() {
log_step "创建 ConfigMap..."
kubectl apply -f configmap.yaml
log_info "ConfigMap 创建完成"
}
# 创建 PVC
create_pvc() {
log_step "创建持久化存储..."
kubectl apply -f pvc.yaml
log_info "PVC 创建完成"
}
# 部署中间件MySQL/Redis/MinIO
deploy_middleware() {
log_step "部署中间件..."
echo "选择部署方式:"
echo "1) 使用 Helm 部署(推荐)"
echo "2) 手动部署(已有中间件)"
echo "3) 跳过中间件部署"
read -p "请选择 [1-3]: " middleware_choice
case $middleware_choice in
1)
log_info "使用 Helm 部署中间件..."
# 添加 Helm Repo
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo add minio https://charts.min.io/
helm repo update
# 部署 MySQL
log_step "部署 MySQL..."
helm install mysql bitnami/mysql -f helm/mysql-values.yaml -n wms-system
# 部署 Redis
log_step "部署 Redis..."
helm install redis bitnami/redis -f helm/redis-values.yaml -n wms-system
# 部署 MinIO
log_step "部署 MinIO..."
helm install minio minio/minio -f helm/minio-values.yaml -n wms-system
log_info "等待中间件就绪..."
kubectl rollout status deployment/mysql-primary -n wms-system
kubectl rollout status statefulset/redis-master -n wms-system
kubectl rollout status statefulset/minio -n wms-system
;;
2)
log_warn "请确保已有 MySQL/Redis/MinIO 服务,并修改 secrets.yaml 中的连接信息"
read -p "按回车键继续..."
;;
3)
log_warn "跳过中间件部署"
;;
*)
log_error "无效选择"
exit 1
;;
esac
}
# 部署微服务
deploy_services() {
log_step "部署 WMS 微服务..."
# 应用所有 Deployment
for file in deployments/*.yaml; do
log_info "部署:$file"
kubectl apply -f "$file"
done
log_info "等待 Deployment 就绪..."
kubectl rollout status deployment/wms-basic-service -n wms-system
kubectl rollout status deployment/wms-inbound-service -n wms-system
kubectl rollout status deployment/wms-outbound-service -n wms-system
kubectl rollout status deployment/wms-inventory-service -n wms-system
kubectl rollout status deployment/wms-schedule-service -n wms-system
}
# 部署 Service 和 Ingress
deploy_network() {
log_step "部署 Service 和 Ingress..."
kubectl apply -f services.yaml
kubectl apply -f ingress.yaml
log_info "网络和网关配置完成"
}
# 部署 HPA
deploy_hpa() {
log_step "配置自动扩缩容..."
kubectl apply -f hpa.yaml
log_info "HPA 配置完成"
}
# 检查部署状态
check_status() {
log_step "检查部署状态..."
echo ""
echo "=== Pod 状态 ==="
kubectl get pods -n wms-system
echo ""
echo "=== Service 状态 ==="
kubectl get services -n wms-system
echo ""
echo "=== Ingress 状态 ==="
kubectl get ingress -n wms-system
echo ""
echo "=== HPA 状态 ==="
kubectl get hpa -n wms-system
echo ""
echo "=== PVC 状态 ==="
kubectl get pvc -n wms-system
}
# 查看日志
view_logs() {
echo "选择要查看日志的服务:"
echo "1) wms-basic-service"
echo "2) wms-inbound-service"
echo "3) wms-outbound-service"
echo "4) wms-inventory-service"
echo "5) wms-schedule-service"
echo "6) 全部服务"
read -p "请选择 [1-6]: " log_choice
case $log_choice in
1)
kubectl logs -f deployment/wms-basic-service -n wms-system
;;
2)
kubectl logs -f deployment/wms-inbound-service -n wms-system
;;
3)
kubectl logs -f deployment/wms-outbound-service -n wms-system
;;
4)
kubectl logs -f deployment/wms-inventory-service -n wms-system
;;
5)
kubectl logs -f deployment/wms-schedule-service -n wms-system
;;
6)
kubectl logs -l app.kubernetes.io/part-of=cpte-wms -f -n wms-system
;;
*)
log_error "无效选择"
;;
esac
}
# 卸载部署
uninstall() {
log_warn "此操作将卸载所有 WMS 相关资源!"
read -p "确认继续?[y/N]: " confirm
if [ "$confirm" = "y" ] || [ "$confirm" = "Y" ]; then
log_step "卸载 WMS 微服务..."
kubectl delete -f deployments/ -n wms-system
kubectl delete -f hpa.yaml -n wms-system
kubectl delete -f ingress.yaml -n wms-system
kubectl delete -f services.yaml -n wms-system
kubectl delete -f configmap.yaml -n wms-system
kubectl delete -f secrets.yaml -n wms-system
kubectl delete -f pvc.yaml -n wms-system
kubectl delete -f namespace.yaml
log_info "卸载完成"
else
log_info "取消卸载"
fi
}
# 主菜单
show_menu() {
echo ""
echo "========================================="
echo " WMS 微服务 Kubernetes 部署脚本"
echo "========================================="
echo "1) 完整部署(一键部署所有组件)"
echo "2) 创建命名空间"
echo "3) 创建 Secret 和 ConfigMap"
echo "4) 部署中间件MySQL/Redis/MinIO"
echo "5) 部署微服务"
echo "6) 部署网络和网关"
echo "7) 配置 HPA"
echo "8) 查看部署状态"
echo "9) 查看日志"
echo "10) 卸载部署"
echo "0) 退出"
echo "========================================="
}
# 主函数
main() {
cd "$(dirname "$0")"
while true; do
show_menu
read -p "请选择操作 [0-10]: " choice
case $choice in
1)
check_kubectl
create_namespace
create_secrets
create_configmap
create_pvc
deploy_middleware
deploy_services
deploy_network
deploy_hpa
check_status
log_info "🎉 部署完成!"
;;
2)
create_namespace
;;
3)
create_secrets
create_configmap
;;
4)
deploy_middleware
;;
5)
deploy_services
;;
6)
deploy_network
;;
7)
deploy_hpa
;;
8)
check_status
;;
9)
view_logs
;;
10)
uninstall
;;
0)
log_info "退出"
exit 0
;;
*)
log_error "无效选择,请重新输入"
;;
esac
done
}
# 执行主函数
main