kubernetes 舵图表覆盖值

3qpi33ja  于 2022-11-02  发布在  Kubernetes
关注(0)|答案(1)|浏览(104)

有这样结构的项目,我在努力理解:

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

图表名称

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

values.yaml(为简单起见,省略了某些值)

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解压缩到文件夹charts/spark/中:

charts/
  spark/
    templates/
    Chart.yaml
    values.yaml

图表/Spark/价值.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>

问题是,values.yamlcharts/spark/values.yaml中的值是如何对应的?
values.yaml中的值是否替换为charts/spark/values.yaml中的值?
先谢谢你了。

cedebl8k

cedebl8k1#

问题是,values.yaml和charts/spark/values.yaml中的值是如何对应的?
简而言之,它们 * 几乎 * 彼此没有任何关系,它们只是各自图表使用的默认值。中版本是,外部图表可以取代下级图表中的值,如果它 * 选择 * 这样做的话,但最终用户在讨论中拥有最终发言权,因为helm --values战胜了默认值(--set用法也是如此,但--values更容易讨论,因为不必深入研究--set DSL)
子图表不知道父图表的默认值。父图表不 * 必须 * 知道子图表的值,并且不能--本身--引用子图表的默认值
根values.yaml中的值是否替换为charts/spark/values.yaml中的值?
但是,正如我们在上面看到的,对于dependencies:列表中的每个- name:键,父图表values.yaml中的顶级键变得很特殊,因为它将值覆盖在下级图表的默认值之上(在{ spark: { path: "/opt/spark" } }的示例中可以看到;该顶级spark:密钥与dependencies:列表中的- name:匹配)
这有点像“鸭子打字”,因为顶级键可以自由使用任何随机结构,而子图表将使用它所知道的结构。例如:


# values.yaml

spark:
  path: /opt/spark
  value-of-pi: 3.1415

在顶部图表的值.yaml中是完全法律的的,即使子Spark图只会注意到{ spark: { path: "" } },因为它在其模板中没有任何{{ .Values.value-of-pi }}
但是,为了清楚起见:即使顶层值. yam 1包括spark: { path: /alpha },它也可以由用户用--values <(echo '{spark: {path: /beta } }')代替,并且当该图表被模板化时,所得到的SparkInstall将具有path: /beta

相关问题