#!/bin/bash # ============================================================ # 自动生成 34 个微服务的 ConfigMap 和 Deployment # 用途:根据 conf/ 目录中的配置文件自动生成 K8S 部署文件 # ============================================================ set -e CONF_DIR="./conf" OUTPUT_DIR="./k8s-manifests" TEMPLATE_DIR="." # 创建输出目录 mkdir -p "$OUTPUT_DIR/configmaps" mkdir -p "$OUTPUT_DIR/deployments" mkdir -p "$OUTPUT_DIR/secrets" echo "🔍 正在读取配置文件..." echo "" # 遍历所有服务目录 for service_dir in $CONF_DIR/shop-recycle-*/; do service_name=$(basename "$service_dir") # 跳过不存在配置文件的目录 if [ ! -f "$service_dir/conf/application.yml" ]; then echo "⚠️ 跳过 $service_name (没有 application.yml)" continue fi echo "📝 处理服务: $service_name" # 提取端口号 port=$(grep -oP '^\s*port:\s*\K[0-9]+' "$service_dir/conf/application.yml" | head -1) if [ -z "$port" ]; then echo " ⚠️ 无法提取端口号,使用默认 8080" port="8080" else echo " ✅ 端口: $port" fi # 判断服务类型 if grep -q "datasource:" "$service_dir/conf/application.yml"; then service_type="backend" echo " 📊 类型: Backend (包含数据库)" else service_type="web" echo " 🌐 类型: Web (无数据库)" fi # 判断是否包含微信配置 if grep -q "app-secret" "$service_dir/conf/application.yml"; then echo " 🔐 需要微信 Secret: 是" fi # 判断是否包含 MongoDB if grep -q "mongodb:" "$service_dir/conf/application.yml"; then echo " 🗄️ 需要 MongoDB Secret: 是" fi # 判断是否包含 Seata if grep -q "seata:" "$service_dir/conf/application.yml"; then echo " 🔀 需要 Seata Secret: 是" fi echo "" done echo "" echo "✅ 配置分析完成!" echo "" echo "📊 统计信息:" echo " - 总服务数: $(ls -d $CONF_DIR/shop-recycle-*/ 2>/dev/null | wc -l)" echo " - 需要数据库凭证的服务: $(grep -l 'datasource:' $CONF_DIR/*/conf/application.yml 2>/dev/null | wc -l)" echo " - 需要微信凭证的服务: $(grep -l 'app-secret' $CONF_DIR/*/conf/application.yml 2>/dev/null | wc -l)" echo " - 需要 MongoDB 凭证的服务: $(grep -l 'mongodb:' $CONF_DIR/*/conf/application.yml 2>/dev/null | wc -l)" echo " - 需要 Seata 凭证的服务: $(grep -l 'seata:' $CONF_DIR/*/conf/application.yml 2>/dev/null | wc -l)" echo "" echo "📋 生成步骤:" echo "1. ✅ 共享 Secret 已在 secret-templates-common.yaml 中定义" echo "2. ⏳ 现在需要为每个服务生成 ConfigMap 和 Deployment" echo "3. 📦 可以使用以下命令部署:" echo "" echo " # 创建共享 Secret" echo " kubectl apply -f secret-templates-common.yaml" echo "" echo " # 创建服务特定的 ConfigMap 和 Deployment" echo " kubectl apply -f k8s-manifests/configmaps/" echo " kubectl apply -f k8s-manifests/deployments/" echo "" echo "🔗 相关文件:" echo " - 分析文档: CONFIG-AND-SECRET-STRATEGY.md" echo " - 共享 Secret: secret-templates-common.yaml" echo " - 模板库: service-configmap-deployment-template.yaml" echo "" echo "💡 下一步建议:" echo " 1. 使用 Kustomize 或 Helm 生成所有服务的部署文件" echo " 2. 配置 RBAC 限制 Secret 访问权限" echo " 3. 考虑使用 External Secrets Operator 从外部密钥管理系统获取敏感信息" echo " 4. 在 CI/CD 中集成密钥注入流程"