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

标签 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值的最佳方法。

最佳答案

这里的窍门是,Helm模板对您的有状态集合中的序数一无所知。如果您查看Kafka Helm Chart,则会看到他们使用的是基本端口31090,然后添加了序数,但是替换是在创建模板之后进行的。在您的值(value)观中是这样的:

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

然后在模板文件中,添加带有commanduse 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/

相关文章:

kubernetes - 在Openshift上部署和公开微服务

kubernetes - 变量值作为 helm 图表中的 yaml 键

ruby - 如何安全加载包含多个文档的 YAML 文件?

R Markdown 2 到 EPUB 如何?

kubernetes - 如何使用 Helm 将额外配置传递给 RabbitMQ?

docker - 如何更新部署到Kubernetes(EKS)的应用程序代码?

Kubernetes:如何使用 persistentVolumeReclaimPolicy: Reclaim 进行动态 PersistentVolumeClaim

docker - 如何解决这个 gitlab ci yaml 错误?职位 :test-on-scdf-tasks config contains unknown keys: trigger

Kubernetes Helm 图表 requirements.yaml 文件依赖项错误条件

kubernetes - 如何使用扩展/缩减策略实现 Kubernetes 水平 pod 自动扩展?