salt minion что это
Руководство по использованию платформы Salt
В статье описаны основные понятия платформы Salt, примеры конфигурации и использования с комментариями.
Что это такое?
О там как установить и настроить взаимодействие Salt Master и Salt Minions на серверах под управлением операционной системы Ubuntu 18.04 вы можете прочитать в нашей инструкции.
Masters и Minions
Таких команд большое множество. Например, вы можете установить NGINX на миньона с именем webserver1:
salt ‘webserver1’ pkg.install nginx
Связь между мастером и миньонами осуществляется по транспортному протоколу ZeroMQ, канал зашифрован парой открытого и закрытого ключей. Пара ключей генерируется миньоном, после чего он отправляет свой открытый ключ мастеру.
Удаленное выполнение
salt ‘webserver1’ npm.install gulp
Доступные модули выполнения представляют собой удобные решения для системного администрирования:
Функция cmd.run используется для запуска произвольных команд на управляемых миньонах:
Эта команда выведет содержимое каталога /etc для каждого миньона.
Состояния, формулы и Top-файл
Salt предлагает еще один способ управления нодой, с помощью которого необходимо описать состояние, в котором миньон должен находиться. Этот вид конфигурации называется Salt state (состояние), а методология обычно называется управлением конфигурацией.
Состояния определяются в файлах состояний. После того, как состояния миньонов описаны, они применяются к миньону.
Описание состояния
Ниже приведен пример файла состояния /srv/salt/webserver_setup.sls, который гарантирует, что установлены следующие компоненты: rsync, curl, NGINX, и при этом NGINX запускается и включается при загрузке ОС:
Описания состояний содержат модули состояний. Модули состояний отличаются от модулей выполнения, но часто выполняют аналогичные задания. Например, существует модуль состояния pkg с функциями, аналогичными модулю выполнения pkg, как с функцией состояния pkg.installed и функцией выполнения pkg.install.
Файлы состояний обычно хранятся в файловой системе мастера Salt, но они также могут храниться в других местах файлового сервера, например, в репозитории Git.
Применение состояния к Миньону
Чтобы применить состояние к миньону, используйте функцию state.apply от имени мастера:
salt `webserver1` state.apply webserver_setup
Формулы
Top-файл
В дополнение к ручному применению состояний к миньонам, Salt предоставляет возможность автоматически отобразить, какие состояния должны применяться к различным миньонам. Это называется Top-файлом.
Простой пример файла /srv/salt/top.sls:
base это среда окружения. Вы можете указать более одной среды, соответствующей различным этапам вашей работы; например: разработка, QA, производство.
В приведенном выше примере сказано, что состояние universal_setup должно применяться ко всем миньонам (‘*’), а состояние webserver_setup должно применяться только к миньону webserver1.
Если вы запустите функцию state.apply без аргументов, Salt проверит Top-файл и применит все состояния в нем в соответствии с созданным отображением:
Хранение Data (данных) и Secrets (секретов)
Допустим, вы хотите создать системных пользователей для миньонов и назначить разные оболочки для каждого из них. Можно закодировать эту информацию в файл состояния, но для этого потребуется новое объявление для каждого пользователя. Если вы вместо этого сохраняете данные в Pillar, можно просто создать одно объявление состояния и вставить в него данные.
Как и в случае с файлами состояний, Top-файл (отдельно от Yop-файла состояний) отображает данные Pillar в миньоны, например /srv/pillar/top.sls:
Шаблоны Jinja
Для использования данных Pillar в файлах состоянии, используют шаблоны Jinja.
Ниже приведен пример файла состояния /srv/salt/user_setup.sls, в котором используются данные Pillar из предыдущей секции для создания пользователей системы и установки оболочки:
Salt скомпилирует файл состояния в подобный файл прежде чем применить его к миньону:
В следующем примере файл состояния /srv/salt/webserver_setup.sls установит Apache и настроит имя для пакета в соответствии с операционной системой:
Дополнительную информацию можно найти в официальной документации продукта.
linux-notes.org
Недавно, я начал изучать SaltStack, хотелось бы поговорить в данной статье «Принципы работы и структура SaltStack» о принципах работы и о структуре самого SaltStack.
Эта тема для начинающих и вы получите основы SaltStack и как все в нем работает:
Структура Salt
Для наглядности, приведу скриншот:
А сейчас, я расскажу о каждом компонентах в более подробной форме.
КОМПОНЕНТЫ SALTSTACK
В SaltStack имеется довольно большое количество компонентов, и сейчас я расскажу о них и зачем они нужны:
ГИБКОСТЬ 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
Я расскажу о следующем:
После запуска vagrant, vagrant создает и запускает несколько виртуальных машин под управлением VirtualBox в фоновом режиме. Эти виртуальные машины работают, пока вы не закроете их, поэтому не забудьте выключить его потом:
Если вы хотите сделать все с самого, вы можете запустить команду и она удалит образы vagrant:
В командной строке, перейдите в папку vagrant-demo-master и запустите следующую команду, чтобы войти на свой Salt-master:
После подключения, выполните следующую команду, чтобы стать пользователем root:
ПОКАЗАТЬ ВСЕ КЛЮЧИ.
На salt-master, вы можете быстро просматривать все миньон соединения и решать, принимать ли соединения или нет:
ПРИНЯТЬ ОПРЕДЕЛЕННЫЙ КЛЮЧ.
Перед тем как миньон сможет подключиться, вы должны принять его ключ (авторизовать его на salt-master):
ПРИНЯТЬ ВСЕ КЛЮЧИ.
ОТПРАВИТЬ КОМАНДУ (выполнить ее на миньене).
После того как вы приняли каждый ключ, вы можете отправить команду из своего master-salt и убедиться, что ваши миньоны работают нормально (что они подключены):
ЗАПУСТИТЬ SHELL КОМАНДУ на миньене.
Salt позволяет удаленно выполнять shell команды в различных системах, используя cmd.run:
ПОКАЗАТЬ ИСПОЛЬЗОВАНИЕ ДИСКА.
УСТАНОВИТЬ ПАКЕТ.
Salt команды выполняются с использованием общей структуры:
target (русское название «Цель»): Определяет, какие системы принимают команду. Используя имя хоста по умолчанию, но есть много других способов для выбора и фильтров, который я расскажу в дальнейшем. В настоящее время, это достаточно, чтобы знать, что «*» предназначено для всех управляемых систем (будет выполнятся на всех миньенах).
command (module.function), русское название «команды»: Это, как использовать реальное управление в salt. Команды состоят из модулей и функций, и в salt выпускается со встроенными модулями для установки программного обеспечения, копирования файлов, проверки услуг и много других задач для автоматизации.
arguments (русское название «аргументы»): Обеспечивает каких-либо дополнительные данных которые необходимы при вызове функций. Например, c функцией «pkg.install» можно установить пакеты и выполняется это с помощью аргумента.
ПОКАЗАТЬ СПИСОК СЕТЕВЫХ ИНТЕРФЕЙСОВ.
ДОКУМЕНТАЦИЯ.
Вы можете получить имя модуля или функции с «sys.doc». Чтобы получить подробную информацию о любом модуле, выполните команду из командной строки:
Ориентация — это как вы выбираете salt-minion-ов при запуске команды, применяя конфигураций, для этого можно использовать ID самого миньена. Это значение может быть установлено на все ноды, которые хотите конфигурировать и может быть указано с помощью опции «-i» в загрузочном скрипте.
SO MANY WAYS TO TARGET
В идеальном мире, каждая система в вашей среде имеет структурированное имя и показывает вам все, что вам нужно знать об оборудовании, ОС, и системной роли. Пока мы ждем этого мира, SaltStack обеспечивает мощную систему наведения, чтобы помочь вам найти и фильтрующие системы, основанные на статических и пользовательских данных.
Цели (Targets) могут быть основаны на системной информации миньона с использованием системы «Grains»:
Цели могут быть отфильтрованы с помощью регулярного выражения:
Цели могут быть указанными в списке:
Или несколько типов могут быть объединены в одну команду:
Что такое GRAINS?
Grains — это статическая информация SaltStack собранная с ОС. SaltStack собирает «зерна» (Grains) для операционной системы, имя домена, IP-адреса, ядра, типа ОС, памяти, и много других свойств этой системы.
Вы можете добавить свои собственные grains на salt-minion, помещая их в/etc/salt/grains на salt-mastr-е или в конфигурационном файле миньон-а в разделе grains. Например, многие пользователи добавляют свои grains под названием «role» каждому миньону для описания функции системы.
Вы можете использовать команду «grains.ls» чтобы показать все grains на salt-minion-е:
Я рассказывал как установить SaltStack в моей статье:
А сейчас, самое интересное, сейчас я расскажу как создавать Salt state.
Немного о SALT state
Удаленное выполнение сохраняет много вашего времени, но она имеет некоторые недостатки. Большинство задач, которые вы выполняете — комбинация многих команд, тестов и операций, каждый со своими нюансами. Часто делается попытка объединить все эти действия в центральной скрипт, но они получаются довольно громоздкими.
Чтобы решить эту проблему, управление конфигурацией SaltStack позволяет создать шаблон конфигурации для повторного использования, называется состояние (state), которое описывает все необходимое, чтобы создать компонент или приложение системы в известной конфигурации.
States гораздо легче понять, когда вы видите их в действии, так что давайте рассмотрим один из них. States описывается с помощью YAML которые просто создавать и читать.
Чтобы все упростить, мой Vagrant файл лежит в /srv/salt на salt-mastr-е и отображается в локальной папке salt-vagrant-demo-master/saltstack. Это означает, что вы можете использовать любой текстовый редактор и сохраните файл в той локальной папке, а Vagrant определит и запустит его на мастере.
Используйте любой редактор дял создания нового файла со следующими строками:
Этот state вызывает функцию «pkg.installed» и проходит список из трех имен пакетов для аргумента pkgs и сохраните данный код в salt-vagrant-demo-master/saltstack/salt/nettools.sls:
Давайте пойдем дальше и проверим созданный «state», вы можете использовать команду «state.apply» чтобы применить состояние непосредственно из командной строки.
На вашем saltmaster-е, запустите слудуюшую команду чтобы применить «nettools state»:
Как вы могли догадаться, вы можете использовать таргетинг механизм (targeting mechanism) чтобы применять это состояние для любого миньена:
Вот скриншот: ТЕРМИНОЛОГИЯ
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 ФАЙЛА.
Прежде, чем мы создадим топ-файл, нужно минутку подумать о том как выглядят системные конфигурации. Рассмотрим различные типы системных настроек. Каждая система может получить несколько конфигураций, поэтому начнем с самых общих конфигураций.
Например, вы можете начать с простого описания, например:
В парадигме SaltStack, сам список будет топ-файлом и каждый пункт в списке будет state-м. Targets используются в топ-файле, чтобы определить, какие state применяются к каждому миньону.
Следующий пример показывает как ваша конфигурация может быть переведена на YAML в тop-файле:
Когда топ-файл оценивается, миньоны выполняют все стейти(state), которые определены для любой цели (target). Например, система с миньонами имеет идентификатор ATL-Web4-Prod и должен примениться vim, скрипты, пользователи, apache, python, и django state-ы.
Теперь, когда мы понимаем, цель топ-файла — это позволяет идти вперед и создавать новые. Если вы используете демо файлы Vagrant, то вы заметите, что уже есть файл top.sls в папке saltstack/salt, так что мы просто обновим это, или вы можете создать новый файл. Добавьте следующий код в ваш top.sls файл:
На вашем мастере, выполните следующую команду, чтобы применить топ-файл:
Теперь вы знаете, как создать state и запускать их на нодах, используя топ-файл.
На этом, моя статья «Принципы работы и структура SaltStack» завершена.
2 thoughts on “ Принцип работы и структура SaltStack ”
Вроде бы и статья толковая, но режет глазслух написание state как stage. Это разные слова и смыслы у них тоже разные. Нет в салте стэйжд, только стэйт. Не холивара ради, поправьте пожалуйста, эта путаница в названиях сбивает с толку.
Спасибо большое за статью, очень помогает разобраться в деталях стейт файлов.
Добавить комментарий Отменить ответ
Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.
Salt за 10 минут
SaltStack — cистема управления конфигурациями и удалённого выполнения операций.
В данный момент изучаю данную систему и раз уж есть такая возможность решил попереводить статьи с официального сайта и повыкладывать здесь пока хватит энтузиазма. Т.к. у нас в организации используется в основном Red Hat и Centos, переводить буду части касающиеся этих операционных систем.
Данная статья представляет собой перевод официальной документации. Внизу страницы вы найдете ссылку на первоисточник на англ. языке.
Установка SALT
Установка salt-master, salt-minion из официального репозитория SaltStack на RHEL / CENTOS
Внимание! При установке на Red Hat Enterprise Linux 7 с отключенными (не подписанными на) ‘RHEL Server Releases’ или ‘RHEL Server Optional Channel’ репозиториями, добавьте CentOS 7 GPG key URL к конфигурации yum репозитория SaltStack для установки базовых пакетов.
Установите salt-minion, salt-master и другие Salt компоненты:
Запуск SALT
Salt работает по топологии Master(сервер) / Minion(клиент). Миньоны подключаются к мастеру на порты TCP 4505,4506.
Дефолтная конфигурация Мастера подходит для подавляющего большинства установок. Salt Master управляется локальными сервис менеджерами:
На системах с systemd (новые Debian, OpenSuse, Fedora, Centos, RHEL):
На системах с Upstart (Ubuntu, older Fedora/RHEL):
Альтернативно, Мастер может быть запущен напрямую через командную строку как демон:
Мастер может быть также запущен в debug режиме, таким образом значительно увеличивая вывод команд:
Мастер принимает входящие соединения на портах TCP 4505,4506.
Поиск SALT MASTER
По умолчанию конфигурационные файлы лежат в каталоге /etc/salt. Большинство платформ придерживаются этой схемы, но такие платформы как FreeBSD и Windows располагают этот файл в других местах.
При старте Миньон по умолчанию ищет в сети хост с hostname salt. Если нашел, то Миньон инициирует процесс рукопожатия и аутентификации по ключу с Мастером. Это означает, что самый простой способ конфигурации это настроить внутренний DNS на разрешение имени salt в IP Мастера.
Если такой подход не устраивает, то можно внести изменения в /etc/salt/minion:
Настройка SALT MINION
Миньон может функционировать как с Мастером так и без него. Это руководство предполагает, что Миньон будет подключен к Мастеру, для получения информации о том, как запустить Миньон без Мастера смотрите тут.
После того, как Мастер может быть найден, запустить Миньон можно так же, как Мастера:
На системах с systemd (новые Debian, OpenSuse, Fedora, Centos, RHEL):
На системах с Upstart (Ubuntu, older Fedora/RHEL):
В фоновом режиме с опцией debug:
Когда Миньон запускается, он генерирует id, если он не был сгенерирован во время предыдущего запуска и кэширует в /etc/salt/minion_id по умолчанию. Это имя по которому Миньон будет пытаться аутентироваться на Мастере. Следующие шаги предпринимаются, чтобы попытаться найти значение отличное от localhost:
Если ничего не сработало, то localhost используется как запасной вариант.
id Миньона может быть задан вручную используя параметр id в файле конфигурации Миньона. Если этот параметр задан, то он будет переопределять все другие источники id.
Теперь, когда Миньон запущен, он будет генерировать криптографические ключи и пытаться подключиться к мастеру. Следующим шагом надо вернуться к Мастеру и принять новый открытый ключ Миньона.
Использование SALT-KEY
Salt аутентифицирует Миньонов используя открытый ключ шифрования и аутентификацию. Чтобы Миньон мог начать принимать команды от Мастера его ключ должен быть принят Мастером.
Команда salt-key используется для управления всеми ключами на Мастере. Для просмотра всех ключей, которые находятся на Мастере:
Будут выведены ключи, которые были приняты, отклонены и находятся в ожидании принятия. Самый простой способ принят ключ миньона это принять все отложенные ключи:
Скопируйте значение отпечатка master.pub из секции Local Keys и установите в качестве параметра master_finger в конфигурационном файле Миньона. Сохраните и перезапустите сервис salt-minion.
Если совпадают, то примите ключ командой:
Посылка первых команд
Сейчас, когда миньон подключен к Мастеру и аутентифицирован, Мастер может отправлять команды Миньону. Salt-команды позволяют выполнить обширный набор функций и для конкретных Миньонов или групп Миньонов. Salt-команды состоят из опций команд, описания цели, функции исполнения и аргументов функции.
Простая команда выглядит так:
Звездочка ( * ) определяет цель, которая определяет всех Миньонов. test.ping говорит миньонам запустить функцию test.ping. В случае test.ping, test ссылается на модуль исполнения. ping ссылается на функцию ping содержащуюся в вышеуказанном модуле.
Внимание! Исполнительные модули — это рабочие лошадки Salt. Они выполняют работу в системе выполняя различные задачи, такие как манипулирование файлами и рестарт сервисов.
Результатом выполнения этой команды будет оповещение Мастера, что все миньоны выполнили test.ping параллельно и возвращение результата.
Это на самом деле не ICMP ping, а скорее простая функция, которая возвращает True. Использование test.ping это хороший способ подтверждения что Миньон подключен.
Каждый Миньон регистрирует себя с уникальным ID. Этот ID по умолчанию есть hostname, но может быть явно задан в конфиге Миньона также с помощью параметра id.
Конечно существуют сотни других модулей, которые могут быть вызваны просто как test.ping. В следующем примере возвращается использование диска на всех Миньонах.
Знакомство с функциями
Salt поставляется с обширной библиотекой функций, доступных для выполнения и Salt функции являются самодокументирующимися. Чтобы увидеть какие функции доступны на Миньонах выполните sys.doc функцию:
Она покажет очень большой список доступных функций и документацию по ним.
Внимание! Документация модулей также может быть доступна на сайте.
Эти функции охватывают все, от управления пакетами до управления серверами баз данных. Они включают в себя мощную систему управления API, которая является основой для управления конфигурациями Salt и многих других сторон Salt.
Внимание!
Salt поставляется с большим кол-вом системных плагинов. Функции, которые доступны по средствам salt команд называются исполнительными модулями.
Полезные функции
Модуль cmd содержит функции которые выполняются на Миньонах, такие как cmd.run и cmd.run_all:
pkg функции автоматически сопоставляют локальный менеджер пакетов с соответствующими функциями. Это означает pkg.install установит пакеты через yum на Red Hat системы, через apt на Debian системы и т.д.:
Внимание! Некоторые кастомные сборки Linux и производные от некоторых дистрибутивов не правильно определяются определяются Salt. Если приведенная выше команда возвращает ошибку типа pkg.install is not available тогда вы можете переопределить pkg provider. Этот процесс описан здесь.
Функция network.interfaces выводит список всех интерфейсов на Миньоне, вместе с их IP-адресами, масками, MAC-адресами и т.д.:
CHANGING THE OUTPUT FORMAT
Формат вывода по умолчанию используемый для большинства команд Salt называется nested (вложеный), но существуют несколько других способов, которые могут использованы для изменения вывода. Например, pprint способ может быть использован для отображения возвращенных данных использующий Python-кий модуль pprint:
Полный список способов вывода Salt, а также примеры вывода могут быть найдены здесь.
SALT-CALL
Примеры выше описывали запуск команд с Мастера используя salt команду, но при диагностике может быть более эффективным зайти на Миньон по ssh и использовать salt-call.
Зерна (GRAINS)
Salt ипользует систему, называемую Grains для построения статических данных о Миньонах. Эти данные включают в себя информацию о ОС, CPU архитектуре и много другое. Система grains испольуется Salt для доставки данных платформы многим компанентам и пользователям.
Grains может также быть статическим набором, что делает его легким для присвоения значений Миньонам для группировки и управления.
Обычной практикой является назначение зерен Миньонам, чтобы указать какую роль или роли возможны для Миньон. Эти статические зерна могут быть установлены в конфигурационном файле Миньона или через grains.setval функцию.
Выбор цели
Salt позволяет указывать Миньонов в качестве цели по большому кол-ву критериев.
Есть много других способов помимо основных:
Regular Expressions
Используя pcre-совместимые регулярные выражения
Grains
Цель основанная на данных grains: Targeting with Grains
Pillar
Цель основанная на данных pillar: Targeting with Pillar
IP
Цель основанная на IP address/subnet/range
Compound
Цель основанная на нескольких целях: Targeting with Compound
Nodegroup
Target with nodegroups: Targeting with Nodegroup
Передача аргументов
Много функций могут применять аргументы, которые могут быть переданы:
В этом примере передается аргумент vim функции pkg.install. Много функций могут иметь более сложные аргументы чем просто строка, аргументы обрабатываемые через YAML, позволяющие передавать более сложные данные:
В этом случае Salt переводит строку ‘foo: bar’ в словарь «<'foo': 'bar'>«
Внимание! Любая строка, которая содержит символ новой строки не будет обработана в YAML.