kubernetes舵:如何在父图表中设置子图表的环境变量

时间:2019-06-04 18:31:52

标签: kubernetes kubernetes-helm

我们正在使用掌舵来部署许多图表,但为简单起见,我们假设它是两个图表。父图表和子图表:

helm/parent 
helm/child

父图表具有一个helm/parent/requirements.yaml文件,该文件指定:

dependencies:
  - name: child
    repository: file://../child
    version: 0.1.0

子图表在启动时需要一堆环境变量以进行配置,例如在helm/child/templates/deployment.yaml

apiVersion: extensions/v1beta1
kind: Deployment
spec:
  replicas: 1
  strategy:
    type: Recreate
  template:
    spec:
      containers:
        env:
        - name: A_URL
          value: http://localhost:8080

从父级图表覆盖子级环境变量的最佳方法是什么,以便我可以使用以下命令运行父级并将此实例的A_URL env变量设置为例如https://www.mywebsite.com

helm install parent --name parent-release --namespace sample-namespace

我尝试将变量添加到父级的helm/parent/values.yaml文件中,但无济于事

global:
  repository: my_repo
  tag: 1.0.0-SNAPSHOT
child:
  env:
    - name: A_URL
      value: https://www.mywebsite.com

父母的value.yaml的语法正确吗?有其他方法吗?

2 个答案:

答案 0 :(得分:1)

除非使用模板系统设置该值,否则无法在Helm 2中直接对其进行修改。

答案 1 :(得分:1)

在子图表中,您必须从配置中显式引用一个值。 (进行了此更改后,您可能需要从父图表目录运行helm dependency update。)

# child/templates/deployment.yaml, in the pod spec
env:
- name: A_URL
  value: {{ .Values.aUrl | quote }}

您可以为其指定子图表的默认值。

# child/values.yaml
aUrl: "http://localhost:8080"

然后在父图表的值文件中,您可以为其提供替代值。

# parent/values.yaml
child:
  aUrl: "http://elsewhere"

除非模板允许,否则您不能使用Helm覆盖或注入任意YAML。