如何通过Kustomize ConfigMap Generator实现多环境CTRL_DB_IP覆盖
基于Kustomize实现多环境ConfigMap配置覆盖
针对多环境(dev/stg/prod)的ConfigMap差异化配置需求,我们可以通过Kustomize的ConfigMap Generator结合分层目录结构,实现通用配置复用与环境特定参数的覆盖。以下是具体实现方案:
目录结构
. ├── base │ ├── application-ctr.properties │ └── kustomization.yaml └── overlays ├── dev │ ├── db-params.env │ └── kustomization.yaml ├── stg │ ├── db-params.env │ └── kustomization.yaml └── prod ├── db-params.env └── kustomization.yaml
基础层配置
base/application-ctr.properties
存放所有环境通用的配置内容,保留CTRL_DB_IP作为占位符:
spring.threads.virtual.enabled=true server.shutdown=graceful spring.banner.location=classpath:banner.txt spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQLDialect spring.datasource.url=jdbc:mysql://${CTRL_DB_IP}:3306/scloud?serverTimezone=UTC
base/kustomization.yaml
通过ConfigMap Generator生成基础ConfigMap,引用通用配置文件:
apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization configMapGenerator: - name: controller-application-properties-configmap namespace: controller files: - application-ctr.properties
各环境Kustomize配置
每个环境通过ConfigMap Generator替换CTRL_DB_IP参数,并用behavior: replace覆盖基础层的ConfigMap。
开发环境(dev)
overlays/dev/db-params.env
定义dev环境的数据库地址:
CTRL_DB_IP=dev-db.internal
overlays/dev/kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization bases: - ../../base configMapGenerator: - name: controller-application-properties-configmap namespace: controller behavior: replace files: - ../../base/application-ctr.properties envs: - db-params.env
测试环境(stg)
overlays/stg/db-params.env
CTRL_DB_IP=stg-db.internal
overlays/stg/kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization bases: - ../../base configMapGenerator: - name: controller-application-properties-configmap namespace: controller behavior: replace files: - ../../base/application-ctr.properties envs: - db-params.env
生产环境(prod)
overlays/prod/db-params.env
CTRL_DB_IP=prod-db.internal
overlays/prod/kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization bases: - ../../base configMapGenerator: - name: controller-application-properties-configmap namespace: controller behavior: replace files: - ../../base/application-ctr.properties envs: - db-params.env
生成与验证
生成环境清单
执行以下命令生成对应环境的最终Kubernetes清单:
# 生成dev环境清单 kustomize build overlays/dev # 生成stg环境清单 kustomize build overlays/stg # 生成prod环境清单 kustomize build overlays/prod
查看输出结果,可确认spring.datasource.url中的CTRL_DB_IP已被替换为对应环境的数据库地址。
直接部署到集群
将生成的清单直接应用到Kubernetes集群:
kustomize build overlays/prod | kubectl apply -f -
内容的提问来源于stack exchange,提问作者naveen chawla
相关产品推荐
相关产品推荐

