SaltStack (официальное название — Salt) — инструмент управления конфигурацией и оркестрации инфраструктуры с открытым исходным кодом. Написан на Python, работает по модели master-minion: центральный Salt Master рассылает команды на агенты (Minions), установленные на управляемых серверах. В отличие от Terraform, фокусирующегося на provisioning (создание инфраструктуры), SaltStack управляет состоянием уже существующих серверов: устанавливает пакеты, настраивает файлы конфигурации, управляет службами, запускает команды.
Как работает
Архитектура: Salt Master — центральный сервер. Salt Minion — агент на каждом управляемом хосте. Коммуникация через ZeroMQ — высокопроизводительную асинхронную шину сообщений. ZeroMQ позволяет доставлять команды на 10 000 серверов за секунды — это принципиальное отличие от SSH-based инструментов (Ansible), которые подключаются к серверам последовательно или параллельно, но через медленный SSH.
Конфигурация описывается в Salt States — файлах на YAML + Jinja2. State описывает желаемое состояние системы декларативно: «пакет nginx должен быть установлен, служба nginx запущена, файл /etc/nginx/nginx.conf соответствует шаблону». Salt применяет state и приводит систему к описанному состоянию. Idempotency — повторное применение не вызывает лишних действий, если система уже в нужном состоянии.
Salt Grains — данные о хосте (ОС, версия ядра, IP-адреса, роль сервера), собираемые автоматически и доступные в states как переменные. Salt Pillar — конфиденциальные данные (пароли, ключи API), централизованно хранимые на Master и доступные конкретным Minion по правилам.
Безагентный режим (Salt SSH) — работает без установки Minion, через SSH. Медленнее агентного режима, но удобен для начального provisioning серверов.
История
Salt создал Томас Хэтч (Thomas Hatch) в 2011 году. Компания SaltStack основана в 2012-м для коммерческой поддержки. В ноябре 2020 года SaltStack приобрела VMware. Репозиторий Salt передан под управление Linux Foundation Salt Project в 2021 году. Бесплатная версия остаётся open-source (Apache 2.0). К 2024 году конкуренты — Ansible (Red Hat/IBM), Chef, Puppet.
Сравнение с Ansible
| Параметр | SaltStack | Ansible |
|---|---|---|
| Архитектура | Master + Minion (агент) | Agentless (SSH) |
| Транспорт | ZeroMQ (быстрый) | SSH (медленнее) |
| Масштаб | 10 000+ узлов | 1000–5000 узлов |
| Порог входа | Выше (Salt Grains, Pillar) | Ниже (простой YAML) |
| Real-time | Да (события через реактор) | Нет |
На что обращать внимание
SaltStack требует Salt Master — отдельный сервер (VPS) с постоянной доступностью. При падении Master команды не доставляются, но существующие Minions продолжают работу в последнем известном состоянии. Безопасность: порты 4505 и 4506 Salt Master должны быть закрыты через файрвол для внешних подключений. Salt Minion аутентифицируется по ключам — компрометация Master даёт управление всеми серверами. Разграничивайте доступ через Salt ACL (Access Control Lists).
Архитектура SaltStack
SaltStack — система конфигурационного управления и оркестрации. Архитектура: Salt Master + Salt Minion на каждом сервере. Транспорт: ZeroMQ (по умолчанию) или RAET, SSH (agentless режим через salt-ssh). Обмен ключами при подключении нового minion.
States и Grains
States — декларативное описание желаемого состояния системы (YAML+Jinja2). Grains — статические характеристики minion (ОС, IP, RAM). Pillar — секреты и переменные для minion. salt '*' state.apply webserver — применить state ко всем серверам. Top.sls — маппинг серверов на states.
SaltStack vs Ansible vs Puppet
Ansible: agentless, push-модель, проще в начале. SaltStack: агенты (быстрее выполнение), event-driven automation. Puppet: декларативный DSL, для крупных инфраструктур. SaltStack быстрее Ansible при работе с 1000+ серверами. Все три совместимы с CI/CD и Infrastructure as Code.
SaltStack управляет конфигурацией Nginx, PostgreSQL, Docker. В связке с CI/CD: автоматическое применение конфигураций. На Ubuntu и Rocky Linux. Альтернатива Ansible для event-driven автоматизации. systemd-интеграция для управления сервисами.