Возможно ли автоматически создать несколько пулов RBD с использованием rook-ceph?

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

Может быть, кто-то здесь сможет мне помочь – документация по microk8s / rook-ceph действительно не упоминает это должным образом: поддерживает ли microk8s connect-external-ceph несколько пулов?

Я создал 2 пула на моем microceph-кластере (один из них реплицируемый, другой – 2-1-EC). При подключении этого ceph-кластера к моему k8s с помощью следующей команды:

sudo microk8s connect-external-ceph --no-rbd-pool-auto-create --rbd-pool ssd

все работает хорошо, cephcluster подключается и создается класс хранения:

Имя:                  ceph-rbd
Является стандартным классом:  Нет
Аннотации:           <нет>
Провайдер:           
Параметры:            clusterID=rook-ceph-external,
Разрешить расширение тома:  True
Опции монтирования:          <нет>
Политика рекламации:         Удалить
Режим привязки объема:     Немедленно
События:                <нет>rook-ceph.rbd.csi.ceph.comcsi.storage.k8s.io/controller-expand-secret-name=rook-csi-rbd-provisioner,csi.storage.k8s.io/controller-expand-secret-namespace=rook-ceph-external,csi.storage.k8s.io/fstype=ext4,csi.storage.k8s.io/node-stage-secret-name=rook-csi-rbd-node,csi.storage.k8s.io/node-stage-secret-namespace=rook-ceph-external,csi.storage.k8s.io/provisioner-secret-name=rook-csi-rbd-provisioner,csi.storage.k8s.io/provisioner-secret-namespace=rook-ceph-external,imageFeatures=layering,imageFormat=2,pool=ssd

Как видно, пул ssd используется корректно.

Теперь я хотел бы также подключить мой второй пул mass_storage. Но когда я повторно запускаю sudo microk8s connect-external-ceph --no-rbd-pool-auto-create --rbd-pool mass_storage, я сталкиваюсь с ошибкой:

секрет rook-csi-rbd-node уже существует
секрет csi-rbd-provisioner уже существует
класс хранения ceph-rbd уже существует
Импорт внешнего кластера Ceph
Ошибка: УСТАНОВКА НЕ УДАЛАСЬ: невозможно повторно использовать имя, которое все еще используется

Я ожидаю, что это связано с тем, что rook-ceph пытается заново создать класс хранения “ceph-rbd”.

Как мне с этим справиться? Есть ли способ указать создаваемый класс хранения (например, ceph-mass_storage в моем случае)? Или мне нужно будет вручную создать SC в rook, как описано в документации rook здесь? Буду признателен за помощь.

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

Вопрос, который вы подняли, действительно важен для пользователей, использующих Rook и Ceph с MicroK8s. Давайте детально разберемся, как правильно подключить несколько пулов для хранения данных и избежать распространенных ошибок.

Основная проблема

Вы установили два пула: ssd и mass_storage на вашем кластере Ceph, и успешно подключили первый пул с помощью команды:

sudo microk8s connect-external-ceph --no-rbd-pool-auto-create --rbd-pool ssd

Тем не менее, повторное выполнение команды с параметром --rbd-pool mass_storage приводит к ошибке, связанной с тем, что некоторые компоненты, такие как секреты и классы хранения, уже существуют.

Причины возникновения ошибки

  1. Секреты и классы хранения: Команда connect-external-ceph пытается создать секреты и класс хранения (StorageClass) с тем же именем, что уже существует. Когда вы пытаетесь подключить второй пул, система воспринимает это как попытку повторного использования уже существующих ресурсов, что вызывает ошибку.

  2. Отсутствие опции для указания имени SC: На данный момент, в версиях Rook и Ceph, которые вы, вероятно, используете, нет возможности напрямую указать отличительное имя класса хранения при повторном подключении. Это ограничение препятствует созданию нескольких StorageClass с разными пулами.

Решение проблемы

  1. Создание StorageClass вручную: Рекомендуемый подход в вашем случае — вручную создать класс хранения для второго пула. Это позволит вам контролировать все параметры конфигурации и избегать конфликтов имён.

Следующие шаги помогут вам создать новый класс хранения для пула mass_storage:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: ceph-mass-storage
provisioner: csi.ceph.com/rbd
parameters:
  clusterID: rook-ceph-external
  pool: mass_storage
  csi.storage.k8s.io/fstype: ext4
reclaimPolicy: Delete
volumeBindingMode: Immediate

Сохраните это в файл, например ceph-mass-storage-sc.yaml, и примените его с помощью команды:

kubectl apply -f ceph-mass-storage-sc.yaml
  1. Дополнительные настройки: Проверьте, что все настройки соответствуют вашим требованиям, включая параметры, такие как volumeBindingMode и reclaimPolicy. Эти настройки могут влиять на поведение системы в будущем.

Заключение

Подводя итог, для использования нескольких пулов в MicroK8s с Rook/Ceph, рекомендуется вручную создавать классы хранения, чтобы избежать конфликтов имён и ошибок, связанных с повторным использованием существующих ресурсов. Следуя приведённым советам, вы сможете удобно управлять хранением данных в вашем кластере Kubernetes с помощью нескольких пулов Ceph. Это не только решит текущую проблему, но и обеспечит более гибкое управление ресурсами в будущем.

Если у вас есть дополнительные вопросы или необходима помощь с другими аспектами, не стесняйтесь обращаться.

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

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