generate-k8s-manifests.sh 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. #!/bin/bash
  2. # ============================================================
  3. # 自动生成 34 个微服务的 ConfigMap 和 Deployment
  4. # 用途:根据 conf/ 目录中的配置文件自动生成 K8S 部署文件
  5. # ============================================================
  6. set -e
  7. CONF_DIR="./conf"
  8. OUTPUT_DIR="./k8s-manifests"
  9. TEMPLATE_DIR="."
  10. # 创建输出目录
  11. mkdir -p "$OUTPUT_DIR/configmaps"
  12. mkdir -p "$OUTPUT_DIR/deployments"
  13. mkdir -p "$OUTPUT_DIR/secrets"
  14. echo "🔍 正在读取配置文件..."
  15. echo ""
  16. # 遍历所有服务目录
  17. for service_dir in $CONF_DIR/shop-recycle-*/; do
  18. service_name=$(basename "$service_dir")
  19. # 跳过不存在配置文件的目录
  20. if [ ! -f "$service_dir/conf/application.yml" ]; then
  21. echo "⚠️ 跳过 $service_name (没有 application.yml)"
  22. continue
  23. fi
  24. echo "📝 处理服务: $service_name"
  25. # 提取端口号
  26. port=$(grep -oP '^\s*port:\s*\K[0-9]+' "$service_dir/conf/application.yml" | head -1)
  27. if [ -z "$port" ]; then
  28. echo " ⚠️ 无法提取端口号,使用默认 8080"
  29. port="8080"
  30. else
  31. echo " ✅ 端口: $port"
  32. fi
  33. # 判断服务类型
  34. if grep -q "datasource:" "$service_dir/conf/application.yml"; then
  35. service_type="backend"
  36. echo " 📊 类型: Backend (包含数据库)"
  37. else
  38. service_type="web"
  39. echo " 🌐 类型: Web (无数据库)"
  40. fi
  41. # 判断是否包含微信配置
  42. if grep -q "app-secret" "$service_dir/conf/application.yml"; then
  43. echo " 🔐 需要微信 Secret: 是"
  44. fi
  45. # 判断是否包含 MongoDB
  46. if grep -q "mongodb:" "$service_dir/conf/application.yml"; then
  47. echo " 🗄️ 需要 MongoDB Secret: 是"
  48. fi
  49. # 判断是否包含 Seata
  50. if grep -q "seata:" "$service_dir/conf/application.yml"; then
  51. echo " 🔀 需要 Seata Secret: 是"
  52. fi
  53. echo ""
  54. done
  55. echo ""
  56. echo "✅ 配置分析完成!"
  57. echo ""
  58. echo "📊 统计信息:"
  59. echo " - 总服务数: $(ls -d $CONF_DIR/shop-recycle-*/ 2>/dev/null | wc -l)"
  60. echo " - 需要数据库凭证的服务: $(grep -l 'datasource:' $CONF_DIR/*/conf/application.yml 2>/dev/null | wc -l)"
  61. echo " - 需要微信凭证的服务: $(grep -l 'app-secret' $CONF_DIR/*/conf/application.yml 2>/dev/null | wc -l)"
  62. echo " - 需要 MongoDB 凭证的服务: $(grep -l 'mongodb:' $CONF_DIR/*/conf/application.yml 2>/dev/null | wc -l)"
  63. echo " - 需要 Seata 凭证的服务: $(grep -l 'seata:' $CONF_DIR/*/conf/application.yml 2>/dev/null | wc -l)"
  64. echo ""
  65. echo "📋 生成步骤:"
  66. echo "1. ✅ 共享 Secret 已在 secret-templates-common.yaml 中定义"
  67. echo "2. ⏳ 现在需要为每个服务生成 ConfigMap 和 Deployment"
  68. echo "3. 📦 可以使用以下命令部署:"
  69. echo ""
  70. echo " # 创建共享 Secret"
  71. echo " kubectl apply -f secret-templates-common.yaml"
  72. echo ""
  73. echo " # 创建服务特定的 ConfigMap 和 Deployment"
  74. echo " kubectl apply -f k8s-manifests/configmaps/"
  75. echo " kubectl apply -f k8s-manifests/deployments/"
  76. echo ""
  77. echo "🔗 相关文件:"
  78. echo " - 分析文档: CONFIG-AND-SECRET-STRATEGY.md"
  79. echo " - 共享 Secret: secret-templates-common.yaml"
  80. echo " - 模板库: service-configmap-deployment-template.yaml"
  81. echo ""
  82. echo "💡 下一步建议:"
  83. echo " 1. 使用 Kustomize 或 Helm 生成所有服务的部署文件"
  84. echo " 2. 配置 RBAC 限制 Secret 访问权限"
  85. echo " 3. 考虑使用 External Secrets Operator 从外部密钥管理系统获取敏感信息"
  86. echo " 4. 在 CI/CD 中集成密钥注入流程"