Cpte-Boot/k8s/deploy.sh

321 lines
8.5 KiB
Bash
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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