Миграция OVS — OVN

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

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

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

Подготовка

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

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

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

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

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

  5. Запустите пайплайн: Run pipeline.

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

Для всех задействованных узлов (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. В открывшемся окне укажите параметр KOLLA_ARGS со значением -t neutron --limit network.

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

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

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

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

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

Примечание

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

Отключение DRS и HA

Перед началом обновления отключите сервисы DRS и HA.

Отключите сервис DRS:

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

  2. Перейдите в раздел DRS > Jobs.

  3. Деактивируйте все задания сервиса DRS.

Отключите сервис HA:

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

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

    $ systemctl stop kolla-consul-container.service
    

Временная остановка 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. В открывшемся окне укажите параметр KOLLA_ARGS со значением -t neutron,ovn,openvswitch --limit control.

  5. Запустите пайплайн: Run pipeline.

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

Синхронизация 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. В открывшемся окне укажите параметр KOLLA_ARGS со значением -t ovn,neutron,openvswitch --limit network.

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

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

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

До активации 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. В открывшемся окне укажите параметр KOLLA_ARGS со значением -t ovn,neutron,openvswitch --limit compute.

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

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

Удаление артефактов 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. В открывшемся окне укажите параметр KOLLA_ARGS со значением -t neutron,openvswitch.

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

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