Вы можете подключить хранилище Ceph при создании кластера VMmanager или в карточке кластера. Подробнее см. в статьях Создание кластера и Управление хранилищами кластера.

Статья описывает действия платформы при подключении хранилища Ceph.

Логика работы


Для работы RBD-хранилища VMmanager создаёт пул. Пул — это логический контейнер для хранения данных. Физически пул может находиться на одном или нескольких дисках кластера.

VMmanager создаёт пул со стандартным типом replicated. Работа с пулами типа erasure-code не поддерживается.

 Пулы состоят из групп размещения (PG), в которых хранятся объекты с данными. Требуемое число PG вычисляется по формуле:

PG = OSD * 100 / количество реплик

где OSD — это количество устройств для хранения данных. Результат нужно округлить до ближайшей степени числа 2.

Например, если кластер Ceph состоит из 10 OSD и число репликаций равно 4, то общее число PG = 10 * 100 / 4 = 250. После округления до ближайшей степени числа 2 общее количество PG равно 256.

В процессе подключения VMmanager использует программное обеспечение ceph и инструменты библиотеки libvirt. Подробнее см в документации libvirt и документации ceph по работе с libvirt.

Добавление хранилища


Для добавления хранилища VMmanager:

  1. Подключается с заданными настройками к серверу-монитору кластера Ceph.
  2. Если требуется, создаёт пул с заданными настройками:

    ceph osd pool create <pool-name> <pg-size> <pgp-size>
    CODE

    <pool-name> — имя пула.

    <pg-size> — количество групп размещения (PG).

    <pgp-size> — количество PGP — групп размещения для целей расположения. Оно должно быть равным PG.

  3. Инициализирует пул для работы RBD:

    rbd pool init <pool-name>
    CODE
  4. Если пользователь для работы с пулом уже создан, проверяет его права. Если прав недостаточно, дополняет их.
  5. Если требуется, создаёт нового пользователя для работы с пулом и генерирует ключ аутентификации:

    ceph auth get-or-create client.libvirt mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=<pool-name>'
    CODE
  6. Создаёт файл secret.xml с полученным ключом и добавляет его в качестве "секрета" libvirt:

    virsh secret-define --file secret.xml
    CODE
  7. Получает ключ пользователя:

    ceph auth get-key client.for_ceph
    CODE
  8. Устанавливает ключ пользователя для "секрета" libvirt:

    virsh secret-set-value --secret {uuid of secret} --base64 $(cat client.for_ceph.key)
    CODE
  9. Создаёт пул с "секретом" libvirt.