Helm 图表为单个键传递多个环境值

Helm chart passing multiple environment values for single key

我是 helm charts 的新手,我正在尝试将一些环境变量传递给 schema-registry

Values.yaml

replicaCount: 1

image:
  repository: confluentinc/cp-schema-registry
  tag: 5.0.0
  pullPolicy: IfNotPresent
  env:
    - name: "SCHEMA_REGISTRY_KAFKASTORE_BOOTSTRAP_SERVERS"
      value: "PLAINTEXT://xx.xxx.xx.x:9092,PLAINTEXT://xx.xxx.xx.x:9092,PLAINTEXT://xx.xxx.xx.x:9092"
    - name: "SCHEMA_REGISTRY_LISTENERS"
      value: "http://0.0.0.0:8083"

但是这些环境变量并没有传递给pod。

我尝试作为安装命令的一部分传递,但失败了,因为我无法传递多个值,谁能告诉我您是如何传递多个环境变量的

ubuntu@ip-10-xx-x-xx:~/helm-test$ helm install helm-test-0.1.0.tgz --set SCHEMA_REGISTRY_KAFKASTORE_BOOTSTRAP_SERVERS=PLAINTEXT://xx.xxx.xx.xx:9092,PLAINTEXT://xx.xxx.xx.xx:9092,PLAINTEXT://xx.xxx.xx.xx:9092,SCHEMA_REGISTRY_LISTENERS=http://0.0.0.0:8083
Error: failed parsing --set data: key "97:9092" has no value (cannot end with ,)

尝试在 values.yaml 文件内以及安装命令中传递环境值后

replicaCount: 1

image:
  repository: confluentinc/cp-schema-registry
  tag: 5.0.0
  pullPolicy: IfNotPresent
  env:
    - name:
       SCHEMA_REGISTRY_KAFKASTORE_BOOTSTRAP_SERVERS: "PLAINTEXT://10.xxx.x.xx:9092,PLAINTEXT://10.xxx.x.xx:9092,PLAINTEXT://10.xxx.x.xx.xxx:9092"
       SCHEMA_REGISTRY_LISTENERS: "http://0.0.0.0:8083"


helm install helm-test-0.1.0.tgz --set env.name.SCHEMA_REGISTRY_KAFKASTORE_BOOTSTRAP_SERVERS="PLAINTEXT://10.xx.x.xx:9092\,PLAINTEXT://10.xx.x.xx:9092\,PLAINTEXT://10.xx.x.xx:9092", --set env.nameSCHEMA_REGISTRY_LISTENERS="http://0.0.0.0:8083"

我把逗号转义了,因为它抛出了一个错误 错误:解析失败 --set data: key "xxx:9092" has no value (cannot end with ,)

当我尝试描述部署时,我发现我的环境值没有显示。

kubectl describe deployment/crusty-aardwolf-helm-test
Name:                   crusty-aardwolf-helm-test
Namespace:              default
CreationTimestamp:      Wed, 10 Oct 2018 14:23:37 +0000
Labels:                 app.kubernetes.io/instance=crusty-aardwolf
                        app.kubernetes.io/managed-by=Tiller
                        app.kubernetes.io/name=helm-test
                        helm.sh/chart=helm-test-0.1.0
Annotations:            deployment.kubernetes.io/revision=1
Selector:               app.kubernetes.io/instance=crusty-aardwolf,app.kubernetes.io/name=helm-test
Replicas:               1 desired | 1 updated | 1 total | 0 available | 1 unavailable
StrategyType:           RollingUpdate
MinReadySeconds:        0
RollingUpdateStrategy:  25% max unavailable, 25% max surge
Pod Template:
  Labels:  app.kubernetes.io/instance=crusty-aardwolf
           app.kubernetes.io/name=helm-test
  Containers:
   helm-test:
    Image:        confluentinc/cp-schema-registry:5.0.0
    Port:         80/TCP
    Host Port:    0/TCP
    Liveness:     http-get http://:http/ delay=0s timeout=1s period=10s #success=1 #failure=3
    Readiness:    http-get http://:http/ delay=0s timeout=1s period=10s #success=1 #failure=3
    Environment:  <none>

为什么我的环境值没有传递到我的容器?有人能给我指出正确的方向吗?

values.yaml is more for actual values. You can use go template 替换如果你愿意,但它不太常见。 (这些替换稍后会在模板中使用)

当您在例如 helm install --set foo=bar 中指定 --set 时,foo 将被 values.yaml 文件中的 bar 覆盖。你可能真正想要的是这样的:

...
env:
  name:
    SCHEMA_REGISTRY_KAFKASTORE_BOOTSTRAP_SERVERS: "PLAINTEXT://xx.xxx.xx.x:9092,PLAINTEXT://xx.xxx.xx.x:9092,PLAINTEXT://xx.xxx.xx.x:9092"
    SCHEMA_REGISTRY_LISTENERS: "http://0.0.0.0:8083"

然后在 helm install 命令行上:

helm install helm-test-0.1.0.tgz --set env.name.SCHEMA_REGISTRY_KAFKASTORE_BOOTSTRAP_SERVERS="PLAINTEXT://xx.xxx.xx.xx:9092,PLAINTEXT://xx.xxx.xx.xx:9092,PLAINTEXT://xx.xxx.xx.xx:9092" --set env.nameSCHEMA_REGISTRY_LISTENERS="http://0.0.0.0:8083"

有关如何设置值的更多信息 here

在deployment.yaml中,在spec->containers->env下,可以传递name和value。如果你想从values.yaml读取它,也可以使用循环。

env:
  - name: env_name
    value: env_value
  {{- range .Values.image.env }}
  - name: {{ .name }}
    value: {{ tpl .value $ | quote }}
  {{- end }}