Подключение четвертой и последующих СХД
Здесь описана интеграция новой СХД в инсталляции 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 дополнительный диск
На виртуальной машине, которая будет выполнять роль внешней СХД:
-
Установите
targetcli:# dnf install -y targetcli -
Запустите
targetcli:# systemctl enable target --now -
Определите имя диска, который будет использоваться как 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. -
Создайте 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. -
Проверьте созданную конфигурацию:
# targetcli ls
Подключите iSCSI-таргет на каждом узле, который будет использовать NVMeBox:
- на управляющих узлах (
cpn001,cpn002,cpn003); - на вычислительных узлах (
kcn001,kcn002).
Чтобы подключить iSCSI-таргет к узлу:
-
Выполните поиск (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-таргета. -
Подключитесь к найденному 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 -
Проверьте, что появился новый диск, и скопируйте его WWID:
# lsblkПример вывода:
sdi 8:16 0 500G 0 disk└─36001405b121a79 253:17 0 500G 0 mpathЗдесь
36001405b121a79— WWID диска. -
Добавьте новый LUN в конфигурацию Multipath. Для этого в файле
/etc/multipath.confдобавьте блок с уникальным псевдонимом (alias).Пример добавления псевдонима диска:
multipath {wwid 36001405b121a79alias vm-lun4}Здесь
vm-lun4— псевдоним диска с идентификатором36001405b121a79. -
Перезапустите Multipath:
# systemctl restart multipathd -
Проверьте, что диск появился с правильным псевдонимом:
# lsblkПример вывода:
...sdi 8:16 0 500G 0 disk└─vm-lun4 253:1 0 500G 0 mpath...
-
Подключитесь к управляющему узлу (подробнее — в разделе Подключение к управляющему узлу).
-
Перейдите в директорию
/etc/nvmebox. -
Создайте копии конфигурационных файлов одного из существующих кластеров 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 -
Отредактируйте параметры в конфигурационном файле нового кластера
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), которая будет создана на новом диске.
-
-
Подготовьте новый диск с помощью утилиты
nvmebox-manage:# nvmebox-manage format <НОВЫЙ_КЛАСТЕР> --cluster_pv_device /dev/mapper/<ИМЯ_ДИСКА>Пример подготовки диска
vm-lun4:# nvmebox-manage format sharedlun4 --cluster_pv_device /dev/mapper/vm-lun4 -
Запустите сервис нового кластера на управляющих узлах. Для этого на каждом из управляющих узлов выполните команду:
# systemctl start sharedlun-cluster@<НОВЫЙ_КЛАСТЕР>Пример для кластера
sharedlun4:# systemctl start sharedlun-cluster@sharedlun4 -
Проверьте статус и доступное пространство нового кластера:
nvmebox-manage capacity <НОВЫЙ_КЛАСТЕР> --password <ПАРОЛЬ>Здесь:
<НОВЫЙ_КЛАСТЕР>— название нового кластера NVMeBox.<ПАРОЛЬ>— пароль из файла/etc/nvmebox/auth-<НОВЫЙ_КЛАСТЕР>.
Пример для кластера
sharedlun4:nvmebox-manage capacity sharedlun4 --password <ПАРОЛЬ>Пример вывода:
Cluster: sharedlun4Profile: sharedlunAPI address: 10.30.3.103Target address: 10.30.3.103NVMe/TCP port: 4420iSCSI port: 3261API port: 6601Lock VG name: slvg-4Data VG name: slvg-4Lock LV name: configCurrently master: cpn001 = cpn001Name: allSize: 1073599217664 (499.8GB)Reserved: 214719843532 (99.9GB)Used: 43251662848 (0.2GB)Available: 815627711284 (399.6GB) -
Убедитесь, что в логах отсутствуют ошибки:
# tail -f /var/log/infra-latest/nvmebox-sharedlun.<УЗЕЛ>.all.logЗдесь
<УЗЕЛ>— название управляющего узла.
-
Перейдите в директорию
/opt/vkcloud/inventory/vkcloud. -
Откройте файл
group_vars/vkcloud_kube/solar-helium.yml. -
Найдите переменную
helm_mcs_app_cfg_nameи скопируйте ее значение.Пример переменной со значением:
helm_mcs_app_cfg_name: commonBox_4.3v5 -
В соответствии со значением переменной откройте для редактирования файл:
files/front_config/<ЗНАЧЕНИЕ_ПЕРЕМЕННОЙ>.config.json.j2 -
Добавьте в конфигурационный файл новую СХД.
Пример параметров:
..."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"},... -
Добавьте новую СХД в файл
group_vars/vkcloud_cinder_nvmebox/vars.yml.Пример параметров:
volume_backends:...- name: sharedlun4volume_driver: nvmeboxdescription: AZ={{ availability_zones.az1 | upper }}, cluster=sharedlun4backend_name: sharedlun4nvmebox_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: truestorage_availability_zone: '{{ availability_zones.az1 | upper }}'image_cache: falseplacement: '{{ availability_zones.az1 | upper }}'cluster_name: sharedlun4clustered: truerbd_cluster_name: sharedlun4rbd_pool: sharedlun4-volumesrbd_user: sharedlun4cinder_bootstrap_types:...- name: nvmebox-type4extra_specs:mcs:nova_availability_zone: '{{ availability_zones.az1 | upper }}'volume_backend_name: sharedlun4mcs:disk_class: nvmebox_disk_type4qos:name: nvmebox-type4cache_mode: noneread_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
-
Подключитесь к деплой-ноде по SSH (подробнее — в разделе Подключение к деплой-ноде).
-
Запустите плейбук
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 -
Запустите плейбук
helm-solar-helium.yml:# ansible-playbook -i vkcloud.yml -e env=vkcloud ../ansible-openstack/playbooks/helm-solar-helium.yml -e bootstrap=true
Убедитесь, что новый бэкенд Cinder успешно добавлен и работает:
-
Проверьте список сервисов 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 | ... |... -
Проверьте логи сервиса
cinder-volumeдля нового бэкенда на наличие ошибок.Пример запроса:
# journalctl -fu mcs-cinder-volume@sharedlun4 -
Убедитесь, что появился новый тип диска:
# openstack volume type listПример вывода:
+--------------------------------------+---------------+-----------+| ID | Name | Is Public |+--------------------------------------+---------------+-----------+...| 3e21c050-735b-45c8-8275-ee3c905c4567 | nvmebox-type4 | True |...+--------------------------------------+---------------------------+ -
Запросите детальную информацию о новом типе диска:
# openstack volume type show <ТИП_ДИСКА>Здесь
<ТИП_ДИСКА>— идентификатор типа диска, полученный на предыдущем шаге. -
Убедитесь, что в поле
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 |+--------------------+--------------------------------------| -
Проверьте возможности (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 поддерживается подключение до трех внешних СХД.
По этой причине при создании дисков будет учитываться общая квота объема всех дисков.