Принцип работы и структура SaltStack

Принцип работы и структура SaltStack

Недавно, я начал изучать SaltStack, хотелось бы поговорить в данной статье «Принципы работы и структура SaltStack» о принципах работы и о структуре самого SaltStack.

Эта тема для начинающих и вы получите основы SaltStack и как все в нем работает:

  • Установка и настройка SaltStack (Говорилось в предыдущей моей статье).
  • Удаленно выполнять команды во всех управляемых системах (Говорилось в предыдущей моей статье).
  • Проектирование, разработка и развертывание системных конфигураций (Поговорим об этом).
  • Использование Salt Reactor-а для автоматизации инфраструктуры (Поговорим об этом).
  • Координация сложных операций управления, используя SaltStack Orchestration (Поговорим об этом).

Структура Salt

Для наглядности, приведу скриншот:

Структура Salt

Структура Salt

  • SaltStack Components — Компоненты SaltStack.
  • SaltStack Flexibility —  Гибкость SaltStack.
  • SaltStack Speed — Скорость SaltStack.
  • SaltStack Fundamentals — Основы SaltStack.
  • Configuration management — Управление конфигурациями.

А сейчас, я расскажу о каждом компонентах в более подробной форме.

КОМПОНЕНТЫ SALTSTACK

В SaltStack имеется довольно большое количество компонентов, и сейчас я расскажу о них и зачем они нужны:

  • Salt Master
    Salt Master
    Центральная система управления. Эта система используется для передачи команд и конфигураций на minion-ы, которые работают на управляемых системах.
  • Salt Minions
    Salt Minions
    Управляемая система. Эта система получает команды и настройки от salt-master.
  • Execution Modules
    Execution ModulesСпециальные команды, выполняемые из командной строки с одной или нескольких управляемых систем. Полезно для:-Мониторинга в режиме реального времени, статуса и инвентаря.
    -Разовых команд и скриптов.
    -Развертывания критических обновлений.
  • Formulas (States)Formulas (States)

    Декларативные или необходимые представление конфигураций системы.
  • Grains
    Grains

    Системные переменные. Grains — это статическая информация о лежащей в основе управляемой системы и включают в себя операционную систему, память, и многие другие свойства системы. Вы также можете задать пользовательские grains для любой системы.
  • Pillar
    Pillar в Salt

    Переменные пределяемые пользователем. Эти безопасные переменные определены и сохранены на salt-master, а затем «назначены» (assigned) на одну из/или несколько нод (миньонов) с использованием targets. Компонент хранит значения данных ( порты, пути к файлам, параметры конфигурации и пароли).
  • Top File
    Top File в Salt

    Формулы (Formulas) и данные pillar для salt-minion-ов.
  • Runners
    Runners в Salt
    Модули, которые выполняются на salt-master-е для выполнения задач. Runners сообщают состояние задания, статус соединения, чтение данных из внешних интерфейсов, запросы связанные с salt-minion-ов и многое другое.Например, Orchestrate runner координаты развертывания конфигурации между многими системами.
  • Returners
    Returners в SaltОтправляет данные, возвращаемые salt-minion-ами на другую систему, например, базы данных. Returners могут запускаться на salt-minion-ах или на salt-master-е.
  • Reactor
    Reactor в Salt
    Trigger реакции, когда события происходят в вашей SaltStack среде.
  • Salt Cloud / Salt VirtSalt Cloud / Salt VirtПредоставление системы на облачных провайдерах (cloud providers)/гипервизорах (hypervisors) и немедленно привести их в управление. Другими словами — создание полного контроля docker/AWS  и др.
  • Salt SSH
    Salt SSHВыполнять salt команды через SSH на системах, которые не имеют установленных salt-minion-ов.

ГИБКОСТЬ SALTSTACK

SaltStack может быть реализован, чтобы следовать наиболее популярным моделям управлениями системам:

  • Агент и сервер.
  • Только агент.
  • Только сервер.
  • Любое или все выше перечисленное в той же среде.

АГЕНТ И СЕРВЕР

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

ТОЛЬКО АГЕНТ

Если вы избежали инструментов управления, потому что вы не хотите настраивать все эти «вещи», вероятно данная модель для вас. Salt-agent-ы могут выполнять задачи управления с/или без участия сервера.

Если вы не хотите использовать сервер управления, вы просто не создадите. Вы можете перемещаться вперед и назад между этой моделью и агентом и моделью сервера или использовать их вместе.

ТОЛЬКО СЕРВЕР

Salt команды могут быть выполнены на удаленных системах использующих SSH вместо salt-agent-а. Настройка всех веб-серверов, использующих salt-agent, но выполняют специальные задачи управления на серверах баз данных через SSH. Это полностью зависит от вас.

РАЗМЕР НЕ ПОДХОДИТ ВСЕМ

В моих статьях, я буду использовать salt-agent-ы (minion-ы) и модель сервера (salt-master). Вы можете использовать любой другой подход. Когда дело доходит до работы, возможности SaltStack принципиально одинаковы для каждой модели.

СКОРОСТЬ SALTSTACK.

SaltStack в настоящее время обеспечивает оркестровку (orchestration), управление конфигурациями, реакторы событий, облаками выделенных ресурсов, и многое другое, все построено вокруг высокоскоростной шине SaltStack.

Salt-master устанавливает постоянные соединения для всех управляемых систем и использует легкие протоколы для того, чтобы в режиме реального времени с тысячами управляемых систем.

ПОДКЛЮЧАЕМАЯ АРХИТЕКТУРА

SaltStack обеспечивает подключаемые архитектуры, что позволяет расширить практически любую часть системы. Например, вы можете легко добавить модули, отправить результаты задания на новую систему, и использовать маяки (beacons) для мониторинга любой части управляемой системы.

ОСНОВЫ SaltStack 

Я расскажу о следующем:

  • Как установить SaltStack.
  • Как запускать команды на управляемых системах.
  • Определить (написать) конфигурации.
  • Как применять команды и конфигурации для конкретных систем.

Я буду использовать свой мак чтобы создать простую SaltStack среду. Но для начала стоит выполнить:

  • Установить VirtualBox.
  • Установить Vagrant.
  • Скачать готовый  демо-пакет с saltstack-ом: https://github.com/UtahDave/salt-vagrant-demo.
  • После чего, распакуйте скачанный архив. Затем перейдите в распакованную папку:
    MACOS: 

    cd ~/Downloads/salt-vagrant-demo-master
  • Запустите команду на vagrantчтобы запустить демо среду:
    # vagrant up

После запуска vagrant, vagrant создает и запускает несколько виртуальных машин под управлением VirtualBox в фоновом режиме. Эти виртуальные машины работают, пока вы не закроете их, поэтому не забудьте выключить его потом:

# vagrant halt

Если вы хотите сделать все с самого, вы можете запустить команду и она удалит образы vagrant:

# vagrant destroy

И так, идем дальше…..

В командной строке, перейдите в папку vagrant-demo-master и запустите следующую команду, чтобы войти на свой Salt-master:

$ vagrant ssh master

После подключения, выполните следующую команду, чтобы стать пользователем root:

$ sudo su

ПОКАЗАТЬ ВСЕ КЛЮЧИ.

На salt-master, вы можете быстро просматривать все миньон соединения и решать, принимать ли соединения или нет:

# salt-key --list-all

ПРИНЯТЬ ОПРЕДЕЛЕННЫЙ КЛЮЧ.

Перед тем как миньон сможет подключиться, вы должны принять его ключ (авторизовать его на salt-master):

# salt-key --accept=<key>

ПРИНЯТЬ ВСЕ КЛЮЧИ.

# salt-key --accept-all

ОТПРАВИТЬ КОМАНДУ (выполнить ее на миньене).

После того как вы приняли каждый ключ, вы можете отправить команду из своего master-salt и убедиться, что ваши миньоны работают нормально (что они подключены):

# salt '*' test.ping

ЗАПУСТИТЬ SHELL КОМАНДУ на миньене.

Salt позволяет удаленно выполнять shell команды в различных системах, используя cmd.run:

# salt '*' cmd.run 'ls -l /etc'

ПОКАЗАТЬ ИСПОЛЬЗОВАНИЕ ДИСКА.

# salt '*' disk.usage

УСТАНОВИТЬ ПАКЕТ.

# salt '*' pkg.install cowsay

Salt команды выполняются с использованием общей структуры:

cmd синтаксис в SaltStack

target (русское название «Цель»): Определяет, какие системы принимают команду. Используя имя хоста по умолчанию, но есть много других способов для выбора и фильтров, который я расскажу в дальнейшем. В настоящее время, это достаточно, чтобы знать, что «*» предназначено для всех управляемых систем (будет выполнятся на всех миньенах).

command (module.function), русское название «команды»: Это, как использовать реальное управление в salt. Команды состоят из модулей и функций, и в salt выпускается со встроенными модулями для установки программного обеспечения, копирования файлов, проверки услуг и много других задач для автоматизации.

arguments (русское название «аргументы»): Обеспечивает каких-либо дополнительные данных которые необходимы  при вызове функций. Например, c функцией «pkg.install» можно установить пакеты и выполняется это с помощью аргумента.

ПОКАЗАТЬ СПИСОК СЕТЕВЫХ ИНТЕРФЕЙСОВ.

# salt '*' network.interfaces

ДОКУМЕНТАЦИЯ.

Вы можете получить имя модуля или функции с «sys.doc». Чтобы получить подробную информацию о любом модуле, выполните команду из командной строки:

# salt '*' sys.doc
# salt '*' sys.doc pkg
# salt '*' sys.doc pkg.install

Ориентация — это как вы выбираете salt-minion-ов при запуске команды, применяя конфигураций, для этого можно использовать ID самого миньена. Это значение может быть установлено на все ноды, которые хотите конфигурировать и может быть указано с помощью опции «-i» в загрузочном скрипте.

# salt 'minion1' disk.usage

SO MANY WAYS TO TARGET

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

Цели (Targets) могут быть основаны на системной информации миньона с использованием системы «Grains»:

# salt -G 'os:Ubuntu' test.ping

Цели могут быть отфильтрованы с помощью регулярного выражения:

# salt -E 'minion[0-9]' test.ping

Цели могут быть указанными в списке:

# salt -L 'minion1,minion2' test.ping

Или несколько типов могут быть объединены в одну команду:

# salt -C 'G@os:Ubuntu and minion* or S@192.168.50.*' test.ping

Что такое GRAINS?

Grains — это статическая информация SaltStack собранная с ОС. SaltStack собирает «зерна» (Grains) для операционной системы, имя домена, IP-адреса, ядра, типа ОС, памяти, и много других свойств этой системы.

Вы можете добавить свои собственные grains на salt-minion, помещая их в/etc/salt/grains на salt-mastr-е или в конфигурационном файле миньон-а в разделе grains. Например, многие пользователи добавляют свои grains под названием «role» каждому миньону для описания функции системы.

Вы можете использовать команду «grains.ls» чтобы показать все grains на salt-minion-е:

# salt 'minion*' grains.ls

Я рассказывал как установить SaltStack в моей статье:

Установка SALT Stack в Unix/Linux

А сейчас, самое интересное, сейчас я расскажу как создавать Salt state.

Немного о SALT state

Удаленное выполнение сохраняет много вашего времени, но она имеет некоторые недостатки. Большинство задач, которые вы выполняете — комбинация многих команд, тестов и операций, каждый со своими нюансами. Часто делается попытка объединить все эти действия в центральной скрипт, но они получаются довольно громоздкими.

Чтобы решить эту проблему, управление конфигурацией SaltStack позволяет создать шаблон конфигурации для повторного использования, называется состояние (state), которое описывает все необходимое, чтобы создать компонент или приложение системы в известной конфигурации.

States гораздо легче понять, когда вы видите их в действии, так что давайте рассмотрим один из них. States описывается с помощью YAML которые просто создавать и читать.

Чтобы все упростить, мой Vagrant файл лежит в /srv/salt на salt-mastr-е и отображается в локальной папке salt-vagrant-demo-master/saltstack. Это означает, что вы можете использовать любой текстовый редактор и сохраните файл в той локальной папке, а Vagrant определит и запустит его на мастере.

Используйте любой редактор дял создания нового файла со следующими строками:

install_network_packages:
pkg.installed:
- pkgs:
- rsync
- lftp
- curl

Этот state вызывает функцию «pkg.installed» и проходит список из трех имен пакетов для аргумента pkgs и сохраните данный код в salt-vagrant-demo-master/saltstack/salt/nettools.sls:

Vagrant nettools

Давайте пойдем дальше и проверим созданный «state», вы можете использовать команду «state.apply» чтобы применить состояние непосредственно из командной строки.

На вашем saltmaster-е, запустите слудуюшую команду чтобы применить «nettools state»:

# salt 'minion2' state.apply nettools

Как вы могли догадаться, вы можете использовать таргетинг механизм (targeting mechanism) чтобы применять это состояние для любого миньена:

# salt 'minion2' state.sls nettools

Вот скриншот:
vagrant state applyТЕРМИНОЛОГИЯ

Formula (формула).
Коллекция state и pillar файлов, которые настраивают приложение или компонент системы. Большинство формул (Formulas) состоят из нескольких state, разбросанных по нескольким state файлам.

State (стейт).
state — это конфигурационный файл, который настраивает определенную часть системы. Каждый state определяется с помощью state декларации.

State Declaration (стейт декларация).
Раздел верхнего уровня state файла в котором перечислены state вызовы функций и аргументов, которые составляют сам state. Каждый state декларация начинается с уникального идентификатора (ID).

State Functions (стейт функции).
Команды, которые вы называете, чтобы выполнить задачу для настройки системы.

State File (стейт файл).
Файл с расширением SLS, который содержит один или несколько state деклараций.

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

Топ-файл (Top) используется для применения нескольких state файлов на нодах. Стейти, которые применяются к каждой системе определяются целями (targets), указанными в топ файле.

СОЗДАНИЕ СВОЕГО СОБСТВЕННОГО TOP ФАЙЛА.

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

Например, вы можете начать с простого описания, например:

planning в salt

В парадигме SaltStack, сам список будет топ-файлом и каждый пункт в списке будет state-м. Targets используются в топ-файле, чтобы определить, какие state применяются к каждому миньону.

Следующий пример показывает как ваша конфигурация может быть переведена на YAML в тop-файле:

Планирование в SaltStack

Когда топ-файл оценивается, миньоны выполняют все стейти(state), которые определены для любой цели (target). Например, система с миньонами имеет идентификатор ATL-Web4-Prod и должен примениться vim, скрипты, пользователи, apache, python, и django state-ы.

Теперь, когда мы понимаем, цель топ-файла — это позволяет идти вперед и создавать новые. Если вы используете демо файлы Vagrant, то вы заметите, что уже есть файл top.sls в папке saltstack/salt, так что мы просто обновим это, или вы можете создать новый файл. Добавьте следующий код в ваш top.sls файл:

base:
'*':
- common
'minion1':
- nettools

На вашем мастере, выполните следующую команду, чтобы применить топ-файл:

# salt '*' state.apply

Теперь вы знаете, как создать state и запускать их на нодах, используя топ-файл.

На этом, моя статья «Принципы работы и структура SaltStack» завершена.

2 thoughts on “Принцип работы и структура SaltStack

  1. Вроде бы и статья толковая, но режет глазслух написание state как stage. Это разные слова и смыслы у них тоже разные. Нет в салте стэйжд, только стэйт. Не холивара ради, поправьте пожалуйста, эта путаница в названиях сбивает с толку.

  2. Спасибо большое за статью, очень помогает разобраться в деталях стейт файлов.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.