如果您将某些内容列为图表的依赖项,Helm 将始终尝试将其安装到父图表。它不会在集群中的其他地方寻找另一个安装,也不会尝试从另一个 Helm 版本导入或导出值。
您可能有理由希望将 Kafka 用作跨多个服务的消息传递或事件总线。在这种情况下,您不一定希望将 Kafka 绑定到单个服务;您可以在集群级别或专用硬件上安装它,或者使用它的云托管版本。这意味着您需要两件事:设置是否将 Kafka 作为依赖项安装,以及指向 Kafka 引导服务器的设置。
# values.yaml
# kafka has settings for the Kafka broker.
kafka:
# enabled indicates whether to install Kafka as part of this release.
enabled: true
# bootstrapServers is a comma-separated list of HOST:PORT indicating
# the location of at least one known Kafka broker. Only used if
# enabled is false.
bootstrapServers: ''
在您的图表需求中,您可以specify a condition 使依赖项仅在设置值时安装:
dependencies:
- name: kafka
version: ^14
repository: https://charts.bitnami.com/bitnami
condition: kafka.enabled # <--- add this line
最后,您需要使用模板逻辑将正确的 Kafka 地址传递给应用程序。
env:
- name: KAFKA_BOOTSTRAP_SERVERS
{{- if .Values.kafka.enabled }}
value: {{ .Release.Name }}-kafka:9092
{{- else }}
value: {{ .Values.kafka.bootstrapServers }}
{{- end }}
然后在安装图表时,您可以指定使用本地或远程 Kafka。
helm install chart-with-local-kafka .
# --set kafka.enabled=true # on by default
helm install chart-with-remote-kafka . \
--set kafka.enabled=false \
--set kafka.bootstrapServers=kafka.infra.example.com:9092