Kubernetes монтирует том в существующий каталог с файлами внутри контейнера - PullRequest
2 голосов
/ 27 сентября 2019

Я использую k8s с версией 1.11 и CephFS в качестве хранилища.

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

Том

{
  "name": "cephfs-0",
  "cephfs": {
    "monitors": [
      "10.0.1.165:6789",
      "10.0.1.103:6789",
      "10.0.1.222:6789"
    ],
    "user": "cfs",
    "secretRef": {
      "name": "ceph-secret"
    },
    "readOnly": false,
    "path": "/cfs/data/conf"
  }
}

volumeMounts

{
  "mountPath": "/opt/myapplication/conf",
  "name": "cephfs-0",
  "readOnly": false
} 

Монтирование работает правильно.Я вижу директорию ceph, т.е. / cfs / data / conf, монтируемую в / opt / myapplication / conf, но моя проблема заключается в следующем.

У меня уже есть файлы конфигурации как часть образа докера в местоположении /выбрать / MyApplication / конф.Когда развертывание пытается смонтировать том ceph, все файлы в каталоге / opt / myapplication / conf исчезают.Я знаю, что это поведение операции монтирования, но есть ли способ сохранить существующие файлы в контейнере на томе, который я монтирую, чтобы другой модуль, монтирующий тот же том, мог получить доступ к конфигурациифайлы.т.е. файлы, которые уже находятся внутри модуля в каталоге / opt / myapplication / conf, должны быть доступны на CephFS в каталоге /cfs/data/conf.

Возможно ли это?

Я просмотрел документ докера, и в нем упоминается, что

Заполнение тома с помощью контейнера. Если вы запускаете контейнер, который создает новый том, как указано выше, и у контейнера есть файлы или каталоги в каталоге, чтобыпри монтировании (например, / app / вышеуказанное) содержимое каталога копируется в том.Затем контейнер монтирует и использует том, а другие контейнеры, использующие том, также имеют доступ к предварительно заполненному контенту.

Это соответствует моему требованию, но как этого достичь с томами k8s?

1 Ответ

3 голосов
/ 27 сентября 2019

К сожалению, система томов Kubernetes сильно отличается от Docker, поэтому это невозможно сделать напрямую.Если существует один файл (или небольшое число), вы можете использовать проекцию subPath, например:

volumes:
- name: cephfs-0
  mountPath: /opt/myapplication/conf/foo.conf
  subPath: foo.conf

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

...