Вы можете подключить хранилище Ceph при создании кластера VMmanager или в карточке кластера. Подробнее см. в статьях Создание кластера и Управление хранилищами кластера.
Статья описывает действия платформы при подключении хранилища Ceph.
Логика работы
Для работы RBD-хранилища VMmanager создаёт пул. Пул — это логический контейнер для хранения данных. Физически пул может находиться на одном или нескольких дисках кластера.
Пулы состоят из групп размещения (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:
- Подключается с заданными настройками к серверу-монитору кластера Ceph.
-
Если требуется, создаёт пул с заданными настройками:
ceph osd pool create <pool-name> <pg-size> <pgp-size>
Пояснения к команде -
Инициализирует пул для работы RBD:
rbd pool init <pool-name>
- Если пользователь для работы с пулом уже создан, проверяет его права. Если прав недостаточно, дополняет их.
-
Если требуется, создаёт нового пользователя для работы с пулом и генерирует ключ аутентификации:
ceph auth get-or-create client.libvirt mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=<pool-name>'
-
Создаёт файл secret.xml с полученным ключом и добавляет его в качестве "секрета" libvirt:
virsh secret-define --file secret.xml
-
Получает ключ пользователя:
ceph auth get-key client.for_ceph
-
Устанавливает ключ пользователя для "секрета" libvirt:
virsh secret-set-value --secret {uuid of secret} --base64 $(cat client.for_ceph.key)
- Создаёт пул с "секретом" libvirt.