TL; DR
Могу ли я сослаться на ранее определенную пару ключ-значение в ConfigMap?
Полная версия
Я пишу спецификацию развертывания для приложения, которое принимает
его конфигурация из переменных окружения при запуске. Некоторые из
переменные окружения получены из других. Если бы я устанавливал
их как файл, который будет получен при запуске приложения, я бы просто
делать:
[me@myserver ~]$ cat ./myenv.sh
export FOO=foo
export BAR=bar
export FOOBAR=$FOO$BAR
[me@myserver ~]$ . ./myenv.sh
[me@myserver ~]$ printenv FOOBAR
foobar
Тем не менее, аналогичный способ сделать это в ConfigMap путем ссылки
ранее определенные пары ключ-значение не работают (см. пример ConfigMap
и Pod, ниже). Вот результаты:
[me@myserver ~]$ kubectl create -f my-app-config.yaml -f my-app-pod.yaml
configmap "my-app" created
pod "my-app" created
[me@myserver ~]$ kubectl exec -it my-app -- printenv | grep MY_CONFIGMAP
MY_CONFIGMAP_FOO=foo
MY_CONFIGMAP_FOOBAR=$(MY_CONFIGMAP_FOO)$(MY_CONFIGMAP_BAR)
MY_CONFIGMAP_BAR=bar
Значение для MY_CONFIGMAP_FOOBAR
рассчитано на foobar
.
Я попытался применить следующие инструкции под
Использовать переменные среды, определенные в ConfigMap, в командах Pod
из документации:
Вы можете использовать переменные среды, определенные в ConfigMap, в command
раздел спецификации Pod с использованием $(VAR_NAME)
Синтаксис замещения Кубернетеса.
Однако это, очевидно, не сработало, и я не смог найти
ответьте в моем исследовании.
Я подозреваю, что уже знаю ответ, но есть ли способ выполнить
это?
ConfigMap
apiVersion: v1
kind: ConfigMap
metadata:
name: my-app
data:
MY_CONFIGMAP_FOO: foo
MY_CONFIGMAP_BAR: bar
# Desired concatenation would be `foobar`
MY_CONFIGMAP_FOOBAR: $(MY_CONFIGMAP_FOO)$(MY_CONFIGMAP_BAR)
Pod
apiVersion: v1
kind: Pod
metadata:
name: my-app
spec:
containers:
- name: my-app
image: alpine
imagePullPolicy: IfNotPresent
envFrom:
- configMapRef:
name: my-app
command:
- /bin/sh
args:
- -c
- "while true; do sleep 3600; done"