我有一个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
值的最佳方法。
答案 0 :(得分:1)
这里的窍门是,Helm模板对您的状态集中的序数一无所知。如果您看一下Kafka Helm Chart,就会发现他们使用的是基本端口31090
,然后他们添加了序数,但是在模板创建后“替换”就位了。在您的值中这样的内容:
"advertised.listener": |-
PLAINTEXT://kafka.cluster.local:$((31090 + ${KAFKA_BROKER_ID}))
,然后在模板文件中,将use a bash export under command
和printf
用作fmt.Sprintf
的别名。在您的情况下是这样的:
command:
- sh
- -exc
- |
unset KAFKA_PORT && \
export KAFKA_BROKER_ID=${HOSTNAME##*-} && \
export "KAFKA_ADVERTISED_LISTENERS={{ printf "%s" $advertised.listener }} \\
...