我有一个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
值的最佳方法。
最佳答案
这里的窍门是,Helm模板对您的有状态集合中的序数一无所知。如果您查看Kafka Helm Chart,则会看到他们使用的是基本端口31090
,然后添加了序数,但是替换是在创建模板之后进行的。在您的值(value)观中是这样的:
"advertised.listener": |-
PLAINTEXT://kafka.cluster.local:$((31090 + ${KAFKA_BROKER_ID}))
然后在模板文件中,添加带有
command
的use a bash export under printf
,它是fmt.Sprintf
的别名。在您的情况下是这样的: command:
- sh
- -exc
- |
unset KAFKA_PORT && \
export KAFKA_BROKER_ID=${HOSTNAME##*-} && \
export "KAFKA_ADVERTISED_LISTENERS={{ printf "%s" $advertised.listener }} \\
...
关于kubernetes - Kubernetes | Helm values.yaml-如何使用动态索引访问数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53400038/