Миграция вычислительной нагрузки с конвергентных узлов
В редакции Light Cloud сервисы слоя управления расположены на вычислительных узлах. Такие объединенные узлы называются конвергентными. Пока конвергентные узлы совмещают роли слоя управления и compute, масштабирование инсталляции ограничено.
Чтобы снять это ограничение:
После удаления роли compute узлы продолжают выполнять функции слоя управления. Дальнейшее масштабирование инсталляции выполняется по общим принципам.
-
Подготовьте OpenStack CLI к работе от имени администратора (подробнее — в разделе OpenStack CLI для администратора).
-
Определите, на каких узлах размещены ВМ:
# openstack server list --all-projects --long -c Host -c Name -c ID -c Status -
Выполните живую миграцию ВМ, размещенных на конвергентных узлах, на выделенные вычислительные узлы:
# openstack --os-compute-api-version 2.30 server migrate --live-migration --host <ВЫЧИСЛИТЕЛЬНЫЙ_УЗЕЛ> <ВМ>Здесь:
<ВЫЧИСЛИТЕЛЬНЫЙ_УЗЕЛ>— имя целевого выделенного вычислительного узла.<ВМ>— идентификатор ВМ.
Подробнее о живой миграции ВМ — в разделе Миграция ВМ между гипервизорами.
-
Проверьте статус миграции:
# openstack server migration list -
Убедитесь, что на конвергентных узлах не осталось ВМ:
# openstack server list --host <УЗЕЛ> --all-projectsЗдесь
<УЗЕЛ>— имя конвергентного узла. Пример:cpn001.
Если на конвергентном узле размещены диски High-IOPS, измените тип диска.
-
Найдите диски High-IOPS, расположенные на конвергентном узле. Пример для узла
cpn002:# host=cpn002for i in $(openstack volume list -f value --all-projects --long -c ID -c Type | grep high-iops | cut -d ' ' -f1);doopenstack volume show $i | grep ${host}@high-iops >> /dev/null && echo Volume ID to migration: $i;done -
Измените тип диска:
# cinder retype --migration-policy on-demand --availability-zone <ЗОНА_ДОСТУПНОСТИ> <ДИСК> cephЗдесь:
<ЗОНА_ДОСТУПНОСТИ>— зона доступности диска. Пример:AZ1.<ДИСК>— идентификатор диска.
-
Подключитесь к деплой-ноде по SSH (подробнее — в разделе Подключение к деплой-ноде).
-
Если в инсталляции есть компонент NVMeBox, в файле
vkcloud.ymlудалите агенты NVMeBox с конвергентных узлов из секцииvkcloud_nvmebox_agent:vkcloud_nvmebox_agent:hosts:# cpn001:# sanlock_host_id: 301# cpn002:# sanlock_host_id: 302# cpn003:# sanlock_host_id: 303kcn001:sanlock_host_id: 201kcn002:sanlock_host_id: 202 -
В файле
vkcloud.ymlудалите конвергентные узлы из группыvkcloud_compute:vkcloud_compute:vars: nullchildren:vkcloud_compute_common:children:vkcloud_compute_common_az1:vars:az: '{{ availability_zones["az1"] | upper }}'hosts:kcn001: {}kcn002: {}# cpn001: null# cpn002: null# cpn003: null -
В шаблоне Zabbix удалите группу
Hybrid Computeиз секцииzabbix_groups_map_tmp:zabbix_groups_map_tmp:...# Hybrid Compute:# meta:# - hybrid_compute# templates:# - Openstack Hybrid Compute Processes# - prod_hyper_arp# - Iptables and nw_filter# - Linux by Zabbix agent# - rsyslog-audit# - Evacuation Controller# - Openstack OVS monitoring# - conntrack# - Openstack Agents Monitoring# - Openstack Network Entities Monitoring... -
В файле
group_vars/vkcloud_compute/vars.ymlзадайте параметруnova_use_shared_hostsзначениеfalse:nova_use_shared_hosts: false
Для каждого конвергентного узла:
-
Удалите сервисы Nova:
-
Подготовьте OpenStack CLI к работе от имени администратора (подробнее — в разделе OpenStack CLI для администратора).
-
Определите идентификаторы сервисов Nova для узла:
# openstack compute service list --service nova-compute --host <УЗЕЛ>Здесь
<УЗЕЛ>— имя конвергентного узла. -
Удалите сервисы. Для каждого сервиса выполните команду:
# nova service-delete <СЕРВИС>Здесь
<СЕРВИС>— идентификатор сервиса, полученный на предыдущем шаге.
-
-
Отключите сервис
openstack-nova-compute:-
Подключитесь по SSH к конвергентному узлу:
$ ssh <УЗЕЛ>$ sudo -iЗдесь
<УЗЕЛ>— имя конвергентного узла. -
Отключите сервис:
# systemctl disable openstack-nova-compute.service --now
-
-
Очистите очереди узла в RabbitMQ:
-
На конвергентном узле подключитесь к одному из узлов кластера RabbitMQ для Nova:
# kubectl -n rabbitmq exec -it rabbitmq-nova-0 -- bash -
Проверьте очереди конвергентного узла:
# rabbitmqctl list_queues | grep <УЗЕЛ>Здесь
<УЗЕЛ>— имя конвергентного узла.Очереди не должны содержать сообщений (параметр
messagesдолжен иметь значение0). -
Очистите очереди, в которых есть сообщения. Для каждой очереди выполните команду:
# rabbitmqctl purge_queue <ОЧЕРЕДЬ>Здесь
<ОЧЕРЕДЬ>— название очереди, в которой есть сообщения.
-
-
Удалите узел из Nova Placement:
-
Получите токен аутентификации (подробнее — в разделе Получение токена аутентификации):
# export TOKEN=$(openstack token issue -c id -f value) -
Получите эндпоинт Placement:
# export PLACEMENT_ENDPOINT=$(openstack endpoint list -f value --column URL --service placement --interface internal) -
Получите идентификатор
resource_providerконвергентного узла:# curl -s -H "Content-Type: application/json" -H "X-Auth-Token: $TOKEN" ${PLACEMENT_ENDPOINT}/resource_providers?name=<УЗЕЛ>Здесь
<УЗЕЛ>— имя конвергентного узла.Формат ответа{"resource_providers": [{"uuid": "<RESOURCE_PROVIDER>", ...}]} -
Проверьте, есть ли на узле используемые ресурсы:
# curl -s -H "Content-Type: application/json" -H "X-Auth-Token: $TOKEN" ${PLACEMENT_ENDPOINT}/resource_providers/<RESOURCE_PROVIDER>/allocationsЗдесь
<RESOURCE_PROVIDER>— идентификаторresource_provider, полученный на предыдущем шаге. -
Если в результате выполнения команды получен пустой объект
"allocations": {}, удалитеresource_provider:# curl -v -X DELETE -H "Content-Type: application/json" -H "X-Auth-Token: $TOKEN" ${PLACEMENT_ENDPOINT}/resource_providers/<RESOURCE_PROVIDER>Здесь
<RESOURCE_PROVIDER>— идентификаторresource_provider, полученный ранее.
-
-
Восстановите конфигурацию сервисов Nova:
-
Подключитесь по SSH к конвергентному узлу:
$ ssh <УЗЕЛ>$ sudo -iЗдесь
<УЗЕЛ>— имя конвергентного узла. -
Сохраните параметры конфигурации
nova-compute:# mkdir nova-compute.conf.d.bak# mv /etc/nova/nova-compute.conf.d ./nova-compute.conf.d.bak/ -
Удалите пакет
openstack-nova-computeи обновите конфигурацию systemd:# dnf remove openstack-nova-compute -y# systemctl daemon-reload
-
Для каждого конвергентного узла выполните действия:
- Выполните вход на Портал мониторинга с учетной записью администратора Платформы (подробнее — в разделе Портал мониторинга).
- Перейдите в раздел Configuration → Hosts.
- Нажмите на имя узла.
- В поле Groups удалите группу Hybrid Compute.
- Нажмите кнопку Update.
Для каждого узла, с которого был удален агент NVMeBox при изменении конфигурации Inventory, выполните действия:
-
Подключитесь по SSH к конвергентному узлу:
$ ssh <УЗЕЛ>$ sudo -iЗдесь
<УЗЕЛ>— имя конвергентного узла. -
Отключите сервис:
# systemctl disable --now nvmebox-agent.service