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

Подключение четвертой и последующих СХД

Здесь описана интеграция новой СХД в инсталляции VK Private Cloud 4.3, к которой уже подключены три СХД. Новая СХД будет подключена по iSCSI с использованием сети Ceph External.

В результате выполнения инструкции будет создан новый бэкенд Cinder (в примерах — sharedlun4) для работы с дисками на четвертой СХД.

Перед началом работы

Перед началом работы убедитесь, что:

  • Версия VK Private Cloud — 4.3.
  • Бэкенд Cinder по умолчанию — Ceph (cinder_default_volume_type: ceph).
  • К VK Private Cloud через NVMeBox подключены три внешние СХД.
  • (Опционально) Создана отдельная виртуальная машина для имитации внешней СХД, у которой:
    • 1 дополнительный диск data объемом 300–500 ГБ.
    • 2 сетевых интерфейса:
      • Management — для управления;
      • Ceph External — для подключения к узлам VK Private Cloud.
    • Отключены файервол (firewall) и SELinux.

Шаг 1. (Опционально) Имитация внешней СХД (iSCSI target)

На виртуальной машине, которая будет выполнять роль внешней СХД:

  1. Установите targetcli:

    # dnf install -y targetcli
  2. Запустите targetcli:

    # systemctl enable target --now
  3. Определите имя диска, который будет использоваться как LUN:

    # lsblk

    Пример вывода:

    NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTvda    253:0    0   10G  0 disk└─vda1 253:1    0   10G  0 part /vdb    253:16   0  500G  0 disk

    Здесь vdb — диск, который будет использоваться как LUN.

  4. Создайте LUN и iSCSI-таргет в соответствии с примером:

    # targetcli << EOF/backstores/block create lun1 /dev/vdb/iscsi create iqn.2026-02.local.storage/iscsi/iqn.2026-02.local.storage/tpg1/portals delete 0.0.0.0 3260/iscsi/iqn.2026-02.local.storage/tpg1/portals create <IP-АДРЕС> 3260/iscsi/iqn.2026-02.local.storage/tpg1/luns create /backstores/block/lun1/iscsi/iqn.2026-02.local.storage/tpg1/acls create iqn.2026-02.local.cpn001:6/iscsi/iqn.2026-02.local.storage/tpg1/acls create iqn.2026-02.local.cpn002:7/iscsi/iqn.2026-02.local.storage/tpg1/acls create iqn.2026-02.local.cpn003:8/iscsi/iqn.2026-02.local.storage/tpg1/acls create iqn.2026-02.local.kcn001:50/iscsi/iqn.2026-02.local.storage/tpg1/acls create iqn.2026-02.local.kcn002:51saveconfigEOF

    Здесь <IP-АДРЕС> — IP-адрес интерфейса из сети Ceph External.

    Имена iSCSI-инициаторов (ACL) для каждого узла вашего кластера (cpn00X и kcn00X) должны совпадать с теми, которые использовались при подключении остальных СХД к VK Private Cloud.

  5. Проверьте созданную конфигурацию:

    # targetcli ls

Шаг 2. Подключение iSCSI-таргета к узлам VK Private Cloud

Подключите iSCSI-таргет на каждом узле, который будет использовать NVMeBox:

  • на управляющих узлах (cpn001, cpn002, cpn003);
  • на вычислительных узлах (kcn001, kcn002).

Чтобы подключить iSCSI-таргет к узлу:

  1. Выполните поиск (discovery) iSCSI-таргета на новой СХД:

    # iscsiadm -m discovery -t sendtargets -p <IP-АДРЕС> -o new

    Здесь <IP-АДРЕС> — IP-адрес iSCSI-таргета.

    Пример вывода:

    <IP-АДРЕС>:3260,1 iqn.2026-02.local.storage

    Здесь iqn.2026-02.local.storage — имя iSCSI-таргета.

  2. Подключитесь к найденному iSCSI-таргету:

    # iscsiadm -m node -T <iSCSI-ТАРГЕТ> -p <IP-АДРЕС> -l

    Здесь:

    • <iSCSI-ТАРГЕТ> — имя iSCSI-таргета.
    • <IP-АДРЕС> — IP-адрес iSCSI-таргета.

    Пример команды подключения:

    # iscsiadm -m node -T iqn.2026-02.local.storage -p <IP-АДРЕС> -l
  3. Проверьте, что появился новый диск, и скопируйте его WWID:

    # lsblk

    Пример вывода:

    sdi               8:16   0  500G  0 disk└─36001405b121a79 253:17 0  500G  0 mpath

    Здесь 36001405b121a79 — WWID диска.

  4. Добавьте новый LUN в конфигурацию Multipath. Для этого в файле /etc/multipath.conf добавьте блок с уникальным псевдонимом (alias).

    Пример добавления псевдонима диска:

    multipath {    wwid 36001405b121a79    alias vm-lun4}

    Здесь vm-lun4 — псевдоним диска с идентификатором 36001405b121a79.

  5. Перезапустите Multipath:

    # systemctl restart multipathd
  6. Проверьте, что диск появился с правильным псевдонимом:

    # lsblk

    Пример вывода:

    ...sdi               8:16   0  500G  0 disk└─vm-lun4        253:1   0  500G  0 mpath...

Шаг 3. Создание и настройка нового кластера NVMeBox

  1. Подключитесь к управляющему узлу (подробнее — в разделе Подключение к управляющему узлу).

  2. Перейдите в директорию /etc/nvmebox.

  3. Создайте копии конфигурационных файлов одного из существующих кластеров NVMeBox:

    cp auth-<СУЩЕСТВУЮЩИЙ_КЛАСТЕР> auth-<НОВЫЙ_КЛАСТЕР> && \cp config-<СУЩЕСТВУЮЩИЙ_КЛАСТЕР>.json config-<НОВЫЙ_КЛАСТЕР>.json && \cp runtime-<СУЩЕСТВУЮЩИЙ_КЛАСТЕР> runtime-<НОВЫЙ_КЛАСТЕР>

    Здесь:

    • <СУЩЕСТВУЮЩИЙ_КЛАСТЕР> — имя существующего кластера.
    • <НОВЫЙ_КЛАСТЕР> — имя нового кластера.

    Пример копирования файлов существующего кластера sharedlun3 для нового sharedlun4:

    cp auth-sharedlun3 auth-sharedlun4 && \cp config-sharedlun3.json config-sharedlun4.json && \cp runtime-sharedlun3 runtime-sharedlun4
  4. Отредактируйте параметры в конфигурационном файле нового кластера config-<ИМЯ_КЛАСТЕРА>.json. Пример:

    {      "version": 1,      "cluster_name": "sharedlun4",      "profile": "sharedlun",      "vg_name": "slvg-4",      "api_addr": "10.30.3.103",      "target_addr": "10.30.3.103",      "target_port": 4420,      "lock_lv": "config",      "api_port": 6601,      "data_vg_name": "slvg-4",      "iscsi_port": 3261,      "clustered_data_vg": true,      "fip_provider": "exabgp",      "extra_opts": {},      "ignore_auth": false,      "login": "nvmebox",      "password": "$sha256$axxxxxxxxxxxxxxxxxxxxxxxxxxxx",      "readonly_login": "nvmeboxview",      "readonly_password": "$sha256xxxxxxxxxxxxxxxxxxxxxxxxxxx"    }

    Основные параметры:

    • cluster_name — уникальное имя кластера.

    • api_addr — уникальный Floating IP-адрес для API нового кластера.

    • target_addr — значение должно совпадать с api_addr.

    • data_vg_name — имя группы дисков (Volume Group), которая будет создана на новом диске.

  5. Подготовьте новый диск с помощью утилиты nvmebox-manage:

    # nvmebox-manage format <НОВЫЙ_КЛАСТЕР> --cluster_pv_device /dev/mapper/<ИМЯ_ДИСКА>

    Пример подготовки диска vm-lun4:

    # nvmebox-manage format sharedlun4 --cluster_pv_device /dev/mapper/vm-lun4
  6. Запустите сервис нового кластера на управляющих узлах. Для этого на каждом из управляющих узлов выполните команду:

    # systemctl start sharedlun-cluster@<НОВЫЙ_КЛАСТЕР>

    Пример для кластера sharedlun4:

    # systemctl start sharedlun-cluster@sharedlun4
  7. Проверьте статус и доступное пространство нового кластера:

    nvmebox-manage capacity <НОВЫЙ_КЛАСТЕР> --password <ПАРОЛЬ>

    Здесь:

    • <НОВЫЙ_КЛАСТЕР> — название нового кластера NVMeBox.
    • <ПАРОЛЬ> — пароль из файла /etc/nvmebox/auth-<НОВЫЙ_КЛАСТЕР>.

    Пример для кластера sharedlun4:

    nvmebox-manage capacity sharedlun4 --password <ПАРОЛЬ>

    Пример вывода:

    Cluster: sharedlun4    Profile: sharedlun    API address: 10.30.3.103    Target address: 10.30.3.103    NVMe/TCP port: 4420    iSCSI port: 3261    API port: 6601    Lock VG name: slvg-4    Data VG name: slvg-4    Lock LV name: configCurrently master: cpn001 = cpn001Name: all    Size: 1073599217664 (499.8GB)    Reserved: 214719843532 (99.9GB)    Used: 43251662848 (0.2GB)    Available: 815627711284 (399.6GB)
  8. Убедитесь, что в логах отсутствуют ошибки:

    # tail -f /var/log/infra-latest/nvmebox-sharedlun.<УЗЕЛ>.all.log

    Здесь <УЗЕЛ> — название управляющего узла.

Шаг 4. Внесение изменений в Ansible Inventory

  1. Перейдите в директорию /opt/vkcloud/inventory/vkcloud.

  2. Откройте файл group_vars/vkcloud_kube/solar-helium.yml.

  3. Найдите переменную helm_mcs_app_cfg_name и скопируйте ее значение.

    Пример переменной со значением:

    helm_mcs_app_cfg_name: commonBox_4.3v5
  4. В соответствии со значением переменной откройте для редактирования файл:

    files/front_config/<ЗНАЧЕНИЕ_ПЕРЕМЕННОЙ>.config.json.j2
  5. Добавьте в конфигурационный файл новую СХД.

    Пример параметров:

    ...        "volumeTypeGroups": {		  ...          "nvmebox": [            ...            "nvmebox-type4"            ...        },        "volumeTypes": [          ...          {            "availabilityZoneChangingDisabled": false,            "availabilityZones": [              {                "quantityQuotaName": "volumes",                "totalSizeQuotaName": "gigabytes",                "zoneName": "AZ1"              }            ],            "ephemeral": false,            "geoReplication": false,            "groupName": "nvmebox",            "isCreationDisabled": false,            "localizedVolumeTypeName": {              "en": "External disk (DAS-4)",              "kk": "Внешний диск (СХД-4)",              "ru": "Внешний диск (СХД-4)"            },            "maxVolumeSize": 1099511627776,            "maxVolumeSizeForPayingClient": 5497558138880,            "priceItemName": "nvmebox_disk_type1",            "sla": null,            "unavailableServices": [],            "volumeTypeName": "nvmebox-type4"          },          ...
  6. Добавьте новую СХД в файл group_vars/vkcloud_cinder_nvmebox/vars.yml.

    Пример параметров:

    volume_backends:  ...  - name: sharedlun4    volume_driver: nvmebox    description: AZ={{ availability_zones.az1 | upper }}, cluster=sharedlun4    backend_name: sharedlun4    nvmebox_url: http://{{ nvmebox_announce_ip_4 }}:{{ nvmebox_api_port }}    nvmebox_user: '{{ nvmebox_user }}'    nvmebox_password: '{{ vault_nvmebox_admin | default('''') }}'    nvmebox_ro_user: '{{ nvmebox_ro_user }}'    nvmebox_support_direct_access: true    storage_availability_zone: '{{ availability_zones.az1 | upper }}'    image_cache: false    placement: '{{ availability_zones.az1 | upper }}'    cluster_name: sharedlun4    clustered: true    rbd_cluster_name: sharedlun4    rbd_pool: sharedlun4-volumes    rbd_user: sharedlun4cinder_bootstrap_types:  ...  - name: nvmebox-type4    extra_specs:      mcs:nova_availability_zone: '{{ availability_zones.az1 | upper }}'      volume_backend_name: sharedlun4      mcs:disk_class: nvmebox_disk_type4    qos:      name: nvmebox-type4      cache_mode: none      read_iops_sec_per_gb: "200"      read_iops_sec_per_gb_max: "40000"      read_iops_sec_per_gb_min: "2000"      write_iops_sec_per_gb: "100"      write_iops_sec_per_gb_max: "10000"      write_iops_sec_per_gb_min: "1000"      consumer: both

Шаг 5. Запуск плейбуков Ansible

  1. Подключитесь к деплой-ноде по SSH (подробнее — в разделе Подключение к деплой-ноде).

  2. Запустите плейбук cinder-volume-deploy.yml:

    # ansible-playbook -i vkcloud.yml -e env=vkcloud -e bootstrap=true -e lvm_use_lvmlockd=1 ../ansible-openstack/playbooks/cinder-volume-deploy.yml -D
  3. Запустите плейбук helm-solar-helium.yml:

    # ansible-playbook -i vkcloud.yml -e env=vkcloud ../ansible-openstack/playbooks/helm-solar-helium.yml -e bootstrap=true

Шаг 6. Проверка работоспособности

Убедитесь, что новый бэкенд Cinder успешно добавлен и работает:

  1. Проверьте список сервисов Cinder:

    # cinder service-list

    В выводе должны быть записи с новым бэкендом в статусе up.

    Пример вывода:

    ...| cinder-volume | cpn001@sharedlun4 | AZ1 | enabled | up | ... || cinder-volume | cpn002@sharedlun4 | AZ1 | enabled | up | ... || cinder-volume | cpn003@sharedlun4 | AZ1 | enabled | up | ... |...
  2. Проверьте логи сервиса cinder-volume для нового бэкенда на наличие ошибок.

    Пример запроса:

    # journalctl -fu mcs-cinder-volume@sharedlun4
  3. Убедитесь, что появился новый тип диска:

    # openstack volume type list

    Пример вывода:

    +--------------------------------------+---------------+-----------+| ID                                   | Name          | Is Public |+--------------------------------------+---------------+-----------+...| 3e21c050-735b-45c8-8275-ee3c905c4567 | nvmebox-type4 | True      |...+--------------------------------------+---------------------------+
  4. Запросите детальную информацию о новом типе диска:

    # openstack volume type show <ТИП_ДИСКА>

    Здесь <ТИП_ДИСКА> — идентификатор типа диска, полученный на предыдущем шаге.

  5. Убедитесь, что в поле properties в переменной volume_backend_name указан корректный бэкенд Cinder.

    Пример вывода:

    +--------------------+--------------------------------------+| Field              | Value                                |+--------------------+--------------------------------------+| access_project_ids | None                                 || description        | nvmebox-type4                        || id                 | 3e21c050-735b-45c8-8275-ee3c905c4567 || is_public          | True                                 || name               | nvmebox-type4                        || properties         | mcs:disk_class='nvmebox_disk_type4', ||                    | mcs:nova_availability_zone='AZ1',    ||                    | volume_backend_name='sharedlun4'     || qos_specs_id       | 7da7aa02-764a-474e-846e-8826b918c04a |+--------------------+--------------------------------------|
  6. Проверьте возможности (capabilities) нового бэкенда:

    # cinder get-capabilities <УЗЕЛ>@<НАЗВАНИЕ_БЭКЕНДА>

    Пример команды для проверки бэкенда sharedlun4 на узле cpn002:

    # cinder get-capabilities cpn002@sharedlun4

    Пример вывода:

    +---------------------+--------------------------------------------------+| Volume stats        | Value                                            |+---------------------+--------------------------------------------------+| description         | None                                             || display_name        | None                                             || driver_version      | 1.9.1                                            || namespace           | OS::Storage::Capabilities::sharedlun4@sharedlun4 || pool_name           | None                                             || replication_targets | []                                               || storage_protocol    | clvm                                             || vendor_name         | NVMEBox                                          || visibility          | None                                             || volume_backend_name | sharedlun4                                       |+---------------------+--------------------------------------------------++---------------------+--------------------------------------------------+| Backend properties  | Value                                            |+---------------------+--------------------------------------------------+| compression         | {'title': 'Compression',                         ||                     | 'description': 'Enables compression.',           ||                     | 'type': 'boolean'}                               || qos                 | {'title': 'QoS', 'description': 'Enables QoS.',  ||                     | 'type': 'boolean'}                               || replication_enabled | {'title': 'Replication',                         ||                     | 'description': 'Enables replication.',           ||                     | 'type': 'boolean'}                               || thin_provisioning   | {'title': 'Thin Provisioning',                   ||                     | 'description': 'Sets thin provisioning.',        ||                     | 'type': 'boolean'}                               |+---------------------+--------------------------------------------------+

Если все проверки пройдены успешно и в логах нет ошибок, новый бэкенд (в примере — sharedlun4) полностью готов к использованию: можно создавать диски и виртуальные машины с указанием типа диска, соответствующего новой СХД. Для четвертой и последующих внешних СХД не предусмотрена отдельная квота, так как по умолчанию в VK Private Cloud 4.3 поддерживается подключение до трех внешних СХД. По этой причине при создании дисков будет учитываться общая квота объема всех дисков.