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