多环境Helm Chart共享Deployment.yaml模板配置方案可行性问询
Helm多环境Deployment模板整合方案
这种写法完全可行,借助Helm的模板条件渲染能力,就能把不同环境的Deployment策略逻辑整合到同一个模板文件中,通过环境专属的values文件传递配置参数即可。
1. 环境专属values文件配置
- values-dev.yaml(RollingUpdate策略):
strategy: type: RollingUpdate rollingUpdate: maxSurge: 1 maxUnavailable: 0
- values-local.yaml(Recreate策略):
strategy: type: Recreate
2. 统一的Deployment模板写法
在templates/deployment.yaml中,通过条件判断渲染对应策略的配置:
apiVersion: apps/v1 kind: Deployment metadata: name: {{ .Release.Name }}-app spec: replicas: {{ .Values.replicas | default 2 }} # 策略配置部分 strategy: type: {{ .Values.strategy.type }} {{- if eq .Values.strategy.type "RollingUpdate" }} rollingUpdate: maxSurge: {{ .Values.strategy.rollingUpdate.maxSurge }} maxUnavailable: {{ .Values.strategy.rollingUpdate.maxUnavailable }} {{- end }} selector: matchLabels: app: {{ .Release.Name }}-app template: metadata: labels: app: {{ .Release.Name }}-app spec: containers: - name: app-container image: {{ .Values.image.repository }}:{{ .Values.image.tag }} ports: - containerPort: {{ .Values.containerPort }}
3. 部署验证
- 部署dev环境:
helm install my-app . -f values-dev.yaml
渲染后的Deployment会包含完整的RollingUpdate策略配置。
- 部署local环境:
helm install my-app . -f values-local.yaml
渲染后的Deployment仅保留type: Recreate,不会出现rollingUpdate字段,符合需求。
额外优化
可以在根目录的values.yaml中设置默认策略(比如默认用RollingUpdate),这样未指定环境values文件时会使用默认配置,增强模板的鲁棒性:
# values.yaml默认配置 strategy: type: RollingUpdate rollingUpdate: maxSurge: 25% maxUnavailable: 25%
内容的提问来源于stack exchange,提问作者Ema Hoffer
相关产品推荐
相关产品推荐

