Что такое Salt

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

Salt — это система удалённого выполнения и управления конфигурацией на Python (лицензия Apache 2.0), которая объединяет три роли в одном инструменте: параллельный запуск команд на парке машин, декларативное описание состояния серверов и событийную автоматизацию. Ключевой тезис: в отличие от инструментов, где «запуск команды» — надстройка над системой конфигурации, в Salt всё наоборот — быстрый транспорт remote execution первичен, а состояния (states) построены поверх него. Это определяет и характер инструмента: Salt в первую очередь про скорость и масштаб, а декларативность добавляется по мере роста зрелости вашей автоматизации.

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

В основе — мастер и миньоны, общающиеся по ZeroMQ: мастер публикует задания через порт 4505, миньоны возвращают результаты через порт 4506. Полезная нагрузка шифруется AES-ключом, а доверие устанавливается обменом RSA-ключами (salt-key -a <minion-id>). Каждая команда — вызов execution-модуля: salt 'web*' pkg.install nginx ставит пакет, salt '*' test.ping проверяет связность. Таргетинг работает по имени, glob'ам, регуляркам и grains — фактам, которые миньон собирает о своей машине.

Декларативный слой — это SLS-файлы: YAML (обычно с Jinja-шаблонизацией), описывающий желаемое состояние — «пакет установлен, конфиг разложен, сервис запущен и перезапускается при изменении конфига» (связки через requisites: require, watch). Файл top.sls сопоставляет state'ы группам миньонов, а state.highstate приводит машину к полному целевому состоянию. Чувствительные данные (пароли, ключи) живут в pillar и доставляются только тем миньонам, которым назначены.

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

Salt закрывает сценарии, где нужны одновременно и «пожарные» операции, и поддержание конфигурации: большой парк Linux-серверов, где утром вы массово ищете уязвимую версию пакета (pkg.version по всему парку за секунды), а вечером раскатываете новое состояние через highstate. Событийная шина с beacons и reactor'ом делает Salt подходящим для самовосстанавливающихся систем: упал сервис — событие — автоматический restart и оповещение. Для управления сетевым оборудованием есть proxy minions, для хостов без агента — salt-ssh с roster-файлом, так что «агент обязателен» — не совсем правда: это режим по умолчанию, а не единственный.

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

Частая ошибка — оценивать Salt по одному сценарию «раскатать конфиг», где разница с Ansible или Puppet неочевидна, и не дойти до сильных сторон: скорости на масштабе и событийной модели. Вторая — писать логику императивно через cmd.run внутри SLS вместо идемпотентных state-модулей: такие состояния невозможно безопасно повторять и проверять через state.apply test=True. Третья — класть секреты в SLS-файлы или grains (grains формирует сам миньон, им нельзя доверять как источнику прав) вместо pillar. Наконец, новички путают execution-модули и state-модули: pkg.install — разовое действие, pkg.installed — декларативная гарантия.

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

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

Проверить знания (2)

Загрузка вопросов…