Налаштування централізованого управління конфігурацією через SaltStack

Ручне керування конфігурацією на сотнях серверів — це хаос і помилки. Ми налаштовуємо централізоване керування через SaltStack, щоб ви могли оновлювати конфігурації на всіх хостах за секунди. Наша команда реалізує проєкт під ключ — від архітектури до підтримки, забезпечуючи надійну та масштабовану інфраструктуру.
Часті запитання

Уявіть: у вас 500 хостів, і щоранку треба оновити конфігурацію Nginx на всіх. Ansible по SSH робить це за 15 хвилин — SaltStack вирішує задачу за 2-3 секунди. Його асинхронний транспорт на ZeroMQ дає push-модель з мілісекундною затримкою, а event-driven реактор автоматично застосовує конфігурацію при появі нової ноди. Ми впровадили SaltStack у десятках проектів з інфраструктурою до 5000 хостів. У цій статті розберемо, як налаштувати Master-Minion кластер, написати State-файли та використовувати Reactor для автоматизації. Отримайте консультацію нашого інженера — розберемо вашу інфраструктуру та підберемо оптимальну архітектуру SaltStack.

Чому SaltStack до 300 разів швидше за Ansible?

SaltStack використовує push-модель через ZeroMQ, відправляючи команди на всі міньйони одночасно. Ansible працює через SSH — кожне з'єднання створюється послідовно. Для 1000 нод SaltStack застосовує конфігурацію за 1-2 секунди, Ansible — за 15 хвилин. Це робить SaltStack незамінним для динамічної інфраструктури з частими змінами.

Ключові проблеми, які вирішує SaltStack

Проблема 1: Синхронізація тисяч серверів. При push-моделі Salt мастер може розіслати конфігурацію на 5000 нод за 2-3 секунди. Ніякого SSH-циклу.

Проблема 2: Гнучка маршрутизація за оточеннями. Grains і Pillar дозволяють застосовувати конфігурацію тільки до потрібних ролей (web, db, monitoring) без створення окремих inventory.

Проблема 3: Реакція на події в реальному часі. Reactor ловить події з Event Bus і автоматично запускає дії — наприклад, при появі нової ноди одразу застосувати hardening.

Як ми налаштовуємо SaltStack: кейс із практики

Одного разу мігрували інфраструктуру з 300 хостів з ручного управління на Salt. За 2 тижні розгорнули Master (виділений сервер з 8 vCPU), налаштували auto_accept: false та застосували ключі через salt-key. Налаштували базові state для встановлення Zabbix agent, hardening SSH, монтування NFS. Використовували salt-run state.orch для оркестрації — дозволило застосувати зміни на всі ноди за 1 хвилину.

Деталі кейсу: типи нод і складнощі. Були ноди на CentOS 7, Ubuntu 20.04 та Debian 11. Для різних ОС довелося розділити стани через grains: {% if grains['os'] == 'CentOS' %}...{% endif %}. Pillar використовували для зберігання паролів від Zabbix та SSH-ключів. Основна складність — legacy-сервери з нестандартними шляхами до логів. Описали кожен вручну, потім винесли в Pillar, спростивши підтримку.

Архітектура: Master, Minion, ZeroMQ

Salt працює через ZeroMQ: Salt Master слухає на портах 4505 (publish) та 4506 (return). Minion-демон на кожному хості підписується на 4505 і чекає команд. Це дає push-модель з практично нульовою затримкою. Базова установка Master і Minion:

# На майстрі (RHEL/CentOS)
rpm --import https://repo.saltproject.io/salt/py3/redhat/9/x86_64/SALT-PROJECT-GPG-PUBKEY-2023.gpg
curl -fsSL https://repo.saltproject.io/salt/py3/redhat/9/x86_64/latest.repo | tee /etc/yum.repos.d/salt.repo
dnf install salt-master
# На кожному керованому хості
dnf install salt-minion

/etc/salt/master — основний конфіг. Ключові параметри:

---
interface: 0.0.0.0
file_roots:
  base:
    - /srv/salt
  production:
    - /srv/salt/production
    - /srv/salt/base
pillar_roots:
  base:
    - /srv/pillar
auto_accept: false # приймати ключі міньйонів тільки вручну
worker_threads: 10

На кожному minion: /etc/salt/minion:

master: salt-master.internal id: web-01.internal 

Після старту minion відправляє публічний ключ майстру. Прийняти всі очікувані ключі: salt-key -A. Команда salt '*' test.ping повинна повернути True з усіх нод.

Як написати свій перший State-файл?

State-файли — основа SaltStack. Приклад встановлення та налаштування nginx:

---
# /srv/salt/nginx/init.sls
nginx:
  pkg.installed:
    - name: nginx
  service.running:
    - enable: True
    - watch:
      - file: /etc/nginx/nginx.conf

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

Шаблон nginx.conf.j2 використовує Jinja2 та змінні з Pillar. Pillar зберігає чутливі дані, специфічні для хостів. Прив'язка через top.sls:

# /srv/pillar/top.sls base: 'web-*': - nginx 'db-*': - postgresql 'G@role:kubernetes-worker': - k8s-worker 

Застосувати state на групу:

salt 'web-*' state.apply nginx salt -G 'role:webserver' state.highstate 

What is Pillar and how to configure it?

Pillar — це secure data store для конфіденційних даних: паролів, ключів, налаштувань, специфічних для хостів. Pillar-файли пишуться в YAML, прив'язуються до minion за ID або grains через top.sls. Наприклад, можна зберігати різні паролі БД для різних оточень. На відміну від Grains, Pillar не відправляється на minion автоматично — мастер передає тільки ті дані, які дозволені для конкретного minion.

Grains та таргетинг

Grains — факти про minion: OS, CPU, пам'ять, IP-адреси, кастомні атрибути. Таргетинг за grains:

salt -G 'os:Ubuntu' cmd.run 'apt-get update' salt -C 'G@os:CentOS and I@role:database' state.apply postgresql 

Кастомні grains розмічають сервери за ролями, оточеннями, датацентрами — застосовуйте конфігурацію точково.

Reactor: подієва автоматизація

Реактор підписується на події Salt Event Bus та запускає actions. Приклад: новий minion аутентифікувався — автоматично застосувати базовий hardening:

---
# /etc/salt/master.d/reactor.conf
reactor:
  - 'salt/auth':
    - /srv/reactor/auth.sls

# /srv/reactor/auth.sls
{% if data['act'] == 'accept' %}
apply_base_state:
  local.state.apply:
    - tgt: {{ data['id'] }}
    - arg:
      - base-hardening
{% endif %}

Порівняння SaltStack та Ansible

Характеристика SaltStack Ansible
Архітектура Push (ZeroMQ) Pull (SSH)
Затримка при 1000 нод 1-2 сек 5-15 хв
Event-driven Вбудований Reactor Через AWX/cron
Ідемпотентність Гарантується State Гарантується модулями
Складність порогу Висока Низька

Чому варто довірити налаштування професіоналам?

SaltStack — потужний, але вимогливий до проектування. Наші інженери з 10+ річним досвідом у DevOps гарантують відмовостійку архітектуру, правильну сегментацію оточень та оптимальну продуктивність. Ми надаємо:

  • Повну документацію: схеми, конфіги, runbook по інцидентах.
  • Навчання команди: 3-денний воркшоп з написання State-файлів та використання Reactor.
  • SLA підтримки: реагування на збої протягом 1 години.

Середній ROI впровадження SaltStack становить 6-12 місяців за рахунок скорочення часу простоїв та автоматизації рутинних завдань.

Строки та що входить в роботу

Етап Склад робіт Орієнтовний строк
Аудит інфраструктури Аналіз поточного стеку, 200 хостів+ 1-2 дні
Проектування High-level дизайн, розмежування оточень 2-3 дні
Встановлення Master+Minion Налаштування кластера Master (HA), деплой на 50 нод 3-5 днів
Розробка States States для 5-10 сервісів, Pillar, Grains 5-7 днів
Налаштування Reactor Event-driven сценарії: автооновлення, автомасштабування 2-4 дні
Документування+навчання Runbook, відеоуроки для адмінів 2-3 дні

Орієнтовні строки: від 2 до 3 тижнів на інфраструктуру до 500 нод. Вартість розраховується індивідуально — зв'яжіться з нами для точної оцінки. Отримайте консультацію нашого DevOps-інженера: розберемо вашу інфраструктуру та запропонуємо оптимальне впровадження SaltStack. Замовте пілотний проект на 10 хостах вже сьогодні.

Типові помилки при самостійному налаштуванні

  • Auto_accept: true — небезпечна вразливість: будь-який піднятий minion отримає доступ до майстра. Завжди використовуйте ручне прийняття ключів.
  • Погана структура Pillar — змішування секретів і ролей призводить до витоків. Використовуйте окремі корені для різних середовищ.
  • Ігнорування reactor — без нього Salt лише половина можливостей. Налаштуйте хоча б базові події.

Щоб уникнути цих проблем, довірте налаштування нашій команді. Ми вже реалізували успішні проекти у фінансовому секторі та рітейлі. Зв'яжіться з нами, щоб обговорити ваші завдання.

Згідно з документацією SaltStack, архітектура через ZeroMQ забезпечує продуктивність до 10000 команд в секунду.

Наші компетенції:

Останні роботи

  • Розробка сайту компанії B2B ADVANCE
    Розробка сайту компанії B2B ADVANCE
    1542
  • Розробка веб-додатків для компанії FEEDME
    Розробка веб-додатків для компанії FEEDME
    1393
  • Розробка веб-сайту для компанії БЕЛФІНГРУП
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    1081
  • Розробка інтернет магазину для компанії FURNORO
    Розробка інтернет магазину для компанії FURNORO
    1368
  • Розробка логотипу компанії B2B Advance
    Розробка логотипу компанії B2B Advance
    815
  • Розробка веб-додатків для компанії Enviok
    Розробка веб-додатків для компанії Enviok
    1139