Что такое 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 гарантирует декларативное состояние.
Связанные понятия
Полезные ресурсы
🔤 Английские термины в этой теме
Слова из этой темы, которые русскоязычные часто произносят неверно. Кнопка 🔊 произносит голосом браузера.
- quite /kwaɪt/ не путать с *quiet* /ˈkwaɪət/ разбор: Культура: it might be worth considering значит сделай
- walkthrough /ˈwɔːkθruː/ l немая, с «θ» разбор: Пишем README и документацию на английском
- vulnerable /ˈvʌlnərəbl/ ударение на первый слог, «вАлнерэбл» разбор: Безопасность: vulnerability, exploit, hardening, least privilege
- imperative /ɪmˈpɛrətɪv/ «импЕрэтив», повелительное наклонение разбор: Commit messages: Conventional Commits, повелительное наклонение
- character /ˈkærəktər/ ударение на первый слог; в значении «символ» часто сокращают до *char* разбор: Как читать код вслух
- scenario /sɪˈnɑːrioʊ/ «синАриоу» разбор: Тестирование: flaky, coverage, mock, fixture, regression
- idempotent /ˌaɪdɛmˈpoʊtənt/ ударение на третий слог разбор: Немые буквы и ударение: cache, queue, suite, height