Оркестрация

Тема дорожной карты · SaltStack

Оркестрация в Salt — это координация действий на нескольких миньонах в заданном порядке из одной точки, с мастера. Обычный state.apply работает только с одним миньоном: он приводит конкретную машину к нужному состоянию, не зная о соседях. Однако реальные развёртывания часто требуют последовательности действий на нескольких хостах: сначала накатить миграции на сервере БД, затем обновить приложение на десяти бэкендах и вернуть их в балансировщик. Оркестрация решает такие многошаговые сценарии через runner state.orchestrate, который запускается на мастере командой salt-run state.orchestrate orch.deploy.

Как это работает

Сценарий оркестрации — это обычный SLS-файл, исполняемый мастером. По конвенции такие файлы кладут в каталог orch/ внутри file_roots (например, /srv/salt/orch/deploy.sls) и запускают командой salt-run state.orchestrate orch.deploy. Внутри файла вместо обычных state-модулей используются специальные функции: salt.state для применения состояния на группе миньонов, salt.function для выполнения execution-модуля (например, service.restart) на нужном таргете, salt.runner для вызова другого runner, salt.wait_for_event для ожидания события на шине. Порядок шагов задаётся requisites: require, onchanges, onfail. Мастер публикует задания миньонам шаг за шагом, собирает возвраты и переходит к следующему шагу только после завершения предыдущего. Если критичный шаг помечен failhard и упал, сценарий останавливается, и полусломанный деплой не расползается по всему парку.

Когда применять

Оркестрация нужна там, где важен порядок действий между хостами: rolling-обновление приложения с выводом узлов из балансировщика, развёртывание кластера, где главный узел должен подняться раньше реплик, первичная раскатка окружения по цепочке «БД → бэкенд → фронтенд». Хорошее эмпирическое правило: если вы запускаете salt вручную несколько раз подряд в строго определённой последовательности — это готовый кандидат на orchestration-SLS. Для независимой настройки отдельных машин оркестрация избыточна: там достаточно highstate по расписанию. В связке с Reactor оркестрация закрывает и событийные сценарии: реактор ловит событие (например, salt/minion/*/start от новой машины) и запускает сценарий, который сам включает её в кластер — так получается автоматизация уровня всей инфраструктуры, а не отдельного сервера.

Типичные ошибки

Самая частая ошибка — пытаться выполнить orchestration-SLS через salt '*' state.apply: файл написан для мастера, и на миньоне функций salt.state и salt.function просто нет. Вторая — не проставить requisites между шагами и удивляться, что порядок «не соблюдается»: без явных зависимостей Salt не обязан ждать. Третья — не продумать поведение при частичных отказах: если из двадцати миньонов два недоступны, шаг salt.state завершится ошибкой целиком — решите заранее, что для вас провал, а что допустимо. Наконец, не превращайте оркестрацию в императивный скрипт из сплошных salt.function с cmd.run: теряется идемпотентность, ради которой Salt и выбирают.

Связанные понятия

Полезные ресурсы

🔤 Английские термины в этой теме

Слова из этой темы, которые русскоязычные часто произносят неверно. Кнопка 🔊 произносит голосом браузера.

Весь словарь терминов →