You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Helm复用deployment模板创建不同配置的同应用Pod

单Helm模板部署蓝绿双实例实现方案

核心逻辑:不用新增重复的Deployment模板文件,通过Helm模板的循环能力,遍历values中定义的多组实例配置,一次性渲染出多份独立的Deployment资源。


1. 修正目录结构与补全必要文件

你当前的目录结构不符合Helm Chart的标准规范,首先做两处调整:

  • 把kubernetes/templates/myApp/下的deployment.yaml直接移到kubernetes/templates/目录下,Helm只会识别templates根目录下的模板文件
  • 在kubernetes/目录下新增最简Chart.yaml文件,否则Helm无法识别该目录为合法Chart,文件内容如下:
apiVersion: v2
name: my-app
version: 0.1.0

调整完成后的标准目录结构:

myApp/
├── Dockerfile
├── skaffold.yaml
└── kubernetes/
    ├── Chart.yaml
    ├── templates/
    │   └── deployment.yaml
    └── values.yaml

2. 改造deployment.yaml模板

把原来硬编码蓝组配置的模板,改成循环遍历实例配置的通用模板,补全K8s要求的必填字段(selector、标签等,原模板缺失这些字段会直接部署报错):

{{- range .Values.instances }}
apiVersion: apps/v1
kind: Deployment
metadata:
  namespace: {{ $.Values.namespace }}
  name: {{ $.Values.name }}-{{ .name }}
  labels:
    app: {{ $.Values.name }}
    color: {{ .name }}
spec:
  replicas: {{ .replicas }}
  selector:
    matchLabels:
      app: {{ $.Values.name }}
      color: {{ .name }}
  template:
    metadata:
      labels:
        app: {{ $.Values.name }}
        color: {{ .name }}
    spec:
      containers:
        -  name: {{ .name }}
           image: {{ .image }}
           env:
             {{- toYaml .env | nindent 12 }}
---
{{- end }}

模板说明:循环内通过$.Values引用根级values配置,通过.引用当前遍历到的单实例配置,每遍历一个实例就生成一份独立的Deployment清单,实例之间完全隔离。

3. 调整values.yaml配置

把原来分拆的蓝、绿部署配置合并为统一的实例列表,后续新增实例(比如灰度版本)只需要在列表里加配置项,不需要修改模板:

namespace: my-app
name: app

instances:
  - name: blue
    image: my-image
    replicas: 1
    env:
      - name: COLOR
        value: 'blue'
  - name: green
    image: my-image
    replicas: 1
    env:
      - name: COLOR
        value: 'green'

如果你坚持保留原来blue-deployment、green-deployment的分块写法,只需要把模板里的{{- range .Values.instances }}改成{{- range list .Values.blue-deployment .Values.green-deployment }}即可,但这种写法扩展性差,新增实例必须修改模板,不推荐。

4. 修正skaffold.yaml配置

原配置存在版本号不全、Helm部署结构错误、镜像配置不匹配的问题,修改后内容如下:

apiVersion: skaffold/v2beta29
kind: Config
build:
  artifacts:
    # 蓝绿实例使用同一个镜像,只需要构建一次
    - image: my-image
      context: './'
deploy:
  helm:
    releases:
      - name: my-application
        chartPath: kubernetes
        valuesFiles:
          - kubernetes/values.yaml
        namespace: my-app
        # 自动替换Skaffold构建的本地镜像标签,适配本地开发流程
        imageStrategy:
          helm: {}

验证方式

所有配置修改完成后,在项目根目录执行skaffold dev,等待部署完成后执行kubectl get deploy -n my-app,即可看到app-blue、app-green两个独立的Deployment,对应的Pod除了注入的COLOR环境变量不同,其余配置完全一致,没有重复编写Deployment模板文件。


内容的提问来源于stack exchange,提问作者SkinnyBetas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.02 09:51:30