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

Helm Chart中根values.yaml与Spark依赖values.yaml的取值规则咨询

Helm 根Chart与Spark子Chart的values参数映射及优先级问题

问题背景

现有Helm项目结构如下:

charts/
  spark-0.0.1-100.tgz  
templates/
Chart.yaml
values.yaml

根目录Chart.yaml定义Spark依赖:

appVersion: 0.1.0
dependencies:
- name: spark
  version: "0.0.1-100"
  repository: https://helm.<corporation>.com/<project>
  condition: spark.enabled

根values.yaml中Spark相关配置(部分省略):

spark:
  enabled: true
  serviceAccount:
    annotations:
      eks.amazonaws.com/role-arn: arn:aws:iam::<account-id>:role/spark-service-account
  image:
    tag: "3.3.0-dev-28"
  extraEnv:
  - name: AWS_STS_REGIONAL_ENDPOINTS
    value: regional
  Master:
    Requests:
      Cpu: ...
      Memory: ...
      Disk: ...
    Limits:
      Cpu: ...
      Memory: ...
      Disk: ...
  Worker:
    Replicas: 3
    Requests:
      Cpu: ...
      Memory: ...
      Disk: ...
    Limits:
      Cpu: ...
      Memory: ...
      Disk: ...
  zookeeper:
    host: "project-zookeeper"
    port: 2181

将charts/spark-0.0.1-100.tgz解压后,Spark子Chart的values.yaml内容:

global:
  aci:
    sdrAppname: spark

image:
  repository: "docker.<corporation>.com/<project>/spark"
  tag: "1.0.1"

spark:
  path: "/opt/spark"
  user: 1000
  group: 1000
  config: |
    SPARK_WORKER_OPTS="-Dspark.worker.cleanup.enabled=true -Dspark.worker.cleanup.appDataTtl=21600"

Master:
  Name: master
  Replicas: 1
  Component: "spark-core"
  Requests:
    Cpu: ...
    Memory: ...
    Disk: ...
  Limits:
    Cpu: ...
    Memory: ...
    Disk: ...
  ServicePort: <port>
  ContainerPort: <port>
  RestEnabled: "true"
  RestPort: <port>
  ServiceType: LoadBalancer

WebUi:
  Name: webui
  ServicePort: <port>
  ContainerPort: <port>

疑问

  1. 根values.yaml与Spark子Chart的values.yaml中的参数是如何对应的?
  2. 根values.yaml中的值是否会被子Chart的values.yaml中的值替换?

回答

1. 参数对应关系

Helm中,根Chart的values.yaml里以子Chart名称(此处为spark)为顶层键的配置,会映射到子Chart的配置体系中,对应规则遵循层级结构匹配:

  • 根values.yaml里的spark.image.tag → 对应子Chartvalues.yaml中的image.tag
  • 根values.yaml里的spark.Master.Requests → 对应子Chartvalues.yaml中的Master.Requests
  • 根values.yaml中新增的配置(如spark.serviceAccount、spark.extraEnv、spark.Worker、spark.zookeeper),若子Chart的模板文件中引用了这些键,则会生效;若子Chart无相关引用,则不会产生实际作用。

简言之:根Chart里spark节点下的所有配置项,会作为子Chart的输入值,与子Chart自身values.yaml中同层级的同名参数一一对应。

2. 值的优先级规则

Helm配置的优先级从高到低排序为:

  1. 命令行传递的参数(--set或-f指定的额外values文件)
  2. 根Chartvalues.yaml中以子Chart名称为顶层键的配置
  3. 子Chart自身的values.yaml配置

因此根values.yaml中的值不会被子Chart的values.yaml替换,反而会覆盖子Chart中对应层级的同名值。举两个具体例子:

  • 子Chartvalues.yaml里image.tag默认值为1.0.1,但根values.yaml中spark.image.tag设为3.3.0-dev-28,最终生效的是3.3.0-dev-28
  • 子ChartMaster.Replicas默认值为1,若根Chart未配置spark.Master.Replicas,则使用子Chart的默认值;若根Chart设置了该值,就会覆盖子Chart的默认值

对于子Chart中存在但根Chart未配置的项(如WebUi、spark.path),会直接使用子Chartvalues.yaml中的默认值。


内容的提问来源于stack exchange,提问作者Lesha Pipiev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 03:31:06