Я вижу, что у вас есть некоторые проблемы с передачей различных переменных среды для разных модулей в StatefulSet.
Вы пытаетесь достичь этого с помощью шаблонов helm:
- name: KAFKA_CFG_ADVERTISED_LISTENERS
{{- if $MY_POD_NAME := "kafka-0" }}
value: 'PLAINTEXT://{{ .Values.advertisedListeners1 }}:9092'
{{- else if $MY_POD_NAME := "kafka-1" }}
value: 'PLAINTEXT://{{ .Values.advertisedListeners2 }}:9092'
{{- else if $MY_POD_NAME := "kafka-2" }}
value: 'PLAINTEXT://{{ .Values.advertisedListeners3 }}:9092'
{{- end }}
В Руководство по шаблону helm Вы можете найти это объяснение:
В шаблонах Helm переменная является именованной ссылкой на другой объект. Это следует за формой $ name. Переменные назначаются с помощью специального оператора присваивания:: =.
Теперь давайте посмотрим на ваш код:
{{- if $MY_POD_NAME := "kafka-0" }}
Это присваивание переменной, а не сравнение и после этого присваивания, if
оператор оценивает это выражение как true
, и поэтому в вашем манифесте staefulset yaml
вы видите это как вывод:
- name: KAFKA_CFG_ADVERTISED_LISTENERS
value: PLAINTEXT://10.21.0.191:9092
Чтобы заставить его работать должным образом, вам не следуетиспользовать шаблонный шлем. Это не сработает.
Один из способов сделать это - создать отдельную переменную окружения для каждого узла kafka и передать все эти переменные всем модулям, например:
- env:
- name: MY_POD_NAME
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.name
- name: KAFKA_0
value: 10.21.0.191
- name: KAFKA_1
value: 10.21.0.192
- name: KAFKA_2
value: 10.21.0.193
# - name: KAFKA_CFG_ADVERTISED_LISTENERS
# value: PLAINTEXT://$MY_POD_NAME:9092
а также создайте свой собственный образ докера с измененным стартовым скриптом, который будет экспортировать переменную KAFKA_CFG_ADVERTISED_LISTENERS
с соответствующим значением в зависимости от MY_POD_NAME
.
Если вы не хотите создавать свой собственный образ, вы можете создать ConfigMap
с измененным entrypoint.sh
и смонтируйте его вместо старого entrypoint.sh
(вы также можете использовать любой другой файл, просто посмотрите здесь для получения дополнительной информации о том, как создается образ kafka).
Монтаж ConfigMap
выглядит следующим образом:
apiVersion: v1
kind: Pod
metadata:
name: test
spec:
containers:
- name: test-container
image: docker.io/bitnami/kafka:2.3.0-debian-9-r88
volumeMounts:
- name: config-volume
mountPath: /entrypoint.sh
subPath: entrypoint.sh
volumes:
- name: config-volume
configMap:
# Provide the name of the ConfigMap containing the files you want
# to add to the container
name: kafka-entrypoint-config
defaultMode: 0744 # remember to add proper (executable) permissions
apiVersion: v1
kind: ConfigMap
metadata:
name: kafka-entrypoint-config
namespace: default
data:
entrypoint.sh: |
#!/bin/bash
# Here add modified entrypoint script
Пожалуйста, дайте мне знать, если это помогло.