Ceph — это масштабируемая распределённая система хранения с высокой доступностью и отказоустойчивостью. Deckhouse Kubernetes Platform (DKP) обеспечивает интеграцию Ceph-кластера при помощи модуля csi-ceph. Это даёт возможность динамически управлять хранилищем и использовать StorageClass на основе RADOS Block Device (RBD) или CephFS.
На этой странице представлены инструкции по подключению Ceph в Deckhouse, настройке аутентификации, созданию объектов StorageClass, а также проверке работоспособности хранилища.
Для работы со снимками требуется подключенный модуль snapshot-controller.
Миграция с модуля ceph-csi
При переключении на модуль csi-ceph с модуля ceph-csi выполняется автоматическая миграция, но её запуск требует предварительной подготовки:
-
Установите количество реплик в ноль для всех операторов (redis, clickhouse, kafka и др.). Исключение: оператор
prometheusбудет отключён автоматически. -
Отключите модуль
ceph-csiи включитеcsi-ceph. -
Дождитесь завершения операции. В логах DKP должно появиться сообщение “Finished migration from Ceph CSI module”.
-
Проверьте работоспособность. Для этого создайте тестовые поды и PVC для проверки CSI.
-
Верните операторы в рабочее состояние (установите количество реплик обратно).
Если Ceph StorageClass был создан не через ресурс CephCSIDriver, потребуется ручная миграция. Обратитесь в техподдержку.
Подключение к Ceph-кластеру
Для подключения Ceph-кластера следуйте пошаговым инструкциям ниже. Все команды выполняйте на машине с административным доступом к API Kubernetes.
-
Выполните команду для активации модуля
csi-ceph:d8 s module enable csi-ceph -
Дождитесь перехода модуля в состояние
Ready:d8 k get module csi-ceph -w -
Убедитесь, что все поды в пространстве имён
d8-csi-cephнаходятся в состоянииRunningилиCompletedи развёрнуты на всех узлах кластера:d8 k -n d8-csi-ceph get pod -owide -w -
Для настройки подключения к Ceph-кластеру примените ресурс CephClusterConnection.
Пример команды:
d8 k apply -f - <<EOF apiVersion: storage.deckhouse.io/v1alpha1 kind: CephClusterConnection metadata: name: ceph-cluster-1 spec: # FSID/UUID Ceph-кластера. # Получить FSID/UUID Ceph-кластера можно с помощью команды `ceph fsid`. clusterID: 2bf085fc-5119-404f-bb19-820ca6a1b07e # Список IP-адресов ceph-mon в формате 10.0.0.10:6789. monitors: - 10.0.0.10:6789 # Имя пользователя без `client.`. # Получить имя пользователя можно с помощью команды `ceph auth list`. userID: admin # Ключ авторизации, соответствующий userID. # Получить ключ авторизации можно с помощью команды `ceph auth get-key client.admin`. userKey: AQDiVXVmBJVRLxAAg65PhODrtwbwSWrjJwssUg== EOF -
Проверьте создание подключения командой (
Phaseдолжна быть в статусеCreated):d8 k get cephclusterconnection ceph-cluster-1 -
Создайте объект StorageClass при помощи ресурса CephStorageClass. Ручное создание StorageClass без использования CephStorageClass может привести к ошибкам.
Пример создания StorageClass на основе RBD:
d8 k apply -f - <<EOF apiVersion: storage.deckhouse.io/v1alpha1 kind: CephStorageClass metadata: name: ceph-rbd-sc spec: clusterConnectionName: ceph-cluster-1 reclaimPolicy: Delete type: RBD rbd: defaultFSType: ext4 pool: ceph-rbd-pool EOFПример создания StorageClass на основе файловой системы Ceph:
d8 k apply -f - <<EOF apiVersion: storage.deckhouse.io/v1alpha1 kind: CephStorageClass metadata: name: ceph-fs-sc spec: clusterConnectionName: ceph-cluster-1 reclaimPolicy: Delete type: CephFS cephFS: fsName: cephfs EOF -
Проверьте, что созданные ресурсы CephStorageClass перешли в состояние
Created:d8 k get cephstorageclassВ результате будет выведена информация о созданных ресурсах CephStorageClass:
NAME PHASE AGE ceph-rbd-sc Created 1h ceph-fs-sc Created 1h -
Проверьте созданный StorageClass:
d8 k get scВ результате будет выведена информация о созданном StorageClass:
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE ceph-rbd-sc rbd.csi.ceph.com Delete WaitForFirstConsumer true 15s ceph-fs-sc rbd.csi.ceph.com Delete WaitForFirstConsumer true 15s
Настройка подключения к Ceph-кластеру завершена. Вы можете использовать созданный StorageClass для создания PersistentVolumeClaim в ваших приложениях.
Дополнительная информация
Получение списка томов RBD, разделённого по узлам
Для мониторинга и диагностики полезно знать, какие RBD-тома подключены к каждому узлу кластера. Следующая команда позволяет получить детальную информацию о маппинге томов:
d8 k -n d8-csi-ceph get po -l app=csi-node-rbd -o custom-columns=NAME:.metadata.name,NODE:.spec.nodeName --no-headers \
| awk '{print "echo "$2"; kubectl -n d8-csi-ceph exec "$1" -c node -- rbd showmapped"}' | bash
Поддерживаемые версии Ceph-кластеров
Модуль csi-ceph предъявляет требования к версии Ceph-кластера, чтобы обеспечить совместимость и стабильную работу. Официально поддерживаются версии Ceph >= 16.2.0. На практике текущая версия модуля обычно работает и с кластерами >= 14.2.0, но для надёжной эксплуатации рекомендуется обновить Ceph до актуальной поддерживаемой версии.
Поддерживаемые режимы работы томов
Различные типы хранилища Ceph поддерживают разные режимы доступа к томам, что важно учитывать при планировании архитектуры приложений.
- RBD — поддерживает только ReadWriteOnce (RWO) — доступ к тому только с одного узла кластера.
- CephFS — поддерживает ReadWriteOnce (RWO) и ReadWriteMany (RWX) — одновременный доступ к тому с нескольких узлов кластера.
Разрешения (caps) для пользователей в Ceph
Для обеспечения корректной работы модуля csi-ceph пользователи Ceph должны иметь соответствующие разрешения (caps). Необходимые разрешения зависят от используемого типа хранилища. Ниже приведены примеры правильных конфигураций разрешений для различных сценариев.
RBD
Для одного пула с названием rbd требуются следующие разрешения:
[client.name]
key = key
caps mgr = "profile rbd pool=rbd"
caps mon = "profile rbd"
caps osd = "profile rbd pool=rbd"
CephFS
Перед настройкой разрешений CephFS убедитесь, что в CephFS создан subvolumegroup csi (или другой, указанный в Custom resources).
Создать новый subvolumegroup можно командой на узле управления Ceph:
ceph fs subvolumegroup create <fs_name> <group_name>
Например, для создания subvolumegroup csi для файловой системы myfs:
ceph fs subvolumegroup create myfs csi
Требуемые разрешения для CephFS с названием myfs:
[client.name]
key = key
caps mds = "allow rwps fsname=myfs"
caps mgr = "allow rw"
caps mon = "allow r fsname=myfs"
caps osd = "allow rw tag cephfs data=myfs, allow rw tag cephfs metadata=myfs"
CephFS + RBD
Для пользователя, которому необходим доступ к CephFS myfs и RBD пулу rbd, объедините разрешения следующим образом:
[client.name]
key = key
caps mds = "allow rwps fsname=myfs"
caps mgr = "allow rw,profile rbd pool=rbd"
caps mon = "allow r fsname=myfs,profile rbd"
caps osd = "allow rw tag cephfs metadata=myfs, allow rw tag cephfs data=myfs,profile rbd pool=rbd"