Что такое SaltStack (Salt) и его основные принципы?

«Что такое SaltStack (Salt) и его основные принципы?» — вопрос из категории DevOps, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

SaltStack (Salt) — это система управления конфигурациями и оркестрации, построенная на архитектуре "master-minion" с использованием удаленного выполнения команд через высокоскоростной шинный протокол (ZeroMQ).

Ключевые концепции и компоненты:

  1. Master: Центральный сервер управления, который отправляет команды и конфигурации minion'ам.
  2. Minion: Агент, устанавливаемый на управляемых хостах, который выполняет команды от master.
  3. States (Состояния): Декларативные конфигурации (на YAML), описывающие желаемое состояние системы.
  4. Pillars: Дерево структурированных данных (секреты, переменные), безопасно передаваемых с master на целевые minion'ы.
  5. Grains: Статическая информация о minion (ОС, IP-адрес, аппаратное обеспечение), собираемая агентом.
  6. Высокоскоростное выполнение: Параллельное удаленное выполнение команд на тысячах серверов.

Пример State (SLS-файл) для установки и запуска Nginx:

# /srv/salt/nginx/init.sls
nginx_pkg:
  pkg.installed:
    - name: nginx

nginx_service:
  service.running:
    - name: nginx
    - enable: True
    - require:
      - pkg: nginx_pkg
    - watch:
      - file: /etc/nginx/nginx.conf

/etc/nginx/nginx.conf:
  file.managed:
    - source: salt://nginx/files/nginx.conf
    - user: root
    - group: root
    - mode: 644

Преимущества:

  • Скорость: Асинхронная модель и ZeroMQ обеспечивают быстрое выполнение.
  • Масштабируемость: Легко управляет большими кластерами.
  • Гибкость: Поддерживает как декларативный (states), так и императивный (execution modules) подход.
  • Событийная система (Reactor): Позволяет создавать реактивные автоматизированные workflows на основе событий в системе.