ADG Оставить заявку
Блог Инфраструктура 4 мин чтения

OpenStack Juno milestone-1: тестируем Neutron L3-агент на стенде

OpenStack Juno анонсировал milestone-1 с переработанным Neutron L3-агентом. Разворачиваем на стенде и сравниваем поведение с Icehouse при перезапуске агентов.

Контекст момента

OpenStack Juno milestone-1 анонсирован в июле 2014 - предрелизная версия с улучшенными Nova и Neutron, финальный релиз ожидается в октябре 2014

Juno официально выйдет в октябре, но milestone-1 уже доступен для тестирования. Мы подняли стенд на прошлой неделе - не из академического интереса, а потому что несколько клиентских инсталляций сидят на Icehouse и там периодически всплывает одна раздражающая проблема с Neutron. Хотели проверить, не починили ли.

Забегая вперёд: что-то починили, но не всё.

Контекст: что не так с Neutron в Icehouse

Если кратко - L3-агент в Icehouse не очень хорошо переживает перезапуск. Ситуация типичная: пакетное обновление системы, перезагрузка хоста, или просто neutron-l3-agent restart после изменения конфига. После этого часть маршрутов на namespace-ах пропадала, и виртуалки теряли связность с внешней сетью. Не всегда, не стабильно воспроизводимо, что особенно неприятно.

Workaround был такой: после перезапуска агента делать neutron router-update <id> --admin_state_up False а потом True для каждого роутера. Это возвращало маршруты. Руками. На каждом роутере. Прелесть.

Стенд для Juno

Подняли три ноды: один контроллер, один сетевой узел, один вычислительный. KVM под Ubuntu 14.04, установка из репозиториев через RDO (там уже есть milestone-пакеты). Базовая конфигурация - GRE-туннели для tenant-сетей, один внешний провайдерский bridge.

Никакой экзотики - ровно то, что стоит в типовой клиентской инсталляции.

Что изменилось в настройке L3-агента

В Icehouse минимальный l3_agent.ini выглядел примерно так:

[DEFAULT]
interface_driver = neutron.agent.linux.interface.OVSInterfaceDriver
external_network_bridge = br-ex
use_namespaces = True

В Juno появился новый параметр - agent_mode. Принимает три значения: legacy, dvr, dvr_snat. По умолчанию legacy, то есть старое поведение, и это хорошо - апгрейд не ломает существующие конфигурации.

DVR (Distributed Virtual Routing) - это новая фича, которая выносит L3 на вычислительные ноды вместо выделенного сетевого узла. Мы DVR не тестировали - в этом milestone он ещё сырой и явно не для продакшна. Но сам факт появления agent_mode говорит о том, что структура agenta стала чище.

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

Как ведёт себя при перезапуске

Тестировали так: создали три роутера, подключили по две сети к каждому, проверили пинг из виртуалок наружу. Потом service neutron-l3-agent restart и смотрим что происходит.

На Icehouse: после рестарта пинги гасли примерно в половине случаев. Восстановление - от тридцати секунд до нескольких минут, иногда никогда без ручного вмешательства.

На Juno milestone-1: три перезапуска подряд - все три раза связность восстановилась автоматически. Время восстановления - порядка десяти-пятнадцати секунд (там, где агент перечитывает состояние роутеров и переустанавливает маршруты). Повторяемость хорошая.

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

Nova: что интересного

В Nova в milestone-1 доработали логику live-migration при использовании shared storage. В Icehouse при определённых условиях live-migration виртуалки с эфемерным диском мог зависнуть на этапе pre-migration если у хоста-источника была высокая нагрузка на IO. В Juno добавили таймаут и обработку этого сценария - миграция откатывается корректно, не оставляет машину в состоянии migrating навсегда.

Проверить не успели - на нашем стенде нет shared storage. Но patch в коммитах есть, выглядит адресно.

Что делать с этим знанием прямо сейчас

На Icehouse с Neutron-проблемой живём дальше через сопровождение - мониторим состояние агентов через Zabbix и при необходимости дёргаем router-update скриптом. Некрасиво, но работает.

На Juno переходить сейчас не стоит - milestone это не релиз, API может измениться до октября. Но стенд показал, что направление движения правильное, и к релизу имеет смысл готовить план апгрейда уже сейчас: инвентаризировать роутеры, задокументировать конфигурацию L3-агентов, проверить совместимость плагинов.

Одна практическая рекомендация уже сейчас: если у вас Icehouse и часто перезапускаете L3-агент - добавьте в l3_agent.ini явный use_namespaces = True даже если он там уже стоит по умолчанию. Иногда при апгрейде пакета дефолт менялся, и агент начинал вести себя неожиданно.

Следим за milestone-2, там обещают DVR в более стабильном состоянии.

Контакт

Нужна такая же инженерная работа?

Опишите задачу и контекст. Ответим в течение рабочего дня, при необходимости подпишем NDA.