Что такое SaltStack?

«Что такое SaltStack?» — вопрос из категории Ansible, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

SaltStack (или Salt) — это инструмент для автоматизации управления конфигурацией и удаленного выполнения команд, построенный на архитектуре «мастер-миньон». Я использовал его для централизованного управления парками серверов, где важна высокая скорость и реактивность.

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

  • States (Состояния): Декларативные YAML-файлы (.sls), описывающие целевое состояние системы. Salt обеспечивает идемпотентность — применение состояния несколько раз дает один и тот же результат.
  • Pillar: Система для безопасного хранения и распределения конфиденциальных данных (паролей, ключей) конкретным миньонам.
  • Grains: Статические данные о миньонах (ОС, IP-адрес, аппаратная информация), используемые для целевого применения состояний.
  • Reactor и Event-Driven Automation: Система событий позволяет автоматически реагировать на изменения в инфраструктуре.

Пример State-файла (/srv/salt/webserver/init.sls), который устанавливает и настраивает Nginx:

# Установка пакета nginx
nginx_pkg:
  pkg.installed:
    - name: nginx

# Копирование конфигурационного файла из шаблона Jinja2
nginx_config:
  file.managed:
    - name: /etc/nginx/nginx.conf
    - source: salt://webserver/files/nginx.conf.j2
    - template: jinja2
    - context:
        worker_processes: {{ grains['num_cpus'] }}
    - require:
      - pkg: nginx_pkg

# Запуск и включение службы
nginx_service:
  service.running:
    - name: nginx
    - enable: True
    - watch:
      - file: nginx_config
    - require:
      - pkg: nginx_pkg

Мой опыт и сравнение:

  • Скорость: За счет использования ZeroMQ для связи, Salt выполняет команды на тысячах серверов почти мгновенно, что было критично для масштабных операций.
  • Гибкость: Возможность писать кастомные модули на Python и сложная логика в шаблонах Jinja2 давали большую мощь, но и увеличивали порог входа.
  • Архитектура: Необходимость в master-сервере (хотя есть masterless-режим) добавляет точку отказа и сложности в поддержке по сравнению с Ansible, который работает по SSH. В итоге, для большинства задач управления конфигурацией я сейчас предпочитаю Ansible из-за его простоты и агентлесс-архитектуры, но Salt остается отличным выбором для высокоскоростного удаленного выполнения и сложной событийной автоматизации.