VK Private Cloud logo
Помощь
Обновлена 17 июля 2026 г. в 15:55

Добавление диска на 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 и т.д.

При выполнении плейбука происходит:

  1. Валидация переменных.

    В pre_tasks плейбука проверяется наличие обязательных переменных osd_device и cluster. Если хотя бы одна из них не задана, выполнение аварийно завершается до внесения каких-либо изменений.

  2. Установка зависимостей.

    Устанавливается пакет gdisk, если он не установлен.

  3. Получение FSID кластера.

    С помощью ceph -s запрашивается уникальный идентификатор кластера.

  4. Получение параметров блочных устройств.

    С помощью lsblk собираются серийные номера дисков.

  5. Разметка диска.

    С помощью sgdisk создаются root- и block-партиции с правильными GUID типами для Ceph OSD.

    Количество партиций зависит от параметра ceph_osd_osds_per_disk в файле roles/ceph-containers/defaults/main.yml. Значение по умолчанию — 2.

  6. Создание LVM Volume Group.

    На block-партициях создается VG с уникальным именем ceph-<FSID>-<серийный_номер>.

  7. Создание OSD через Ceph Orchestrator.

    Выполняется команда ceph orch daemon add osd с делегированием на cephadm_host — MON-узел, с которого выполнялось начальное развертывание кластера.

  8. Пауза для инициализации.

    Ожидание, пока 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-узла.

  • Плейбук ceph-add-disk.yml выполняет задачи с делегированием на cephadm_host — MON-узел, с которого производилось начальное развертывание кластера. Убедитесь, что этот узел доступен.

Порядок действий

  1. Убедитесь, что новый физический диск подключен к серверу и виден в системе:

    $ lsblk
  2. С помощью вывода предыдущей команды определите путь к диску. Пример: /dev/sdc.

  3. Убедитесь, что на целевом OSD-узле присутствует CLI Ceph:

    $ ssh <ИМЯ_УЗЛА> "which ceph && ceph -s"
  4. Убедитесь, что на целевом OSD-узле доступны конфигурационные файлы, которые создаются при полном развертывании узла:

    $ ssh <ИМЯ_УЗЛА> "ls -la /etc/ceph/ceph.conf /etc/ceph/ceph.client.admin.keyring"
  5. Перейдите в директорию Inventory:

    $ cd /opt/vkcloud/inventory/vkcloud
  6. Запустите плейбук, указав целевой хост через --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.

  7. После завершения работы плейбука проверьте состояние и работоспособность добавленных OSD и всего кластера Ceph:

    1. Выполните команду:

      $ ceph osd tree

      Проверьте, что новые OSD есть в списке, и убедитесь, что на всех OSD занято примерно одинаковое пространство.

    2. Убедитесь, что OSD находятся в статусах up и in:

      $ ceph osd status
    3. Проверьте состояние кластера:

      $ ceph health

      Убедитесь, что статус кластера HEALTH_OK.

    4. Выполните команду:

      $ ceph -s

      Убедитесь, что все группы размещения (placement groups) находятся в состоянии active+clean.