Можно ли получить путь к хосту контейнера из переменной среды?

Я пытаюсь установить настраиваемые пути хоста в 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

Вы не можете использовать переменную для определения пути.

Другие вопросы по тегам