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

Helm子图表场景下Deployment模板的语法实现问询

基于Helm子图表实现多微服务容器配置渲染

背景

之前提问《Use one Helm chart for ALL microservices?》并采纳子图表方案,已搭建如下目录结构:

my-deployment-repo/
|- base-microservice/
   |- templates/
      |- deployment.yml
      |- service.yml
   |- Chart.yaml
   |- values.yaml
|- myapp/
   |- Chart.yaml
   |- values.yaml

base-microservice/values.yaml定义镜像、服务等基础配置,myapp/Chart.yaml通过别名引入两个base-microservice子图表,myapp/values.yaml仅覆盖各子服务的镜像名和版本。需要在base-microservice/templates/deployment.yml中编写模板语法,实现:

  1. 容器名渲染为对应子服务的镜像名称(如foo)
  2. 镜像地址渲染为「基础仓库+镜像名称+版本」的完整路径

配置示例与模板实现

1. 基础子图表的默认配置

先看base-microservice/values.yaml的基础设置:

# base-microservice/values.yaml
image:
  repository: 01234567890.dkr.ecr.us-east-1.amazonaws.com
  name: default-microservice
  tag: latest

2. 父图表的子服务引用

myapp/Chart.yaml中通过别名引入两个子服务:

# myapp/Chart.yaml
apiVersion: v2
name: myapp
version: 0.1.0
dependencies:
  - name: base-microservice
    alias: foo-service
    version: 0.1.0
    path: ../base-microservice
  - name: base-microservice
    alias: bar-service
    version: 0.1.0
    path: ../base-microservice

3. 父图表的子服务配置覆盖

myapp/values.yaml中为每个子服务单独设置镜像名和版本:

# myapp/values.yaml
foo-service:
  image:
    name: foo
    tag: 1.2.3

bar-service:
  image:
    name: bar
    tag: 4.5.6

4. 核心模板代码

base-microservice/templates/deployment.yml中编写如下模板,即可实现需求:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ .Release.Name }}-{{ .Chart.Name }}
spec:
  replicas: 1
  selector:
    matchLabels:
      app: {{ .Release.Name }}-{{ .Chart.Name }}
  template:
    metadata:
      labels:
        app: {{ .Release.Name }}-{{ .Chart.Name }}
    spec:
      containers:
        - name: {{ .Values.image.name }}
          image: "{{ .Values.image.repository }}/{{ .Values.image.name }}:{{ .Values.image.tag }}"
          # 可添加其他容器配置,如端口、环境变量等
          ports:
            - containerPort: 8080

模板逻辑说明

  • 容器名渲染:{{ .Values.image.name }}会读取当前子图表对应的values配置。因为每个子服务通过别名引入,各自的values会覆盖base子图表的默认值,所以foo-service的容器名就是foo,bar-service就是bar。
  • 镜像地址拼接:"{{ .Values.image.repository }}/{{ .Values.image.name }}:{{ .Values.image.tag }}"将基础仓库地址、镜像名、版本号拼接成完整镜像路径。其中仓库地址从base子图表的默认配置继承,镜像名和版本由父图表中对应子服务的配置覆盖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 12:15:33