использование rbind при монтировании локального тома - PullRequest
0 голосов
/ 05 августа 2020

У меня есть каталог, который настроен для управления с помощью автомонтирования (как описано здесь ). Мне нужно использовать этот каталог (и все каталоги, которые смонтированы внутри) в нескольких модулях в качестве локального постоянного тома.

Я могу запустить автоматическое монтирование в контейнерах, но есть некоторые варианты использования, когда это каталог не пуст при запуске контейнера. Это приводит к тому, что подкаталоги выглядят пустыми и не могут запускать автоматическое монтирование (внутри контейнера)

Я провел небольшое исследование и обнаружил, что при использовании локальных PV существует команда mount -o bind между исходным каталогом и некоторый внутренний каталог, управляемый kubelet ( это - строка в исходном коде). На самом деле мне нужно использовать rbind (рекурсивная привязка - здесь - хорошее объяснение).

Использование rbind также требует некоторых изменений в части, которая отключает том (требуется рекурсивное размонтирование)

Я не хочу патчить кубелет и перекомпилировать его .. пока. Итак, мой вопрос: есть ли какие-то официальные методы для предоставления Kubernetes настраиваемого монтирования / размонтирования?

1 Ответ

0 голосов
/ 19 августа 2020

Тем временем я нашел решение для этого варианта использования.

На основе Kubernetes docs есть что-то под названием Out-Of-Tree Volume Plugins

The Out Плагины томов -of-tree включают интерфейс хранилища контейнеров (CSI) и FlexVolume. Они позволяют поставщикам хранилищ создавать собственные плагины хранилища, не добавляя их в репозиторий Kubernetes.

Даже если CSI рекомендуется использовать, я выбрал FlexVolume для реализации своего настраиваемого драйвера. Здесь - подробная документация.

Этот драйвер на самом деле представляет собой скрипт py, который поддерживает три действия: init / mount / unmount (--rbind используется для монтирования этого каталога, управляемого автоматом монтирования, и размонтирования это как это ). Он развертывается с помощью DaemonSet (документы здесь )

И вот оно!

...