Конфигурационная карта Kubernetes монтирует один файл вместо каталога

#file #kubernetes #configuration #configmap

Вопрос:

Возможно ли в Kubernetes смонтировать файл из конфигурационной карты в каталог, в котором уже есть другие файлы? Например.

Файловая система базового изображения:

 /app/
  main/
    main.py
    test.py
 

Конфигурационная карта содержит один файл, mounted.py, который должен быть установлен в /app/main/ рядом main.py и test.py.

Требуемая файловая система после развертывания:

 /app/
  main/
    main.py
    test.py
    mounted.py
 

Что я видел до сих пор, так это то, что карта конфигурации смонтирована в новый каталог, поэтому ближе всего я подошел к следующему:

 /app/
  main/
    main.py
    test.py
    mounted/
      mounted.py
 

Если я смонтирую карту конфигурации в /app/main, она удалит существующие файлы из базового образа. Например.

 /app/
  main/
    mounted.py
 

Есть ли хороший способ вставить один такой файл? (На самом деле несколько файлов в моем реальном случае использования.) Я бы предпочел не иметь отдельных каталогов для всего, что будет введено конфигурационными картами, поскольку это отличается от стандартной архитектуры программы.

Ответ №1:

Воспользуйся subPath :

 volumeMounts:
  - name: config
    mountPath: /app/main/mounted.py
    subPath: mounted.py
 

На mountPath нем показано, где он должен быть установлен, и subPath указано на запись внутри тома.

Комментарии:

1. Спасибо! И если том содержит больше, чем просто mounted.py, то только mounted.py будут ли извлечены из него?

2. Правильно, вложенный путь выберет только один элемент из подключенного тома

3. Это отлично работает, за исключением того факта, что обновления конфигурационной карты не отражаются в файлах, смонтированных с помощью subPath. Похоже, что так оно и есть.