如何在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
相关产品推荐
相关产品推荐

