Событийная модель
Тема дорожной карты · SaltStack
Событийная модель — то, что отличает Salt от классических систем управления конфигурацией сильнее всего. Внутри Salt работает шина событий: миньоны и мастер постоянно публикуют на неё сообщения — миньон подключился, ключ принят, job завершился, state упал. Эта шина — не журнал «для галочки», а рабочий механизм: на события можно подписываться и реагировать автоматически. Из трёх компонентов — шина, beacons (генераторы событий на миньонах) и reactor (обработчик на мастере) — собирается автоматизация, которой не добиться запуском плейбуков по расписанию: инфраструктура сама сообщает о проблеме и сама же запускает исправление.
Как это работает
Каждое событие — это тег (иерархическая строка вида salt/job/<jid>/ret/<minion>) плюс полезные данные. Смотреть шину вживую можно раннером salt-run state.event pretty=True — полезнейший приём отладки. События публикуют и системные механизмы, и вы сами: salt-call event.send 'myapp/deploy/done' '{"version": "1.2"}' отправляет произвольное событие с миньона на мастер.
Beacons — сторожа на миньонах: настраиваются в конфигурации миньона и опрашивают локальную систему — изменился файл, упал процесс, диск заполнился, поднялась нагрузка. Обнаружив условие, beacon публикует событие на шину. Reactor — карта «тег события → SLS-файл реакции» в конфигурации мастера: при совпадении тега мастер рендерит указанный reactor-SLS и выполняет действие — вызвать execution-модуль на миньоне, применить state, запустить runner или оркестрацию. Цепочка «beacon заметил → событие → reactor исправил» и есть самовосстановление.
Когда применять
Типовые сценарии: авторегистрация — новый миньон прислал ключ, reactor принимает его по правилам и сразу применяет highstate; самовосстановление — beacon видит, что сервис умер, reactor его перезапускает и шлёт оповещение; реакция на дрейф конфигурации — beacon отслеживает критичный файл, при ручной правке reactor немедленно возвращает эталон. Событийная модель также стыкует Salt с внешними системами: CI/CD или мониторинг отправляет событие через salt-api, а reactor раскатывает релиз или гасит инцидент. Применяйте reactor для короткой связки «событие → действие»; если реакция многошаговая, из reactor'а лучше запускать оркестрацию, а не городить логику в самом reactor-SLS.
Типичные ошибки
Главная ошибка — класть сложную логику в reactor-SLS: он рендерится на мастере в момент события, данных о состоянии миньонов у него нет, и отлаживать многоэтажные условия в нём мучительно — выносите логику в оркестрацию или state'ы. Вторая — событийные штормы: слишком чувствительный beacon (например, на активно меняющийся файл) заваливает шину, а reactor умножает нагрузку своими реакциями; настраивайте интервалы beacon'ов осознанно. Третья — реакция-петля: reactor меняет то, за чем следит beacon, и цикл замыкается. Наконец, не забывайте про отладку через salt-run state.event — попытки чинить reactor вслепую, без просмотра реальных тегов и данных, отнимают часы.
Связанные понятия
Полезные ресурсы
Проверить знания (2)
Загрузка вопросов…