Установка SaltStack (Master и Minion) на Rocky Linux
Что вы получите из этого руководства
- Пошаговая инструкция по установке SaltStack Master и Minion на Rocky Linux.
- Как запускать произвольные команды и базовые модули (pkg, service, cmd).
- Пример Salt state для установки LEMP (Nginx, MariaDB, PHP-FPM).
- Чек-листы ролей, критерии приёмки, отладка и рекомендации по безопасности.
Введение
Salt (SaltStack) — это открытый фреймворк автоматизации для управления конфигурациями, удалённого выполнения команд и инфраструктуры как кода. Salt написан на Python и использует архитектуру Master/Minion: Master контролирует состояния, а Minions — целевые серверы, на которых выполняется конфигурация.
Ключевая идея: один контроллер (master) отправляет команды и состояния множеству агентов (minion). Для связи используются порты TCP 4505 и 4506.
В этом руководстве мы устанавливаем SaltStack на три сервера Rocky Linux: один master и два minion. Весь набор команд и конфигураций применим к аналогичным RHEL-производным системам.
Основные понятия
- Master: центральный контроллер Salt, принимает ключи и отправляет задания.
- Minion: агент на управляемом сервере, выполняет команды и состояния.
- State (sls): описание желаемого состояния ресурса (например, пакет установлен, сервис запущен).
Предварительные требования
- Минимум два сервера Rocky Linux (рекомендуется 3 при тестировании).
- Ненулевой пользователь с sudo-привилегиями на каждом сервере.
- Сетевое соединение между серверами и доступ по IP/hostname.
Важно: при тестировании используйте отдельную сеть или VPN. Не публикуйте ключи и адреса в открытом доступе.
Планирование сети и DNS
Пример используемых серверов и IP:
master 192.168.5.10 SaltStack Master
minion1 192.168.5.15 SaltStack Minion
minion2 192.168.5.16 SaltStack MinionНастройте /etc/hosts на каждом узле (или DNS) для корректного разрешения имён.
sudo nano /etc/hostsДобавьте строки (пример):
192.168.5.10 master
192.168.5.15 minion1
192.168.5.16 minion2Сохраните и закройте файл.
Добавление репозитория SaltStack
Импортируйте GPG-ключ и добавьте официальный репозиторий Salt:
sudo rpm --import https://repo.saltproject.io/py3/redhat/8/x86_64/latest/SALTSTACK-GPG-KEY.pub
curl -fsSL https://repo.saltproject.io/py3/redhat/8/x86_64/latest.repo | sudo tee /etc/yum.repos.d/salt.repo
Проверьте список репозиториев и обновите кеш:
sudo dnf repolist
sudo dnf makecache
Установка SaltStack Master
На сервере master установите пакет salt-master:
sudo dnf install salt-master
Отредактируйте конфигурацию /etc/salt/master и укажите интерфейс, на котором будет слушать master:
sudo nano /etc/salt/masterПример строки:
interface: 192.168.5.10Включите и запустите службу:
sudo systemctl enable --now salt-master
sudo systemctl status salt-master
Откройте в брандмауэре порты, используемые Salt (TCP 4505 и 4506):
sudo firewall-cmd --zone=public --permanent --add-port={4505,4506}/tcp
sudo firewall-cmd --reload
sudo firewall-cmd --list-all
Important: если вы используете облачный провайдер (AWS, GCP, Azure), откройте эти порты в правилах безопасности (security groups/NSG) только между доверенными сетями.
Установка SaltStack Minion
На каждом minion установите агент:
sudo dnf install salt-minion
Отредактируйте /etc/salt/minion и укажите адрес master:
sudo nano /etc/salt/minionПример строки:
master: 192.168.5.10Запустите агент и включите автозапуск:
sudo systemctl enable --now salt-minion
sudo systemctl status salt-minion
Связывание Minion с Master (ключи)
После запуска minion на master появятся не принятые ключи. На master выполните:
salt-key --finger-allПринятие ключа для minion1 и minion2:
sudo salt-key -a minion1
sudo salt-key -a minion2Проверьте, что ключи находятся в разделе Accepted Keys:
salt-key --finger-all
Проверьте связь командой ping:
salt 'minion1' test.ping
salt 'minion2' test.ping
salt '*' test.pingОжидаемый ответ: True от каждого minion.
Проверка версии Salt на всех minion:
salt '*' test.versionПримечание: версия в примерах документации может отличаться от вашей. Актуальную версию можно узнать в репозитории проекта.
Выполнение произвольных команд и использование модулей
Salt использует модули для выполнения задач: cmd, pkg, service, file и др.
Примеры:
Выполнить uname на всех minion:
salt '*' cmd.run 'uname -a'Обновить кеш пакетов на всех minion:
salt '*' pkg.refresh_dbПоказать информацию о пакете bash:
salt '*' pkg.show bashУстановить пакет chrony на всех minion:
salt '*' pkg.install chronyСписок репозиториев на minion:
salt '*' pkg.list_reposСписок доступных обновлений:
salt '*' pkg.list_upgradesПроверить доступность сервиса chronyd:
salt '*' service.available chronydВключить автозапуск сервиса chronyd:
salt '*' service.enabled chronydСписок запущенных сервисов:
salt '*' service.get_runningПолучить команды ExecStart для сервисов:
salt '*' service.execsСовет: добавляйте –out=box или –out=json для структурированного вывода при автоматизированной обработке.
Установка LEMP с помощью Salt state
Мы создадим состояние для установки Nginx, MariaDB и PHP-FPM на minion.
RHEL-производные используют модули DNF для включения потоков (modules). На момент написания нет прямого Salt-модуля для dnf module enable, поэтому используем cmd.run для включения потоков:
salt '*' cmd.run 'sudo dnf module enable nginx:1.20 -y'
salt '*' cmd.run 'sudo dnf module enable mariadb:10.5 -y'
salt '*' cmd.run 'sudo dnf module enable php:8.0 -y'Создайте директорию состояния и файл:
sudo mkdir -p /srv/salt/lemp
sudo nano /srv/salt/lemp/init.slsСодержимое init.sls:
lemp_stack:
pkg.installed:
- pkgs:
- nginx
- mariadb-server
- php
- php-fpm
nginx:
service.running:
- enable: True
- reload: True
mariadb:
service.running:
- enable: True
- reload: True
php-fpm:
service.running:
- enable: True
- reload: TrueСохраните файл. Чтобы протестировать соответствие состояния без применения, выполните:
sudo salt '*' state.show_sls lemp
Чтобы применить состояние ко всем minion:
sudo salt '*' state.apply lemp
Проверка и критерии приёмки
Критерии приёмки для успешного развёртывания LEMP:
- Все minion зарегистрированы на master и отвечают test.ping.
- Пакеты nginx, mariadb-server, php и php-fpm установлены.
- Сервисы nginx, mariadb и php-fpm запущены и включены в автозапуск.
- Порты приложений доступны в локальной сети (например, 80/443 для Nginx).
Проверочные команды:
salt '*' pkg.version nginx
salt '*' service.status nginx
salt '*' cmd.run 'ss -tulpn | grep nginx'Отладка распространённых проблем
- Minion не появляется на master: проверьте /var/log/salt/minion, правильность master в /etc/salt/minion и сетевые правила.
- Ключ не принимается: выполните salt-key –list-all и проверьте отпечаток.
- Порты 4505/4506 закрыты: проверьте firewalld, security group облака и SELinux.
- State не применился из-за зависимостей: используйте salt ‘*’ state.apply lemp -l debug для подробного лога.
Полезные команды для отладки:
sudo journalctl -u salt-master -b
sudo journalctl -u salt-minion -b
sudo tail -n 200 /var/log/salt/minion
sudo tail -n 200 /var/log/salt/masterРекомендации по безопасности и устойчивости
- Ограничьте доступ к портам 4505/4506 по IP или VPN.
- Регулярно архивируйте /etc/salt/pki и /srv/salt.
- Используйте роли и ACL для управления привилегиями в Salt Enterprise (если применимо).
- Рассмотрите настройку автоудаления старых ключей и мониторинга подозрительных ключей.
- При использовании публичного облака применяйте дополнительные сетевые фильтры и WAF.
Security hardening — дополнительные шаги:
- Включите автоматическое обновление безопасности на minion или запланируйте периодические обновления через Salt.
- Настройте SELinux режим enforcing и протестируйте состояния под SELinux.
- Ограничьте доступ к /srv/salt через системные разрешения.
Роли и чек-листы
Чек-лист для администратора Master:
- Настроен и запущен salt-master.
- Открыты порты 4505/4506 в доверенной сети.
- Приняты ключи minion.
- Созданы и протестированы состояния в /srv/salt.
Чек-лист для администратора Minion:
- Установлен salt-minion.
- В файле /etc/salt/minion указан адрес master.
- Агент запущен и отвечает на ping.
- Логи minion проверены на ошибки.
Роль разработчика (deploy):
- Создать состояние для развертывания приложения.
- Проверить idempotency: повторное применение состояния не меняет систему.
- Написать тесты состояния (state.d/test или cmd.run проверки).
Методология быстрого развертывания (Playbook)
- Подготовьте базовые образы Rocky Linux.
- Установите salt-minion в образ.
- Разверните master и настройте репозиторий.
- Присоедините minion, примите ключи.
- Пропишите состояния и протестируйте в staging.
- Примените состояния в production малыми батчами.
Ментальные модели и эвристики
- «Управление состоянием»: думайте о конфигурации как о целевом состоянии, а не наборе команд.
- «Idempotency»: любое состояние должно быть безопасно применяемым многократно.
- «Малые изменения»: тестируйте изменения на одном minion перед массовым применением.
Когда Salt не подходит или альтернативы
Counterexamples и альтернативы:
- Для одноразовых ад‑hoc задач можно использовать Ansible (агентless).
- Если требуется встроенная оркестрация в облаке, рассмотрите Terraform для инфраструктуры и Salt для конфигурации.
- Если сеть очень ограничена и нельзя держать открытые порты, используйте agentless инструменты.
Salt хорошо подходит для больших инфраструктур, где нужен постоянный двусторонний канал.
Шаблон тестов и критерии приёмки
Кейс: установка LEMP
- Предусловия: minion зарегистрирован.
- Шаги: применить state.apply lemp.
- Ожидаемый результат: пакеты установлены, сервисы запущены.
- Критерий приёмки: все проверки из раздела Критерии приёмки пройдены.
Пример playbook / SOP для быстрого восстановления
- Отключить minion от master: sudo systemctl stop salt-minion.
- Проверить логи и исправить конфигурацию.
- Пересоздать ключ: на master sudo salt-key -d
и принять новый ключ. - Применить необходимые состояния: sudo salt ‘
’ state.apply .
Полезные команды и cheatsheet
- Принять ключ: sudo salt-key -a
- Пинг: salt ‘
’ test.ping - Версия: salt ‘*’ test.version
- Применить состояние: sudo salt ‘*’ state.apply
- Показать состояние: sudo salt ‘*’ state.show_sls
Модель масштабирования
- Малые кластеры: один master, несколько minion.
- Крупные инсталляции: кластер master с балансировкой, мастер‑репликация PKI и разделение ролей (orchestration master, syndic).
Миграция с другого CM и совместимость
- При миграции с Ansible можно перенести задачи в sls по одной ролью за раз.
- Тестируйте каждый слепок в staging и используйте canary‑deployment (наблюдение за небольшой группой узлов).
Частые ошибки и рекомендации по устранению
- Ошибка: «Minion не подключается» — проверьте /etc/salt/minion: master:
. - Ошибка: «state.apply завершается с ошибкой» — проверить зависимости пакетов и доступность репозиториев.
Мини-словарь
- Minion — агент Salt, установленный на управляемом сервере.
- Master — сервер, управляющий состояниями и командами.
- SLS — Salt state файл (YAML-подобный формат).
Простая диаграмма принятия решения
flowchart TD
A[Хотите централизованное управление?] -->|Да| B[Нужен двусторонний канал?]
A -->|Нет| Z[Используйте скрипты/ansible]
B -->|Да| C[Salt: master/minion]
B -->|Нет| Z
C --> D[Развертывание состояний / state.apply]Часто задаваемые вопросы
Q: Можно ли использовать Salt без установки агента?
A: Salt преимущественно агентный, но существуют способы удалённого выполнения через SSH (salt-ssh) для agentless задач.
Q: Что делать при конфликте версий пакетов при применении state?
A: Проверьте включённые DNF module streams и репозитории. Явно укажите версии в state или используйте cmd.run для включения нужного модуля.
Q: Как обеспечить отказоустойчивость master?
A: Используйте несколько master и syndic, настройте резервное копирование PKI и репликацию конфигураций.
Заключение
В этой инструкции вы прошли полный путь установки SaltStack Master и Minion на Rocky Linux, проверили подключение, узнали, как выполнять произвольные команды и написали простое состояние для установки LEMP. Применяйте пракси, тестируйте изменения в staging и автоматизируйте рестарту и обновления через Salt states.
Expert quote: “Salt удобен для управления сотнями и тысячами серверов благодаря быстрой коммуникации и гибким состояниям”, — эксперт по DevOps.
Ресурсы и дальнейшие шаги
- Документация Salt: https://docs.saltproject.io (рекомендуется для продвинутых сценариев).
- Настройка syndic и мульти‑master для крупных инсталляций.
Частые команды для справки
sudo dnf install salt-master
sudo dnf install salt-minion
sudo systemctl enable --now salt-master
sudo systemctl enable --now salt-minion
salt '*' test.ping
salt '*' state.apply lempПодпись: это подробное руководство должно помочь надежно и безопасно развернуть SaltStack на Rocky Linux.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента