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

如何在Helm Charts的values.yml中避免配置值重复?

Helm中避免values配置重复的实现方法

在使用Helm部署应用时,我们会在values.yml中声明全局变量,再在模板文件中通过.Values.var_name调用。比如声明全局Ingress域名:

# values.yml
domain: mydomain.com

在Ingress模板中调用该变量:

# templates/ingress.yaml
kind: Ingress
...
spec:
  rules:
    - host: {{ .Values.domain }}

当引入Grafana作为Chart依赖时,依赖配置如下:

# Chart.yaml
dependencies:
  - name: grafana
    repository: https://grafana.github.io/helm-charts
    version: 7.0.3

此时需要为Grafana配置ingress.hosts,常规写法会重复输入域名:

# values.yml
domain: mydomain.com

grafana:
  ingress:
    hosts:
      - mydomain.com

这种重复配置不仅冗余,还容易出错,以下是可行的解决方式:

1. 为什么不能直接在values.yml中引用.Values?

values.yml是纯静态YAML文件,不会经过Helm的模板渲染流程,直接写入.Values.domain会被当作普通字符串处理,无法解析为对应变量值,因此这种方式不可行。

2. 用模板复用全局变量的正确方式

方案一:自定义Grafana Ingress模板

在父Chart的templates目录下创建Grafana专属的Ingress模板文件(比如templates/grafana-ingress.yaml),直接复用全局的.Values.domain:

{{- if .Values.grafana.ingress.enabled }}
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: {{ .Release.Name }}-grafana
  labels:
    app.kubernetes.io/name: grafana
    app.kubernetes.io/instance: {{ .Release.Name }}
spec:
  rules:
    - host: {{ .Values.domain }}
      http:
        paths:
          - path: /grafana
            pathType: Prefix
            backend:
              service:
                name: {{ .Release.Name }}-grafana
                port:
                  number: 3000
{{- end }}

这样就无需在values.yml中重复配置Grafana的hosts,直接通过模板复用全局域名。

方案二:通过命令行参数传递(适合临时场景)

如果不想修改模板,可以在安装Chart时通过命令行一次性传递变量,避免重复输入:

# 先定义环境变量
export DOMAIN=mydomain.com
# 安装时同时设置全局域名和Grafana的hosts
helm install my-app ./my-chart --set domain=$DOMAIN --set grafana.ingress.hosts[0]=$DOMAIN

内容的提问来源于stack exchange,提问作者Daniel Argüelles

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 11:36:03