321 lines
8.5 KiB
Bash
321 lines
8.5 KiB
Bash
#!/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
|