Kubernetes | Helm values.yaml-如何使用动态索引访问数组

时间:2018-11-20 19:17:57

标签: kubernetes yaml kubernetes-helm

我有一个values.yaml,需要在其中提及多个端口,如下所示:

kafkaClientPort:
  - 32000
  - 32001
  - 32002

在yaml for statefulset中,我需要使用序数获取值。 因此,对于kf-0,我需要放置kafkaClientPort的第一个元素;对于kf-1,第二个元素,依此类推。 我正在尝试以下方法:

args:
- "KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://$(MY_NODE_NAME):{{ index .Values.kafkaClientPort ${HOSTNAME##*-} }}"

但是它显示了一个错误。

请告知什么是动态访问values.yaml值的最佳方法。

1 个答案:

答案 0 :(得分:1)

这里的窍门是,Helm模板对您的状态集中的序数一无所知。如果您看一下Kafka Helm Chart,就会发现他们使用的是基本端口31090,然后他们添加了序数,但是在模板创建后“替换”就位了。在您的值中这样的内容:

"advertised.listener": |-
   PLAINTEXT://kafka.cluster.local:$((31090 + ${KAFKA_BROKER_ID}))

,然后在模板文件中,将use a bash export under commandprintf用作fmt.Sprintf的别名。在您的情况下是这样的:

    command:
    - sh
    - -exc
    - |
      unset KAFKA_PORT && \
      export KAFKA_BROKER_ID=${HOSTNAME##*-} && \
      export "KAFKA_ADVERTISED_LISTENERS={{ printf "%s" $advertised.listener }} \\
      ...