Добавление диска на OSD-узел
Если на OSD-узле появился новый диск, например после замены или добавления физического диска, его можно добавить в кластер без перезапуска всего узла и без повторного выполнения полного плейбука.
Функция add-disk позволяет добавить один конкретный диск на уже развернутый OSD-узел, не выполняя полную инициализацию: установку с нуля (bootstrap), конфигурацию Ceph и настройку VK Private Cloud.
Эта функция реализована в виде отдельного плейбука ceph-add-disk.yml.
Плейбук вызывает только задачу add-disk.yml из роли ceph-containers через include_role с параметром tasks_from.
Это обеспечивает загрузку всех переменных роли из defaults/main.yml, но не выполняет задачи полного развертывания, такие как install.yml, config.yml, osdinit.yml и т.д.
При выполнении плейбука происходит:
-
Валидация переменных.
В
pre_tasksплейбука проверяется наличие обязательных переменныхosd_deviceиcluster. Если хотя бы одна из них не задана, выполнение аварийно завершается до внесения каких-либо изменений. -
Установка зависимостей.
Устанавливается пакет
gdisk, если он не установлен. -
Получение FSID кластера.
С помощью
ceph -sзапрашивается уникальный идентификатор кластера. -
Получение параметров блочных устройств.
С помощью
lsblkсобираются серийные номера дисков. -
Разметка диска.
С помощью
sgdiskсоздаются root- и block-партиции с правильными GUID типами для Ceph OSD.Количество партиций зависит от параметра
ceph_osd_osds_per_diskв файлеroles/ceph-containers/defaults/main.yml. Значение по умолчанию —2. -
Создание LVM Volume Group.
На block-партициях создается VG с уникальным именем
ceph-<FSID>-<серийный_номер>. -
Создание OSD через Ceph Orchestrator.
Выполняется команда
ceph orch daemon add osdс делегированием наcephadm_host— MON-узел, с которого выполнялось начальное развертывание кластера. -
Пауза для инициализации.
Ожидание, пока OSD поднимется в кластере. Длительность ожидания задана в
ceph_osd_init_timeи по умолчанию занимает 10 секунд.
Перед началом работы ознакомьтесь с особенностями добавления диска на OSD-узел:
-
Функция
add-diskпредназначена только для добавления нового диска на уже работающий OSD-узел. Для добавления нового узла целиком используйте стандартную процедуру (подробнее — в разделе Добавление узла с ролью OSD в кластер). -
Диск, указанный в
osd_device, будет полностью переразмечен, все существующие данные на нем будут удалены. -
Количество OSD, которое будет создано на одном диске, определяется параметром
ceph_osd_osds_per_diskв файлеroles/ceph-containers/defaults/main.yml.Значение по умолчанию —
2. Оно может быть переопределено в групповых переменных Inventory. -
Размер root-партиции для каждого OSD определяется параметром
ceph_osd_root_vol_size. Значение по умолчанию —307200кибибайт = 300 мебибайт. -
После добавления OSD может потребоваться время на ребалансировку PG, поэтому статус
HEALTH_OKможет установиться не сразу. -
Для работы плейбука на целевом хосте должны присутствовать:
- CLI Ceph (
/usr/bin/ceph), - конфигурационный файл (
/etc/ceph/ceph.conf), - admin keyring (
/etc/ceph/ceph.client.admin.keyring).
Конфигурационные файлы создаются при полном развертывании узла через
ceph-containers.yml. Если узел не проходил полное развертывание, предварительно выполните его добавление как нового OSD-узла. - CLI Ceph (
-
Плейбук
ceph-add-disk.ymlвыполняет задачи с делегированием наcephadm_host— MON-узел, с которого производилось начальное развертывание кластера. Убедитесь, что этот узел доступен.
-
Убедитесь, что новый физический диск подключен к серверу и виден в системе:
$ lsblk -
С помощью вывода предыдущей команды определите путь к диску. Пример:
/dev/sdc. -
Убедитесь, что на целевом OSD-узле присутствует CLI Ceph:
$ ssh <ИМЯ_УЗЛА> "which ceph && ceph -s" -
Убедитесь, что на целевом OSD-узле доступны конфигурационные файлы, которые создаются при полном развертывании узла:
$ ssh <ИМЯ_УЗЛА> "ls -la /etc/ceph/ceph.conf /etc/ceph/ceph.client.admin.keyring" -
Перейдите в директорию Inventory:
$ cd /opt/vkcloud/inventory/vkcloud -
Запустите плейбук, указав целевой хост через
--limitи обязательные переменные через-e:$ ansible-playbook -i vkcloud.yml ../ansible-openstack/playbooks/ceph-add-disk.yml \-e env=vkcloud \-e cluster=ceph \-e osd_device=/dev/sdc \--limit <ИМЯ_УЗЛА>Здесь:
<ИМЯ_УЗЛА>— имя узла, на который добавлен диск. Пример:csn005.cluster— имя Ceph-кластера. Соответствует ключу вclusters_ceph, обычно —ceph.osd_device— путь к новому диску. Пример:/dev/sdc.
В отличие от полного развертывания плейбук
ceph-add-disk.ymlне требует указания тегов. Он содержит только один плей (play) с единственной задачейadd-disk. -
После завершения работы плейбука проверьте состояние и работоспособность добавленных OSD и всего кластера Ceph:
-
Выполните команду:
$ ceph osd treeПроверьте, что новые OSD есть в списке, и убедитесь, что на всех OSD занято примерно одинаковое пространство.
-
Убедитесь, что OSD находятся в статусах
upиin:$ ceph osd status -
Проверьте состояние кластера:
$ ceph healthУбедитесь, что статус кластера
HEALTH_OK. -
Выполните команду:
$ ceph -sУбедитесь, что все группы размещения (placement groups) находятся в состоянии
active+clean.
-