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

如何在多个Helm清单文件中复用代码块?

解决Kubernetes模板跨文件复用问题

你之前的模板定义和调用存在结构问题,正确做法是把完整的PodDisruptionBudget生成逻辑封装到_helpers.tpl的模板中,确保变量作用域正确且模板结构完整。

正确的模板定义(_helpers.tpl)

{{- define "pdb.generate" -}}
{{- range $model := .Values.appConfig.models }}
{{- range $modelMode := $.Values.appConfig.models }}     
---
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
  name: {{ $modelMode }}
  labels:
    # 可补充自定义标签逻辑,比如关联model标识
    app.kubernetes.io/model: {{ $model }}
{{- end }}
{{- end }}
{{- end -}}

说明:

  • 将生成PDB的嵌套range逻辑和完整YAML结构都放入define块,保证模板是可独立执行的完整单元
  • 用$.Values引用全局配置变量,避免内层range覆盖作用域导致变量丢失
  • 严格控制模板的缩进和标签闭合,确保生成的YAML格式合法

在YAML清单中调用模板

在需要生成PDB的YAML文件中,直接调用该模板即可:

{{- include "pdb.generate" . | nindent 0 }}

说明:

  • 使用include替代template,可配合nindent灵活调整输出缩进,适配不同YAML文件的格式要求
  • 传递.作为模板参数,确保模板能访问当前上下文的Values等全局变量

你之前的问题分析

  1. 模板定义不完整:原xx模板仅写了range开头,未包含PDB的YAML内容和end闭合标签,无法生成有效内容
  2. 调用逻辑错误:直接插入{{- template "xx" }}后继续编写PDB内容,会导致$modelMode变量不在当前作用域内,模板解析失败
  3. 作用域处理不当:内层range未使用$.Values,容易因作用域覆盖无法正确获取全局配置

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 15:03:19