Миграция OVS — OVN

Предупреждение

Процедура потенциально опасна и может оставить регион в нерабочем состоянии без гарантии восстановления. Перед любыми действиями в продуктивной среде оформите проактивный запрос в поддержку и согласуйте план резервного копирования и миграции. Для продуктивной среды настоятельно рекомендуем обращаться в нашу команду за услугами Professional Services по миграции.

Нижеописанные действия предназначены только для тестовых стендов и учебно-ознакомительных целей. Во время миграции ожидается потеря сетевой связности части виртуальных машин.

Подготовка

Переключение драйвера файрвола на Open vSwitch

  1. Откройте веб-интерфейс GitLab и перейдите в репозиторий региона.

  2. Создайте в репозитории региона файл config/neutron/openvswitch_agent.ini со следующим содержимым:

    [securitygroup]
    firewall_driver = openvswitch
    
  3. Создайте новый пайплайн: Build > Pipelines > New pipeline.

  4. Выберите ветку вашего релиза в выпадающем списке Run for branch name or tag master-<имя релиза keystack>.

  5. В открывшемся окне укажите параметр KOLLA_ARGS со значением -t neutron.

  6. Запустите пайплайн: New pipeline.

  7. Дождитесь завершения выполнения операции.

Для всех задействованных узлов (Control, Compute, Network) выполните очистку правил iptables/nftables. Для этого на каждом задействованном узле выполните действия:

  1. Зайдите на узел по SSH.

  2. Выполните команды:

    nft list tables | while read -r t; do
        nft delete table "$t"
    done
    
  3. Проверьте, что правила Security Group продолжают применяться: используйте действующее правило (например, запрет/разрешение ICMP или конкретного TCP-порта) и убедитесь в ожидаемом результате.

Уменьшение MTU для VXLAN/GRE сетей

Для tenant-сетей, использующих VXLAN/GRE, необходимо понизить значение MTU до 1442 из-за перехода на туннелирование GENEVE. Для этого:

  1. Откройте веб-интерфейс GitLab.

  2. Перейдите в репозиторий региона project_k / deployments / <имя региона>.

  3. Создайте в репозитории региона файл config/neutron/dhcp_agent.ini со следующим содержимым:

    [DEFAULT]
    dhcp_renewal_time = 30
    
  4. Создайте новый пайплайн: Build > Pipelines > New pipeline.

  5. Выберите ветку вашего релиза в выпадающем списке Run for branch name or tag master-<имя релиза keystack>.

  6. В открывшемся окне укажите параметр KOLLA_ARGS со значением -t neutron --limit network.

  7. Запустите пайплайн: New pipeline.

  8. Дождитесь завершения выполнения операции.

Задайте новое значение MTU необходимым виртуальным сетям:

  1. Перейдите на узел с OpenStack CLI и выполните команду:

    $ openstack network set --mtu 1442 private_net
    
  2. Дождитесь истечения аренды DHCP и убедитесь, что ВМ получили MTU 1442.

Примечание

MTU обновится только на тех ВМ, которые поддерживают опцию DHCP 58 (T1). На ВМ со статической адресацией MTU следует изменить вручную.

Временное отключение автоматических действий KeyVRM

Перед началом миграции временно остановите автоматические действия KeyVRM для хост-агрегатов, которые затрагивает миграция.

Для этого переведите каждый такой хост-агрегат в режим NOOP:

  1. Войдите в Портал администратора.

  2. Откройте раздел KeyVRM.

  3. Откройте конфигурацию хост-агрегата, который затрагивает миграция.

  4. Включите Режим NOOP.

  5. В поле Причина NOOP укажите причину, например Миграция OVS OVN.

  6. Нажмите Сохранить.

  7. Повторите действия для всех хост-агрегатов, которые затрагивает миграция.

После завершения миграции и проверки работоспособности региона выключите NOOP для этих хост-агрегатов.

Временная остановка nova-compute

Для исключения операций над ВМ во время миграции остановите сервис nova-compute (переведите в состояние disabled):

  1. Перейдите на узел с OpenStack CLI.

  2. Выполните команду:

    for x in `openstack compute service list -c Host -f value`; do
        openstack compute service set --disable $x nova-compute
    done
    

Включение OVN в конфигурации региона

  1. Откройте веб-интерфейс GitLab.

  2. Перейдите в репозиторий региона project_k / deployments / <имя региона>.

  3. Откройте файл 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. Для этого:

  1. Зайдите на каждый из Control-узлов по SSH.

  2. Выполните команду:

    $ 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. Для этого:

  1. Зайдите на каждый из Network-узлов по SSH.

  2. Выполните команду:

    $ sudo systemctl disable --now kolla-neutron_openvswitch_agent-container.service
    

Развёртывание control-plane OVN и переключение Neutron

Запустите пайплайн развёртывания с необходимыми тегами и лимитом на контроллеры:

  1. Откройте веб-интерфейс GitLab.

  2. Перейдите в репозиторий региона project_k / deployments / <имя региона>.

  3. Создайте новый пайплайн: Build > Pipelines > New pipeline.

  4. Выберите ветку вашего релиза в выпадающем списке Run for branch name or tag master-<имя релиза keystack>.

  5. В открывшемся окне укажите параметр KOLLA_ARGS со значением -t neutron,ovn,openvswitch --limit control.

  6. Запустите пайплайн: New pipeline.

  7. Дождитесь завершения выполнения операции.

Синхронизация Neutron → OVN Northbound

Выполните синхронизацию логических объектов из БД Neutron в OVN:

  1. Зайдите на каждый Control и Network-узел по SSH.

  2. Выполните команду:

    $ 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

Проверьте кластеры БД и глобальные объекты:

  1. Перейдите на каждый Control-узел.

  2. Выполните команды:

    $ 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-узлы:

  1. Убедитесь, что L3/L2/metadata агенты на сетевых узлах выключены.

  2. Откройте веб-интерфейс GitLab.

  3. Перейдите в репозиторий региона project_k / deployments / <имя региона>.

  4. Создайте новый пайплайн: Build > Pipelines > New pipeline.

  5. Выберите ветку вашего релиза в выпадающем списке Run for branch name or tag master-<имя релиза keystack>.

  6. В открывшемся окне укажите параметр KOLLA_ARGS со значением -t ovn,neutron,openvswitch --limit network.

  7. Запустите пайплайн: New pipeline.

  8. Дождитесь завершения выполнения операции.

Предупреждение

До активации GENEVE-туннелей на Compute-узлах оверлейная сеть будет недоступна.

Развёртывание OVN на Compute-узлах

Перед развёртыванием отключите L2-агент:

  1. Зайдите на каждый Compute-узел по SSH.

  2. Выполните команду:

    $ sudo systemctl stop kolla-neutron_openvswitch_agent-container.service
    

Запустите пайплайн развёртывания с необходимыми тегами и лимитом на Compute-узлы:

  1. Убедитесь, что L2 агенты на сетевых узлах выключены.

  2. Откройте веб-интерфейс GitLab.

  3. Перейдите в репозиторий региона project_k / deployments / <имя региона>.

  4. Создайте новый пайплайн: Build > Pipelines > New pipeline.

  5. Выберите ветку вашего релиза в выпадающем списке Run for branch name or tag master-<имя релиза keystack>.

  6. В открывшемся окне укажите параметр KOLLA_ARGS со значением -t ovn,neutron,openvswitch --limit compute.

  7. Запустите пайплайн: New pipeline.

  8. Дождитесь завершения выполнения операции.

Удаление артефактов OVS и восстановление связности

Удалите устаревшие объекты и сбросьте управление в OVS:

  1. Зайдите на каждый задействованный Control и Network-узел по SSH.

  2. Выполните команды:

    $ 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-узлах:

  1. Зайдите на каждый из Control-узлов по SSH.

  2. Выполните команду:

    $ 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'

Измените конфигурацию региона и выполните развёртывание:

  1. Откройте веб-интерфейс GitLab.

  2. Перейдите в репозиторий региона project_k / deployments / <имя региона>.

  3. Откройте файл globals.d/REGION.yml и закомментируйте или удалите в нём строки:

    neutron_plugin_agent: "ovn"
    neutron_ovn_dhcp_agent: "yes"
    neutron_ovn_distributed_fip: "yes"
    
  4. Создайте новый пайплайн: Build > Pipelines > New pipeline.

  5. Выберите ветку вашего релиза в выпадающем списке Run for branch name or tag master-<имя релиза keystack>.

  6. В открывшемся окне укажите параметр KOLLA_ARGS со значением -t neutron,openvswitch.

  7. Запустите пайплайн: New pipeline.

  8. Дождитесь завершения выполнения операции.