Batch-выполнение

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

Batch-выполнение позволяет ограничить число одновременно работающих миньонов с помощью флага -b (или --batch-size). Это полезно для предотвращения одновременного перезапуска сервисов или массового обновления пакетов, что может привести к перегрузке репозитория. Например, команда salt '*' -b 10% service.restart nginx перезапустит nginx волнами по десять процентов от общего числа миньонов, что обеспечит непрерывность работы сервиса.

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

Размер батча можно задать числом (-b 10 — по десять миньонов) или процентом (-b 10% — десятая часть от отвечающих). Механика скользящего окна поддерживает постоянное число активных миньонов: мастер публикует задание первой группе, и как только какой-то миньон вернул результат, его место занимает следующий из очереди. Перед стартом Salt проверяет доступность миньонов, чтобы процент считался от реально живых машин. Опция --batch-wait задаёт паузу между запусками, а параметр failhard останавливает раздачу задания при первой ошибке. Batch доступен не только из CLI: в orchestration-SLS у функции salt.state есть параметр batch, что позволяет декларативно описать rolling-стратегию в коде сценария.

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

Batch-выполнение полезно для rolling-операций над сервисами за балансировщиком, таких как рестарты, деплой и применение состояний, где одновременная недоступность всех узлов недопустима. Например, -b 25% даёт четыре волны, что является компромиссом между скоростью и запасом прочности. Batch также полезен для защиты разделяемых ресурсов, таких как репозитории и файловые серверы, и для осторожных изменений, когда можно сначала прогнать рискованную команду на небольшой группе миньонов. Если операция безопасна и лёгкая, например test.ping или чтение фактов, батчить незачем, так как параллельность является преимуществом Salt.

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

Одна из типичных ошибок — перезапуск сервиса на всём парке без батча, что приводит к временной недоступности сервиса. Слишком мелкий батч на большом парке может растянуть операцию на часы, что может привести к истечению таймаута CLI. Также важно помнить, что -b 50% при половине упавших миньонов означает совсем не ту волну, на которую вы рассчитывали. Перед раскаткой следует проверять парк через salt-run manage.status. Batch не отменяет requisites: порядок операций внутри одной машины задаётся состояниями, а batch управляет только числом работающих миньонов одновременно.

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

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

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

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

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