Миграция OVS — OVN¶
Предупреждение
Процедура потенциально опасна и может оставить регион в нерабочем состоянии без гарантии восстановления. Перед любыми действиями в продуктивной среде оформите проактивный запрос в поддержку и согласуйте план резервного копирования и миграции. Для продуктивной среды настоятельно рекомендуем обращаться в нашу команду за услугами Professional Services по миграции.
Нижеописанные действия предназначены только для тестовых стендов и учебно-ознакомительных целей. Во время миграции ожидается потеря сетевой связности части виртуальных машин.
Подготовка¶
Переключение драйвера файрвола на Open vSwitch¶
Откройте веб-интерфейс GitLab и перейдите в репозиторий региона.
Создайте в репозитории региона файл
config/neutron/openvswitch_agent.iniсо следующим содержимым:[securitygroup] firewall_driver = openvswitch
Создайте новый пайплайн: .
Выберите ветку вашего релиза в выпадающем списке Run for branch name or tag
master-<имя релиза keystack>.В открывшемся окне укажите параметр
KOLLA_ARGSсо значением-t neutron.Запустите пайплайн: New 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
Создайте новый пайплайн: .
Выберите ветку вашего релиза в выпадающем списке Run for branch name or tag
master-<имя релиза keystack>.В открывшемся окне укажите параметр
KOLLA_ARGSсо значением-t neutron --limit network.Запустите пайплайн: New pipeline.
Дождитесь завершения выполнения операции.
Задайте новое значение MTU необходимым виртуальным сетям:
Перейдите на узел с OpenStack CLI и выполните команду:
$ openstack network set --mtu 1442 private_net
Дождитесь истечения аренды DHCP и убедитесь, что ВМ получили MTU
1442.
Примечание
MTU обновится только на тех ВМ, которые поддерживают опцию DHCP 58 (T1). На ВМ со статической адресацией MTU следует изменить вручную.
Временное отключение автоматических действий KeyVRM¶
Перед началом миграции временно остановите автоматические действия KeyVRM для хост-агрегатов, которые затрагивает миграция.
Для этого переведите каждый такой хост-агрегат в режим NOOP:
Войдите в Портал администратора.
Откройте раздел .
Откройте конфигурацию хост-агрегата, который затрагивает миграция.
Включите Режим NOOP.
В поле Причина NOOP укажите причину, например
Миграция OVS — OVN.Нажмите Сохранить.
Повторите действия для всех хост-агрегатов, которые затрагивает миграция.
После завершения миграции и проверки работоспособности региона выключите NOOP для этих хост-агрегатов.
Временная остановка 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 / <имя региона>.
Создайте новый пайплайн: .
Выберите ветку вашего релиза в выпадающем списке Run for branch name or tag
master-<имя релиза keystack>.В открывшемся окне укажите параметр
KOLLA_ARGSсо значением-t neutron,ovn,openvswitch --limit control.Запустите пайплайн: New 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
$ podman 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
$ podman exec ovn_nb_db ovs-appctl -t /var/run/ovn/ovnnb_db.ctl cluster/status OVN_Northbound $ podman exec ovn_sb_db ovs-appctl -t /var/run/ovn/ovnsb_db.ctl cluster/status OVN_Southbound $ podman exec ovn_nb_db ovn-nbctl --no-leader-only list NB_Global $ podman exec ovn_sb_db ovn-sbctl --no-leader-only list SB_Global
Развёртывание OVN на Network-узлах¶
Запустите пайплайн развёртывания с необходимыми тегами и лимитом на Network-узлы:
Убедитесь, что L3/L2/metadata агенты на сетевых узлах выключены.
Откройте веб-интерфейс GitLab.
Перейдите в репозиторий региона project_k / deployments / <имя региона>.
Создайте новый пайплайн: .
Выберите ветку вашего релиза в выпадающем списке Run for branch name or tag
master-<имя релиза keystack>.В открывшемся окне укажите параметр
KOLLA_ARGSсо значением-t ovn,neutron,openvswitch --limit network.Запустите пайплайн: New pipeline.
Дождитесь завершения выполнения операции.
Предупреждение
До активации GENEVE-туннелей на Compute-узлах оверлейная сеть будет недоступна.
Развёртывание OVN на Compute-узлах¶
Перед развёртыванием отключите L2-агент:
Зайдите на каждый Compute-узел по SSH.
Выполните команду:
$ sudo systemctl stop kolla-neutron_openvswitch_agent-container.service
Запустите пайплайн развёртывания с необходимыми тегами и лимитом на Compute-узлы:
Убедитесь, что L2 агенты на сетевых узлах выключены.
Откройте веб-интерфейс GitLab.
Перейдите в репозиторий региона project_k / deployments / <имя региона>.
Создайте новый пайплайн: .
Выберите ветку вашего релиза в выпадающем списке Run for branch name or tag
master-<имя релиза keystack>.В открывшемся окне укажите параметр
KOLLA_ARGSсо значением-t ovn,neutron,openvswitch --limit compute.Запустите пайплайн: New 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
$ ip --all netns delete $ podman exec openvswitch_vswitchd ovs-vsctl del-manager $ podman exec openvswitch_vswitchd ovs-vsctl del-controller br-ex $ podman exec openvswitch_vswitchd ovs-vsctl del-controller br-int $ podman exec openvswitch_vswitchd ovs-vsctl del-port br-int patch-tun $ podman exec openvswitch_vswitchd ovs-vsctl del-port br-tun patch-int $ podman exec openvswitch_vswitchd ovs-vsctl del-br br-tun $ podman exec openvswitch_vswitchd ovs-vsctl del-port br-int int-br-ex $ podman exec openvswitch_vswitchd ovs-vsctl del-port br-ex phy-br-ex $ podman exec openvswitch_vswitchd ovs-vsctl clear bridge br-int protocols $ podman 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
$ sudo systemctl disable --now kolla-ovn_controller-container.service kolla-ovn_nb_db-container.service kolla-ovn_sb_db-container.service $ podman 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'$ podman 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"
Создайте новый пайплайн: .
Выберите ветку вашего релиза в выпадающем списке Run for branch name or tag
master-<имя релиза keystack>.В открывшемся окне укажите параметр
KOLLA_ARGSсо значением-t neutron,openvswitch.Запустите пайплайн: New pipeline.
Дождитесь завершения выполнения операции.