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

Вопрос или проблема

У меня есть приложение, которое требует три конфигурационных файла, которые должны находиться в одной директории. Однако три конфигурационных файла поступают из двух секретов и одного конфигурационного мапа.

Все попытки до сих пор приводили или к ошибке от K8s из-за того, что разные тома имеют одинаковый mountPath (разные subPath), или к созданию директорий в файловом пути, где я хотел получить файл.

Идеальным результатом было бы получение контейнера с:

/app/config/database.json        <-- Файл из секрета 1
/app/config/message_broker.json  <-- Файл из секрета 2
/app/config/app_config.json      <-- Файл из конфигурационного мапа

Это возможно, или это просто ограничение K8s?

Ответ или решение

Да, в Kubernetes возможно смонтировать несколько элементов из разных секретов и конфигурационных карт в одну и ту же директорию, однако для этого необходимо использовать subPath для каждого монтируемого элемента. Ваша задача заключается в правильной настройке конфигурации пода, чтобы избежать ошибок и получить желаемую структуру каталогов.

Для достижения этой цели, вы можете определить несколько томов (volumes) – для каждого секрета и конфигурационной карты, а затем использовать subPath для указания конкретного файла, который будет монтироваться в целевую директорию.

Вот пример манифеста пода, который иллюстрирует данный подход:

apiVersion: v1
kind: Pod
metadata:
  name: my-app
spec:
  containers:
    - name: my-app-container
      image: your-image
      volumeMounts:
        # Монтируем файл database.json из секрета
        - name: secret1
          mountPath: /app/config/database.json
          subPath: database.json

        # Монтируем файл message_broker.json из другого секрета
        - name: secret2
          mountPath: /app/config/message_broker.json
          subPath: message_broker.json

        # Монтируем файл app_config.json из конфигурационной карты
        - name: config-map-volume
          mountPath: /app/config/app_config.json
          subPath: app_config.json

  volumes:
    - name: secret1
      secret:
        secretName: secret1-name

    - name: secret2
      secret:
        secretName: secret2-name

    - name: config-map-volume
      configMap:
        name: config-map-name

В данном примере:

  • secret1 монтируется с файлом database.json по указанному mountPath.
  • secret2 монтируется с файлом message_broker.json по аналогичному пути.
  • Конфигурационная карта монтируется с файлом app_config.json.

Каждый из этих томов использует subPath, что позволяет избежать конфликта между монтированием в одну и ту же директорию.

После применения этого манифеста, вы получите желаемую структуру файлов в директории /app/config/:

/app/config/database.json        <--- Файл из секрета 1
/app/config/message_broker.json  <--- Файл из секрета 2
/app/config/app_config.json      <--- Файл из конфигурационной карты

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

Оцените материал
Добавить комментарий

Капча загружается...