Миграция OVS — OVN¶
Предупреждение
Процедура потенциально опасна и может оставить регион в нерабочем состоянии без гарантии восстановления. Перед любыми действиями в продуктивной среде оформите проактивный запрос в поддержку и согласуйте план резервного копирования и миграции. Для продуктивной среды настоятельно рекомендуем обращаться в нашу команду за услугами Professional Services по миграции.
Нижеописанные действия предназначены только для тестовых стендов и учебно-ознакомительных целей. Во время миграции ожидается потеря сетевой связности части виртуальных машин.
Подготовка¶
Переключение драйвера файрвола на Open vSwitch¶
Откройте веб-интерфейс GitLab и перейдите в репозиторий региона.
Создайте в репозитории региона файл
config/neutron/openvswitch_agent.iniсо следующим содержимым:[securitygroup] firewall_driver = openvswitch
Создайте новый пайплайн: .
В открывшемся окне укажите параметр
KOLLA_ARGSсо значением-t neutron.Запустите пайплайн: Run pipeline.
Дождитесь завершения выполнения операции.
Для всех задействованных узлов (Control, Compute, Network) выполните очистку правил iptables/nftables. Для этого на каждом задействованном узле выполните действия:
Зайдите на узел по SSH.
Выполните команды:
nft list tables | while read -r t; do nft delete table "$t" done
Проверьте, что правила Security Group продолжают применяться: используйте действующее правило (например, запрет/разрешение ICMP или конкретного TCP-порта) и убедитесь в ожидаемом результате.
Уменьшение MTU для VXLAN/GRE сетей¶
Для tenant-сетей, использующих VXLAN/GRE, необходимо понизить значение MTU до 1442 из-за перехода на туннелирование GENEVE. Для этого:
Откройте веб-интерфейс GitLab.
Перейдите в репозиторий региона project_k / deployments / <имя региона>.
Создайте в репозитории региона файл
config/neutron/dhcp_agent.iniсо следующим содержимым:[DEFAULT] dhcp_renewal_time = 30
Создайте новый пайплайн: .
В открывшемся окне укажите параметр
KOLLA_ARGSсо значением-t neutron --limit network.Запустите пайплайн: Run pipeline.
Дождитесь завершения выполнения операции.
Задайте новое значение MTU необходимым виртуальным сетям:
Перейдите на узел с OpenStack CLI и выполните команду:
$ openstack network set --mtu 1442 private_net
Дождитесь истечения аренды DHCP и убедитесь, что ВМ получили MTU
1442.
Примечание
MTU обновится только на тех ВМ, которые поддерживают опцию DHCP 58 (T1). На ВМ со статической адресацией MTU следует изменить вручную.
Отключение DRS и HA¶
Перед началом обновления отключите сервисы DRS и HA.
Отключите сервис DRS:
Войдите в Портал администратора.
Перейдите в раздел .
Деактивируйте все задания сервиса DRS.
Отключите сервис HA:
Зайдите на каждый Control-узел по SSH.
Выполните команду:
$ systemctl stop kolla-consul-container.service
Временная остановка nova-compute¶
Для исключения операций над ВМ во время миграции остановите сервис nova-compute (переведите в состояние disabled):
Перейдите на узел с OpenStack CLI.
Выполните команду:
for x in `openstack compute service list -c Host -f value`; do openstack compute service set --disable $x nova-compute done
Включение OVN в конфигурации региона¶
Откройте веб-интерфейс GitLab.
Перейдите в репозиторий региона project_k / deployments / <имя региона>.
Откройте файл
globals.d/REGION.ymlи укажите в нём значения переменных:neutron_plugin_agent: "ovn" neutron_ovn_dhcp_agent: "yes"
Если включён DVR, добавьте также:
neutron_ovn_distributed_fip: "yes"
Миграция¶
Предупреждение
С этого момента будьте готовы к потере сетевой связности ВМ в tenant-сетях.
Отключение L2/L3/metadata агентов¶
Если Control-узлы совмещены с сетевыми, перед развёртыванием отключите агенты L2/L3/metadata. Для этого:
Зайдите на каждый из Control-узлов по SSH.
Выполните команду:
$ sudo systemctl disable --now kolla-neutron_l3_agent-container.service \ kolla-neutron_openvswitch_agent-container.service \ kolla-neutron_metadata_agent-container.service
Если Network-узлы отделены от Control, то на них отключите только kolla-neutron_openvswitch_agent-container.service. Для этого:
Зайдите на каждый из Network-узлов по SSH.
Выполните команду:
$ sudo systemctl disable --now kolla-neutron_openvswitch_agent-container.service
Развёртывание control-plane OVN и переключение Neutron¶
Запустите пайплайн развёртывания с необходимыми тегами и лимитом на контроллеры:
Откройте веб-интерфейс GitLab.
Перейдите в репозиторий региона project_k / deployments / <имя региона>.
Создайте новый пайплайн: .
В открывшемся окне укажите параметр
KOLLA_ARGSсо значением-t neutron,ovn,openvswitch --limit control.Запустите пайплайн: Run pipeline.
Дождитесь завершения выполнения операции.
Синхронизация Neutron → OVN Northbound¶
Выполните синхронизацию логических объектов из БД Neutron в OVN:
Зайдите на каждый Control и Network-узел по SSH.
- Выполните команду:
$ docker exec -it -u0 neutron_server \ neutron-ovn-db-sync-util --config-file /var/lib/kolla/config_files/neutron.conf \ --config-file /var/lib/kolla/config_files/ml2_conf.ini \ --log-dir /var/log/kolla/neutron \ --debug --ovn-neutron_sync_mode repair
Проверка состояния control-plane OVN¶
Проверьте кластеры БД и глобальные объекты:
Перейдите на каждый Control-узел.
Выполните команды:
$ docker exec ovn_nb_db ovs-appctl -t /var/run/ovn/ovnnb_db.ctl cluster/status OVN_Northbound $ docker exec ovn_sb_db ovs-appctl -t /var/run/ovn/ovnsb_db.ctl cluster/status OVN_Southbound $ docker exec ovn_nb_db ovn-nbctl --no-leader-only list NB_Global $ docker exec ovn_sb_db ovn-sbctl --no-leader-only list SB_Global
Развёртывание OVN на Network-узлах¶
Запустите пайплайн развёртывания с необходимыми тегами и лимитом на Network-узлы:
Убедитесь, что L3/L2/metadata агенты на сетевых узлах выключены.
Откройте веб-интерфейс GitLab.
Перейдите в репозиторий региона project_k / deployments / <имя региона>.
Создайте новый пайплайн: .
В открывшемся окне укажите параметр
KOLLA_ARGSсо значением-t ovn,neutron,openvswitch --limit network.Запустите пайплайн: Run pipeline.
Дождитесь завершения выполнения операции.
Предупреждение
До активации GENEVE-туннелей на Compute-узлах оверлейная сеть будет недоступна.
Развёртывание OVN на Compute-узлах¶
Перед развёртыванием отключите L2-агент:
Зайдите на каждый Compute-узел по SSH.
Выполните команду:
$ sudo systemctl stop kolla-neutron_openvswitch_agent-container.service
Запустите пайплайн развёртывания с необходимыми тегами и лимитом на Compute-узлы:
Убедитесь, что L2 агенты на сетевых узлах выключены.
Откройте веб-интерфейс GitLab.
Перейдите в репозиторий региона project_k / deployments / <имя региона>.
Создайте новый пайплайн: .
В открывшемся окне укажите параметр
KOLLA_ARGSсо значением-t ovn,neutron,openvswitch --limit compute.Запустите пайплайн: Run pipeline.
Дождитесь завершения выполнения операции.
Удаление артефактов OVS и восстановление связности¶
Удалите устаревшие объекты и сбросьте управление в OVS:
Зайдите на каждый задействованный Control и Network-узел по SSH.
Выполните команды:
$ ip --all netns delete $ docker exec openvswitch_vswitchd ovs-vsctl del-manager $ docker exec openvswitch_vswitchd ovs-vsctl del-controller br-ex $ docker exec openvswitch_vswitchd ovs-vsctl del-controller br-int $ docker exec openvswitch_vswitchd ovs-vsctl del-port br-int patch-tun $ docker exec openvswitch_vswitchd ovs-vsctl del-port br-tun patch-int $ docker exec openvswitch_vswitchd ovs-vsctl del-br br-tun $ docker exec openvswitch_vswitchd ovs-vsctl del-port br-int int-br-ex $ docker exec openvswitch_vswitchd ovs-vsctl del-port br-ex phy-br-ex $ docker exec openvswitch_vswitchd ovs-vsctl clear bridge br-int protocols $ docker exec openvswitch_vswitchd ovs-vsctl clear bridge br-ex protocols
Связность должна восстановиться. Если этого не произошло, перезапустите ovn-controller на каждом узле:
$ systemctl restart kolla-ovn_controller-container.service
Откат с OVN на OVS¶
Для отката на Open vSwitch остановите контейнеры ovn-controller, ovn-nb-db, ovn-sb-db и удалите тома контейнеров ovn_nb_db и ovn_sb_db на Control-узлах:
Зайдите на каждый из Control-узлов по SSH.
Выполните команду:
$ sudo systemctl disable --now kolla-ovn_controller-container.service \ kolla-ovn_nb_db-container.service kolla-ovn_sb_db-container.service \ docker volume rm ovn_nb_db ovn_sb_db
Чтобы предотвратить сетевой шторм при возврате к OVS, удалите все GENEVE-интерфейсы из br-int. Для этого на каждом Compute-узле выполните команду:
$ docker exec openvswitch_vswitchd /bin/bash -c 'for x in `ovs-vsctl list-ports br-int |grep ovn-`; do ovs-vsctl del-port br-int $x; done'
Измените конфигурацию региона и выполните развёртывание:
Откройте веб-интерфейс GitLab.
Перейдите в репозиторий региона project_k / deployments / <имя региона>.
Откройте файл
globals.d/REGION.ymlи закомментируйте или удалите в нём строки:neutron_plugin_agent: "ovn" neutron_ovn_dhcp_agent: "yes" neutron_ovn_distributed_fip: "yes"
Создайте новый пайплайн: .
В открывшемся окне укажите параметр
KOLLA_ARGSсо значением-t neutron,openvswitch.Запустите пайплайн: Run pipeline.
Дождитесь завершения выполнения операции.