Вопрос или проблема
Может быть, кто-то здесь сможет мне помочь – документация по 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
приводит к ошибке, связанной с тем, что некоторые компоненты, такие как секреты и классы хранения, уже существуют.
Причины возникновения ошибки
-
Секреты и классы хранения: Команда
connect-external-ceph
пытается создать секреты и класс хранения (StorageClass) с тем же именем, что уже существует. Когда вы пытаетесь подключить второй пул, система воспринимает это как попытку повторного использования уже существующих ресурсов, что вызывает ошибку. -
Отсутствие опции для указания имени SC: На данный момент, в версиях Rook и Ceph, которые вы, вероятно, используете, нет возможности напрямую указать отличительное имя класса хранения при повторном подключении. Это ограничение препятствует созданию нескольких StorageClass с разными пулами.
Решение проблемы
- Создание 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
- Дополнительные настройки: Проверьте, что все настройки соответствуют вашим требованиям, включая параметры, такие как
volumeBindingMode
иreclaimPolicy
. Эти настройки могут влиять на поведение системы в будущем.
Заключение
Подводя итог, для использования нескольких пулов в MicroK8s с Rook/Ceph, рекомендуется вручную создавать классы хранения, чтобы избежать конфликтов имён и ошибок, связанных с повторным использованием существующих ресурсов. Следуя приведённым советам, вы сможете удобно управлять хранением данных в вашем кластере Kubernetes с помощью нескольких пулов Ceph. Это не только решит текущую проблему, но и обеспечит более гибкое управление ресурсами в будущем.
Если у вас есть дополнительные вопросы или необходима помощь с другими аспектами, не стесняйтесь обращаться.