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

如何在Helm Deployment文件中遍历多服务配置生成部署资源?

实现方法

1. 重构Values.yaml为列表结构

将原有的独立服务配置改成统一的服务列表,便于后续遍历生成资源:

services:
  - name: povisioning_adapter
    replicas: 1
    env: dev
    image: provisioning_adapter
    tag: master
    port: 8001
    service:
      protocol: TCP  
      port: 8001
      targetPort: 8001
      nodePort: 30100
  - name: service_adapter
    replicas: 1
    env: dev
    image: service_adapter
    tag: master
    port: 8002
    service:
      protocol: TCP  
      port: 8002
      targetPort: 8002
      nodePort: 30200

2. 修改Deployment模板使用Helm循环遍历

在Deployment文件中通过range指令遍历服务列表,自动为每个服务生成独立的Deployment资源:

{{- range .Values.services }}
apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ .name }}-deployment
  labels:
    app: {{ .name }}
spec:
  replicas: {{ .replicas }}
  selector:
    matchLabels:
      app: {{ .name }}
  template:
    metadata:
      labels:
        app: {{ .name }}
    spec:
      containers:
      - name: {{ .name }}
        image: {{ .image }}:{{ .tag }}
        ports:
        - containerPort: {{ .port }}
---
{{- end }}

核心细节说明:

  • {{- range .Values.services }} 开启遍历逻辑,每次循环会将当前服务的配置赋值给模板变量.
  • --- 作为Kubernetes资源的分隔符,确保每个生成的Deployment都是独立的资源对象
  • 循环内直接通过.引用当前服务的属性,比如.name对应服务名称,.replicas对应副本数等

3. 可选:自动生成对应Service资源

如果需要同步生成每个服务的Service,可以新建service.yaml模板,同样用循环实现:

{{- range .Values.services }}
apiVersion: v1
kind: Service
metadata:
  name: {{ .name }}-service
spec:
  type: NodePort
  selector:
    app: {{ .name }}
  ports:
    - protocol: {{ .service.protocol }}
      port: {{ .service.port }}
      targetPort: {{ .service.targetPort }}
      nodePort: {{ .service.nodePort }}
---
{{- end }}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 17:31:57