Гид по технологиям

Установка SaltStack (Master и Minion) на Rocky Linux

• 8 min read • DevOps • Обновлено 21 Nov 2025
SaltStack на Rocky Linux: Master и Minion — полный гид
SaltStack на Rocky Linux: Master и Minion — полный гид

Что вы получите из этого руководства

  • Пошаговая инструкция по установке 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

Ключ и репозиторий SaltStack

Проверьте список репозиториев и обновите кеш:

sudo dnf repolist
sudo dnf makecache

Проверка репозиториев и генерация метаданных

Установка SaltStack Master

На сервере master установите пакет salt-master:

sudo dnf install salt-master

Установка 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-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

Firewalld с правилами для Salt

Important: если вы используете облачный провайдер (AWS, GCP, Azure), откройте эти порты в правилах безопасности (security groups/NSG) только между доверенными сетями.

Установка SaltStack Minion

На каждом minion установите агент:

sudo dnf install salt-minion

Установка 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

Проверка статуса 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

Проверка Salt state

Чтобы применить состояние ко всем minion:

sudo salt '*' state.apply lemp

Установка LEMP через Salt state

Проверка и критерии приёмки

Критерии приёмки для успешного развёртывания 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)

  1. Подготовьте базовые образы Rocky Linux.
  2. Установите salt-minion в образ.
  3. Разверните master и настройте репозиторий.
  4. Присоедините minion, примите ключи.
  5. Пропишите состояния и протестируйте в staging.
  6. Примените состояния в production малыми батчами.

Ментальные модели и эвристики

  • «Управление состоянием»: думайте о конфигурации как о целевом состоянии, а не наборе команд.
  • «Idempotency»: любое состояние должно быть безопасно применяемым многократно.
  • «Малые изменения»: тестируйте изменения на одном minion перед массовым применением.

Когда Salt не подходит или альтернативы

Counterexamples и альтернативы:

  • Для одноразовых ад‑hoc задач можно использовать Ansible (агентless).
  • Если требуется встроенная оркестрация в облаке, рассмотрите Terraform для инфраструктуры и Salt для конфигурации.
  • Если сеть очень ограничена и нельзя держать открытые порты, используйте agentless инструменты.

Salt хорошо подходит для больших инфраструктур, где нужен постоянный двусторонний канал.

Шаблон тестов и критерии приёмки

Кейс: установка LEMP

  • Предусловия: minion зарегистрирован.
  • Шаги: применить state.apply lemp.
  • Ожидаемый результат: пакеты установлены, сервисы запущены.
  • Критерий приёмки: все проверки из раздела Критерии приёмки пройдены.

Пример playbook / SOP для быстрого восстановления

  1. Отключить minion от master: sudo systemctl stop salt-minion.
  2. Проверить логи и исправить конфигурацию.
  3. Пересоздать ключ: на master sudo salt-key -d и принять новый ключ.
  4. Применить необходимые состояния: 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.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро