Основы SaltStack: базовые термины и понятия

Salt, или SaltStack – это инструмент дистанционного выполнения и система управления конфигурацией. Возможности удаленного выполнения позволяют администраторам запускать команды на разных машинах. Функция управления конфигурацией создает модель клиент-сервер для быстрого, легкого и безопасного подключения компонентов инфраструктуры в соответствии с заданной политикой.

В этой статье мы рассмотрим некоторые основные понятия и терминологию, необходимые для эффективного использования Salt.

Роли Salt

Структура управления Salt довольно проста. В типичной установке есть только два разных класса машин.

Salt Master

Читайте также: Установка Salt Master

Salt Master – это машина, которая управляет инфраструктурой и определяет политики для подчиненных серверов. Мастер работает как репозиторий данных конфигурации и центр управления, который инициирует удаленные команды и приводит другие машины в требуемое состояние. Для обеспечения этой функциональности на мастер-сервер устанавливается демон salt-master.

Управлять инфраструктурой можно и без мастера, но большинство настроек используют расширенные функции Salt Master. Для управления большими инфраструктурами Salt может делегировать определенные компоненты и задачи, обычно связанные с мастером, на выделенные серверы. Он также может работать в многоуровневой конфигурации, где команды могут быть переданы через мастер-машины боле низкого уровня.

Salt Minion

Ведомые серверы называются Minion-ами. На каждый ведомый сервер для связи с мастером устанавливается демон salt-minion. Миньон отвечает за выполнение инструкций, отправленных мастером, сообщает о результате заданий и предоставляет данные о базовом хосте.

Взаимодействие компонентов Salt

Мастер и Миньоны Salt по умолчанию взаимодействуют через библиотеку обмена сообщениями ZeroMQ. Она обеспечивает чрезвычайно высокую пропускную способность сети между сторонами, позволяя Salt отправлять сообщения и данные с высокой скоростью. Поскольку ZeroMQ является библиотекой, а не независимым сервисом, эта функциональность встроена в демоны salt-master и salt-minion.

При использовании ZeroMQ Salt поддерживает систему открытых ключей для аутентификации мастеров и миньонов. При первой загрузке миньон генерирует пару ключей и отправляет свои учетные данные на мастер-сервер, от которого он зависит. Затем мастер может принять этот ключ после проверки миньона. После этого обе стороны могут быстро и безопасно обмениваться данными с помощью ZeroMQ, зашифрованной ключами.

Если по какой-либо причине на ноде невозможно установить демон salt-minion, Salt также может выдавать команды через SSH. Этот вариант предоставляется для удобства, но он значительно снижает производительность и в некоторых случаях может привести к осложнениям с другими командами Salt. Для обеспечения производительности, безопасности и простоты настоятельно рекомендуется использовать демон с salt-minion, если это возможно.

Терминология Salt

Теперь нужно ознакомиться с базовыми терминами Salt.

Удаленное выполнение: модули и функции

Salt различает функции удаленного управления и управления конфигурацией. Возможности удаленного выполнения предоставляются специальными модулями. Модули выполнения – это набор связанных функций, которые выполняют работу на миньонах.

Salt включает функции, позволяющие запускать произвольные команды оболочки на миньонах, но идея модулей заключается в том, чтобы предоставить простой механизм для выполнения команд без необходимости выходить из командной строки. Использование модулей позволяет Salt абстрагироваться от основных различий между системами. Благодаря этому вы можете получить одинаковую информацию от миньонов Linux или BSD, хотя фактические механизмы для сбора этих данных будут разными.

Salt предлагает широкий выбор встроенных модулей выполнения для обеспечения готовых функций. Администраторы могут также писать свои собственные модули или включать написанные сообществом модули для расширения библиотеки команд.

Управление конфигурацией: состояния, формулы и шаблоны

Доступ к функциям управления конфигурацией Salt можно получить, создав репозитории конфигурационных файлов. Файлы, содержащиеся в этих репозиториях, могут быть нескольких типов.

Состояния и формулы

Управление конфигурацией Salt в основном реализуется системой состояний (state).

Система состояний использует модули состояний, которые отличаются от описанных выше модулей выполнения. К счастью, модули состояния и выполнения имеют тенденцию отражать друг друга. Система состояний позволяет администратору описывать состояние, в котором должна быть та или иная машина. Как и в случае модулей выполнения, большинство модулей состояния представляют собой ярлыки функций и обеспечивают простой синтаксис для многих общих действий. Это помогает поддерживать читаемость и устраняет необходимость создания сложной логики в файлах управления конфигурацией.

Формулы Salt – это наборы вызовов модулей состояния, объединенные с целью достижения определенного состояния системы. Эти файлы управления конфигурацией описывают, как система должна выглядеть после применения формулы. По умолчанию они записываются в формате сериализации данных YAML, что обеспечивает удобочитаемость и удобство в работе.

Администратор Salt может применять формулы, связывая миньоны с конкретными наборами формул. Миньоны будут выполнять найденные модули состояния, чтобы привести свою систему в соответствие с предоставленной политикой.

Хорошая коллекция формул Salt, созданных организацией и сообществом SaltStack, есть на GitHub.

Шаблоны

Шаблоны позволяют писать формулы Salt и другие файлы более гибким образом. Шаблоны могут использовать информацию о миньонах для создания настраиваемых версий формул или конфигурационных файлов. По умолчанию Salt использует шаблонизатор Jinja, который предлагает возможность замены и простые логические конструкции для принятия решений.

Рендерер – это компонент, который запускает шаблон для создания правильных файлов состояния или конфигурации. Рендереры определяются форматом шаблонов. Учитывая описанные выше значения по умолчанию, рендерер по умолчанию обрабатывает шаблоны Jinja для создания файлов YAML.

Запрос и назначение информации миньонам

Чтобы управлять огромным количеством систем, Salt требует некоторой информации о каждой из хост-систем. Шаблоны, описанные выше, могут использовать данные, связанные с каждой системой, для адаптации поведения каждого миньона. Существует несколько различных систем для запроса или назначения этой информации хостам.

Зерна

Зерна Salt (Salt grains) – это фрагменты информации, собранные и поддерживаемые миньоном, прежде всего в отношении основной системы хоста. Они обычно собираются демоном salt-minion и передаются мастеру по запросу. Эта функциональность может быть использована для различных целей.

Например, зерна можно использовать для таргетинга определенного подмножества нод из пула миньонов для удаленного управления или управления конфигурацией. Если вы хотите увидеть время безотказной работы серверов Ubuntu, зерно позволит вам настроить таргетинг только на эти машины.

Зерна также можно использовать в качестве аргументов для изменений конфигурации или команд. Например, вы можете использовать зерна для получения адреса IPv4, связанного с интерфейсом eth0, для изменения файла конфигурации или в качестве аргумента для команды.

Администраторы также могут назначать зерна для миньонов. Например, довольно распространено использование зерен для назначения роли серверу. Затем это можно использовать для таргетинга подмножества нод.

Хранилища pillar

Зерна можно присвоить миньонам, но подавляющее большинство переменных конфигурации будет назначено через систему pillar. В Salt pillar представляет собой хранилище «ключ-значение», которое миньон может использовать для извлечения произвольно назначенных данных. Это работает как структура данных словаря, которая может быть вложенной или многоуровневой.

Хранилища pillar предлагают несколько важных преимуществ по сравнению с системой зерен. Самое главное, данные pillar доступны только для назначенных ему миньонов. Другие миньоны не будут иметь доступа к значениям, хранящимся внутри pillar. Это делает его идеальным для хранения конфиденциальных данных, специфичных для ноды или подмножества нод. Например, секретные ключи или учетные данные БД часто предоставляются в конфигурации pillar.

Данные pillar часто используются в контексте управления конфигурацией как способ ввода переменных данных в шаблон конфигурации. Salt предлагает выбор шаблонов для замены переменных частей конфигурационного файла элементами, специфичными для ноды, которая будет его использовать. Зерна также часто используются подобным образом для ссылки на данные хоста.

Salt Mine

Salt Mine – это область на vfcnth-сервере, где могут храниться результаты от регулярно выполняемых команд на миньонах. Цель этой системы – собрать результаты произвольных команд, запущенных на миньонах. Это глобальное хранилище может быть запрошено другими компонентами и миньонами в вашей инфраструктуре.

Хранилище Salt mine сохраняет только последний результат для каждого запуска команды, а это значит, что оно не предоставит вам истории. Основная цель Salt mine – предоставить обновленную информацию от миньонов в качестве гибкого дополнения к уже имеющимся зернам данных. Миньоны могут запрашивать данные о соседях через Salt mine. Интервалы, в которых миньоны обновляют данные в Salt mine, можно настроить в индивидуальном порядке.

Дополнительные функции

Salt предоставляет несколько дополнительных систем, которые не вписываются в вышеуказанные категории.

Реакторы

Система реакторов Salt обеспечивает механизм запуска действий в ответ на сгенерированные события. В Salt изменения, происходящие во всей инфраструктуре, приведут к тому, что демоны salt-minion или salt-master будут генерировать события в ZeroMQ. Система реакторов следит за этим и сравнивает события с настроенными реакторами, чтобы реагировать соответствующим образом.

Основной задачей реакторной системы является обеспечение гибкости для автоматического ситуационного реагирования. Например, если вы разработали стратегию автоматического масштабирования, ваша система автоматически создаст ноды, чтобы удовлетворить потребности инфраструктуры в ресурсах. Каждая новая нода запускает событие. Реактор может прослушивать эти события и создавать новые ноды, включив их в существующую инфраструктуру.

Salt Runner

Salt runner – это модули, которые выполняются на главном сервере вместо миньонов. Некоторые runner-ы – это утилиты общего назначения, используемые для проверки состояния или для обслуживания различных частей системы. Некоторые из них – мощные приложения, которые обеспечивают организацию инфраструктуры в более широких масштабах.

Salt returner

Salt returners определяют альтернативные места, куда будут отправлены результаты действия, выполняемого на миньоне. По умолчанию миньоны возвращают свои данные мастеру. Returner позволяет администратору перенаправить возвращаемые данные в другой пункт назначения. Как правило, это означает, что результаты возвращаются в пункт назначения, указанный в returner, и процессу, который инициировал команду миньона.

Чаще всего returner-ы передают результаты в систему базы данных или сервисы метрик или логирования. Returner можно также использовать для сбора данных, связанных с Salt, таких как кэш данных и данные о событиях.

Команды Salt

Соль предоставляет ряд команд для работы с описанными выше компонентами. Основные функции вы найдете ниже.

  • salt-master: это процесс мастер-демона. Вы можете запустить мастера с помощью этой команды напрямую или (что более типично) через сценарий инициализации или service-файл.
  • salt-minion: аналогично, это процесс демона миньона, используемый для связи с мастером и выполнения команд. Эта команда также обычно запускается через сценарий инициализации или service-файл.
  • salt-key: этот инструмент используется для управления открытыми ключами миньона, для просмотра и отбора текущих ключей, отправленных потенциальными миньонами. Он также может генерировать ключи для размещения на миньонах вне диапазона.
  • salt: эта команда используется для таргетинга миньонов для запуска специальных модулей выполнения. Это основной инструмент удаленного выполнения.
  • salt-ssh: эта команда позволяет использовать SSH в качестве альтернативы ZeroMQ.
  • salt-run: эта команда используется для запуска модулей runner на главном сервере.
  • salt-call: эта команда используется для запуска модулей выполнения на текущем миньоне. Она часто используется для отладки проблемных команд путем обхода мастера.
  • salt-cloud: эта команда используется для управления облачными ресурсами разных провайдеров. Она позволяет легко запускать новые миньоны.

Конечно, это только основные команды.

Заключение

Теперь вы знакомы с базовой терминологией SaltStack и понимаете, какие инструменты нужно использовать для управления своей инфраструктурой.

Читайте также:

Tags: ,