Можно ли получить путь к хосту контейнера из переменной среды?
Я пытаюсь установить настраиваемые пути хоста в kubernetes, но у меня возникают проблемы. Я создал карту конфигурации, которая имеет путь, а затем я пытаюсь заменить заполнитель значением карты конфигурации. Вот моя конфигурация:
apiVersion: apps/v1
kind: Deployment
metadata:
name: php
namespace: app
spec:
template:
spec:
containers:
- name: php
env:
- name: PHP_FOLDER
valueFrom:
configMapKeyRef:
name: local-paths
key: CODE_PATH
volumes:
- name: src-code
hostPath:
path: PHP_FOLDER
type: Directory
Я тоже пробовал
apiVersion: apps/v1
kind: Deployment
metadata:
name: php
namespace: app
spec:
template:
spec:
containers:
- name: php
env:
- name: PHP_FOLDER
valueFrom:
configMapKeyRef:
name: local-paths
key: CODE_PATH
volumes:
- name: src-code
hostPath:
path: $(PHP_FOLDER)
type: Directory
Я либо получаю ошибку: Error response from daemon:
create $(PHP_FOLDER): "$(PHP_FOLDER)" includes invalid characters for a local volume name, only "[a-zA-Z0-9][a-zA-Z0-9_.-]" are allowed. If you intended to pass a host directory, use absolute path
или же MountVolume.SetUp failed for volume "src-code" : hostPath type check failed: PHP_FOLDER is not a directory
3 ответа
Вы просто не можете напрямую использовать значения окружения в файлах yaml. То, что ты сделал на самом деле намного хуже. ConfigMaps или секреты создаются во время выполнения, что означает, что они не будут доступны, пока контейнер не запустится. Однако анализ yaml происходит еще до того, как pod или развертывание даже были созданы. Я думаю, что вам следует больше практиковать сроки, пока вы не используете kubernetes в производстве или даже тестировании.
В этом случае рекомендуется использовать скрипт bash для изменения файла yaml непосредственно перед его развертыванием и его автоматизации.
Как правильно заявили другие пользователи, вы не можете использовать переменные env в обычном yaml/ kubectl. Я предлагаю вам добавить худой слой перед командой развертывания и шаблонировать манифест, например, с помощью envsubst или ansible