Helm技术问题:如何通过values.yaml添加labels块并解决模板报错
Helm Chart标签引用问题解决方案
1. 解决报错问题
报错原因是直接将map类型的.Values.labels通过nindent渲染到labels块中,Helm无法直接解析map为YAML键值对,需先把map转为YAML字符串。修改templates/deployment.yaml中的labels部分:
原代码:
labels: {{ .Values.labels | nindent 4 }} {{- include "accountmasterdata.labels" . | nindent 4 }}
修改后:
labels: {{- .Values.labels | toYaml | nindent 4 }} {{- include "accountmasterdata.labels" . | nindent 4 }}
说明:toYaml函数会将map类型的.Values.labels转换为符合YAML格式的字符串,再配合nindent 4添加正确缩进,Helm就能正确渲染出labels的键值对。同时注意避免.Values.labels和include生成的标签出现键名重复,否则后定义的键会覆盖前者。
2. 查看与覆盖accountmasterdata.labels的值
查看值
accountmasterdata.labels是定义在templates/_helpers.tpl文件中的模板,直接打开该文件即可查看内容。默认生成的模板通常类似:
{{- define "accountmasterdata.labels" -}} app.kubernetes.io/name: {{ include "accountmasterdata.name" . }} app.kubernetes.io/instance: {{ .Release.Name }} app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} app.kubernetes.io/managed-by: {{ .Release.Service }} {{- end -}}
也可通过Helm命令直接渲染查看输出:
# 查看模板定义 helm template --show-only templates/_helpers.tpl 你的Chart目录 | grep -A 10 "accountmasterdata.labels" # 查看最终渲染后的deployment标签 helm template --show-only templates/deployment.yaml 你的Chart目录
覆盖值
有三种常用方式:
- values.yaml配置:在values.yaml中添加对应键,重复键会覆盖模板生成的内容:
labels: app: test-app group: test-group provider: test-provider app.kubernetes.io/version: "v2.0.0" # 覆盖模板中的版本标签 - 部署时用--set参数:直接在helm install/upgrade命令中设置:
helm install 你的Release名 你的Chart目录 --set labels.app.kubernetes.io/version="v2.0.0" - 修改模板源码:直接编辑
templates/_helpers.tpl中的accountmasterdata.labels模板内容,此方式属于修改Chart源码,灵活性较低。
内容的提问来源于stack exchange,提问作者Jananath Banuka
相关产品推荐
相关产品推荐

