Оркестрация
Тема дорожной карты · 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 и выбирают.
Связанные понятия
Полезные ресурсы
🔤 Английские термины в этой теме
Слова из этой темы, которые русскоязычные часто произносят неверно. Кнопка 🔊 произносит голосом браузера.
- imperative /ɪmˈpɛrətɪv/ «импЕрэтив», повелительное наклонение разбор: Commit messages: Conventional Commits, повелительное наклонение
- scenario /sɪˈnɑːrioʊ/ «синАриоу» разбор: Тестирование: flaky, coverage, mock, fixture, regression
- worth /wɜːrθ/ с «θ» разбор: Смягчение критики: consider, might, what if
- written /ˈrɪtn/ «ритн», двойное t произносится как одно, i краткое разбор: Письменная коммуникация
- event /ɪˈvɛnt/ ударение на второй слог разбор: Немые буквы и ударение: cache, queue, suite, height
- infrastructure /ˈɪnfrəstrʌktʃər/ ударение на первый слог разбор: Немые буквы и ударение: cache, queue, suite, height
- database /ˈdeɪtəbeɪs/ «дЕйтабейс», ударение на первый слог разбор: Английский баз данных и бэкенда