Введение в Salt
Тема дорожной карты · SaltStack
Salt (или Salt Project, исторически SaltStack) — это open-source-платформа для удалённого выполнения команд и управления конфигурацией, написанная на Python и распространяемая под лицензией Apache 2.0. Проект был основан Томасом Хэтчем в 2011 году с целью создать быструю шину для выполнения команд на тысячах машин, а затем добавить систему описания состояний. Salt одинаково хорошо справляется с задачами «выполнить cmd.run 'uptime' на всех серверах» и «привести веб-серверы к описанному в SLS-файлах состоянию и поддерживать его».
Как это работает
Классическая топология включает мастер и миньоны. На управляющем сервере работает демон salt-master, на каждой управляемой машине — агент salt-minion. Миньоны подключаются к мастеру через ZeroMQ, который слушает порты 4505 и 4506. Происходит обмен RSA-ключами через salt-key, после чего мастер публикует задания, а миньоны выполняют их локально и возвращают результат. Благодаря постоянному соединению команда salt '*' test.ping опрашивает весь парк за секунды, а не обходит хосты по очереди.
Поверх транспорта работают основные абстракции: execution-модули (разовые действия, такие как установка пакета или перезапуск сервиса), state-модули и SLS-файлы (декларативное описание желаемого состояния), grains (факты о машине, такие как ОС, роль, железо), pillar (защищённые данные и параметры для конкретных миньонов) и шина событий с reactor'ом — фундамент событийной автоматизации. Для машин без агента есть salt-ssh, для сетевого оборудования — proxy minions.
Когда применять
Salt стоит рассматривать, когда у вас сотни и тысячи серверов и важна скорость реакции: постоянное соединение миньонов с мастером делает массовое выполнение команд практически мгновенным. Второй сильный сценарий — событийная автоматизация: beacons на миньонах отслеживают изменения (файл, сервис, нагрузка), а reactor на мастере автоматически запускает исправляющие state'ы — это уже не «запустил плейбук руками», а самовосстанавливающаяся инфраструктура. Если же вам нужен agentless-подход для десятка машин и простая точка входа, лучше начать с Ansible — а к Salt прийти, когда упрётесь в масштаб или в потребность реагировать на события.
Типичные ошибки
Самая частая ошибка новичка — воспринимать Salt только как «декларативный Ansible с агентом» и игнорировать событийную модель, которая и есть главное отличие платформы. Вторая — учить всё сразу; разумный порядок такой: remote execution → grains → states → pillar → Jinja → события. Третья — ставить пакеты из устаревших источников: официальный репозиторий переехал на packages.broadcom.com, рекомендуемый формат пакетов — onedir со встроенным Python, и старые инструкции из блогов часто ведут в тупик. Наконец, не путайте open-source Salt с проприетарным GUI (SaltStack Config): всё, что описано в этом роадмапе, доступно бесплатно.
Связанные понятия
Полезные ресурсы
🔤 Английские термины в этой теме
Слова из этой темы, которые русскоязычные часто произносят неверно. Кнопка 🔊 произносит голосом браузера.
- walkthrough /ˈwɔːkθruː/ l немая, с «θ» разбор: Пишем README и документацию на английском
- scenario /sɪˈnɑːrioʊ/ «синАриоу» разбор: Тестирование: flaky, coverage, mock, fixture, regression
- minutes /ˈmɪnɪts/ протокол встречи, произносится как «минуты» разбор: Митинги и инциденты
- written /ˈrɪtn/ «ритн», двойное t произносится как одно, i краткое разбор: Письменная коммуникация
- remote /rɪˈmoʊt/ ударение на второй слог разбор: Что носители скажут иначе: айтишник, сеньор, проект
- result /rɪˈzʌlt/ ударение на второй слог разбор: Behavioral questions и метод STAR
- repository /rɪˈpɒzɪtəri/ ударение на «по», четыре слога, а не «репозитОри» разбор: Где встречается: код, доки, тикеты, созвоны