Что такое Salt

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

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

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

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

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

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

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

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

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

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

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

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

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

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