Как разместить весь каталог и его подкаталоги с помощью ConfigMap в модуле Kubernetes на многоузловом кластере? - PullRequest
0 голосов
/ 15 октября 2019

Проблема

  • Мы хотим повторно использовать один и тот же образ
  • У нас разные статические файлы (например, css), которые должны различаться в разных развертываниях. Структура папок этих файлов должна быть сохранена.

например:

  1. test1.xml
  2. test2.xml
  3. макет

Мы должны поместить эти файлы один раз (при запуске) в Pod.

Насколько я знаю, я могу создать только одну ConfigMap из всех файлов на одном уровне каталогов, и я должен воссоздать структуру.

например,

kubectl create configmap style-files --from-file=.

В нашем примере выше,эта команда создаст ConfigMap только для xml-файлов.

Ожидаемое поведение

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

Вопрос

Есть ли какая-то концепция, которая предназначена для моего варианта использования илиЯ должен использовать ConfigMaps?

Ответы [ 3 ]

1 голос
/ 15 октября 2019

Вы можете предоставить архивный файл в месте, доступном из кластера (например, хранилище s3 или простой http-сервер), и использовать карту конфигурации для настройки правильного URL-адреса модуля для загрузки файлов. Для загрузки и извлечения архива вы можете использовать контейнер init в сочетании с монтированием тома.

Дополнительная информация о контейнерах init: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/

0 голосов
/ 16 октября 2019

Файлы примеров в каталоге:

.
├── test21.css
├── test22.css
├── test2.xml
└── test.xml

Create configmap:
    kubectl create configmap example --from-file=./

пример configmap:

apiVersion: v1
data:
  test.xml: |
    test1
    test1
  test2.xml: |
    test2
    test2
  test21.css: |
    test21
    test21
  test22.css: |
    test22
    test22
kind: ConfigMap

Пример модуля с томом, на который проецируются ключи ConfigMap:

apiVersion: v1
kind: Pod
metadata:
  name: busy
spec:
  containers:
  - name: busybox
    image: k8s.gcr.io/busybox
    command: ["/bin/sh"]
    args: ["-c", "sleep 200"]
    volumeMounts:
    - mountPath: /test
      name: data1
  volumes:
    - name: data1
      configMap:
        name: example
        items:
        - key: test.xml
          path: test.xml
        - key: test2.xml
          path: test2.xml
        - key: test21.css
          path: layout/test21.css
        - key: test22.css
          path: layout/test22.css

Примечание:

Вы можете проецировать ключи на определенные пути и определенные разрешения для каждого файла отдельно.

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

apiVersion: v1
kind: Pod
metadata:
  name: busy
spec:
  containers:
  - name: busybox
    image: k8s.gcr.io/busybox
    command: ["/bin/sh"]
    args: ["-c", "sleep 200"]
    volumeMounts:
    - mountPath: /test
      name: data1
  volumes:
    - name: data1
      projected:
        sources:
        - configMap:
            name: example
            items:
              - key: test.xml
                path: test.xml
              - key: test2.xml
                path: test2.xml
              - key: test21.css
                path: layout/test21.css
              - key: test22.css
                path: layout/test22.css

Другой подход заключается в использовании файла zip / jar в качестве configmap (двоичный файл поддержки configmap), поэтому послеего можно распаковать в нужный путь внутри контейнера или с помощью контейнера init для подготовки соответствующей структуры папок или создания образов с повторно заполненными данными.

Ресурсы:

Надеюсь, что эта помощь.

0 голосов
/ 15 октября 2019

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

Монтируйте один с вашим XML в /your/path/, а другой, содержащийCSS для /your/path/layout.

Может потребоваться умное использование клавиши subpath, чтобы избежать первой cm перезаписи 2 nd .

...