Введение в Salt

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

Salt (он же Salt Project, исторически SaltStack) — это open-source-платформа для удалённого выполнения команд и управления конфигурацией, написанная на Python и распространяемая под лицензией Apache 2.0. Идея, с которой Томас Хэтч начал проект в 2011 году, отличалась от подхода тогдашних Puppet и Chef: сначала построить очень быструю шину для выполнения команд на тысячах машин, а уже поверх неё — систему описания состояний. Поэтому 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): всё, что описано в этом роадмапе, доступно бесплатно.

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

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

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

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