SaltStack — Обзор
В этой главе мы изучим основы SaltStack. Возможности удаленного выполнения SaltStack позволяют администраторам запускать команды на разных машинах параллельно с гибкой системой таргетинга. Управление конфигурацией Salt устанавливает модель master-minion для быстрого, очень простого, гибкого и безопасного приведения компонентов инфраструктуры в соответствие с данной политикой.
Что такое SaltStack?
Соль — очень мощная система автоматизации. Соляная архитектура основана на идее удаленного выполнения команд. Все сети построены вокруг некоторого аспекта удаленного выполнения. Это может быть так же просто, как запросить у удаленного веб-сервера статическую веб-страницу, или так же сложно, как использовать сеанс оболочки для интерактивного ввода команд на удаленный сервер. Соль является примером одного из более сложных типов удаленного выполнения.
Соль предназначена для того, чтобы пользователи могли явно ориентироваться и давать команды нескольким машинам напрямую. Соль основана на идее Мастера, который управляет одним или несколькими Миньонами . Команды обычно передаются от Мастера к целевой группе Миньонов, которые затем выполняют задачи, указанные в командах, и затем возвращают полученные данные обратно Мастеру. Связь между мастером и миньонами происходит по шине сообщений ZeroMQ .
Модули SaltStack взаимодействуют с поддерживаемыми операционными системами minion. Salt Master по умолчанию работает в Linux, но любой операционной системой может быть миньон, и в настоящее время хорошо поддерживаются варианты Windows, VMware vSphere и BSD Unix. Мастер Соли и миньоны используют ключи для общения. Когда миньон подключается к мастеру в первый раз, он автоматически сохраняет ключи на мастере. SaltStack также предлагает Salt SSH , который обеспечивает «безагентное» управление системами.
Нужен для SaltStack
SaltStack создан для скорости и масштаба. Вот почему он используется для управления крупными инфраструктурами с десятками тысяч серверов в LinkedIn, WikiMedia и Google.
Представьте, что у вас есть несколько серверов и вы хотите что-то делать с этими серверами. Вам нужно будет войти в каждый из них и выполнять эти действия по одному на каждом, а затем вы можете захотеть сделать сложные вещи, такие как установка программного обеспечения, а затем настройка этого программного обеспечения на основе определенных критериев.
Допустим, у вас есть десять или, может быть, даже 100 серверов. Представьте себе, что вы должны входить по одному на каждый сервер по отдельности, выполняя одни и те же команды на этих 100 машинах, а затем редактирование файлов конфигурации на всех 100 машинах становится очень утомительной задачей. Чтобы преодолеть эти проблемы, вы хотели бы обновить все свои серверы одновременно, просто набрав одну команду. SaltStack предоставляет вам точное решение для всех таких проблем.
Особенности SaltStack
SaltStack — это программное обеспечение для управления конфигурацией с открытым исходным кодом и механизм удаленного выполнения. Соль — это инструмент командной строки. Хотя управление конфигурацией SaltStack написано на Python, оно не зависит от языка и просто. Платформа Salt использует push-модель для выполнения команд по протоколу SSH. Система конфигурации по умолчанию — шаблоны YAML и Jinja . Соль в основном конкурирует с Puppet , Chef и Ansible .
Соль предоставляет множество функций по сравнению с другими конкурирующими инструментами. Некоторые из этих важных функций перечислены ниже.
-
Отказоустойчивость. Соли миньоны могут подключаться к нескольким мастерам одновременно, настроив параметр конфигурации мастера в виде списка YAML всех доступных мастеров. Любой мастер может направлять команды в соляную инфраструктуру.
-
Гибкость — Весь подход управления Солт очень гибок. Он может быть реализован в соответствии с наиболее популярными моделями управления системами, такими как агент и сервер, только агент, только сервер или все вышеперечисленное в одной и той же среде.
-
Масштабируемое управление конфигурацией — SaltStack предназначен для обработки десяти тысяч миньонов на мастера.
-
Модель параллельного выполнения — Salt позволяет командам выполнять удаленные системы параллельно.
-
Python API — Salt предоставляет простой интерфейс программирования, и он был разработан, чтобы быть модульным и легко расширяемым, чтобы его можно было легко адаптировать к различным приложениям.
-
Простота установки — Salt прост в настройке и предоставляет единую архитектуру удаленного выполнения, которая может управлять разнообразными требованиями любого количества серверов.
-
Language Agnostic — файлы конфигурации состояния соли, механизм шаблонов или тип файла поддерживает любой тип языка.
Отказоустойчивость. Соли миньоны могут подключаться к нескольким мастерам одновременно, настроив параметр конфигурации мастера в виде списка YAML всех доступных мастеров. Любой мастер может направлять команды в соляную инфраструктуру.
Гибкость — Весь подход управления Солт очень гибок. Он может быть реализован в соответствии с наиболее популярными моделями управления системами, такими как агент и сервер, только агент, только сервер или все вышеперечисленное в одной и той же среде.
Масштабируемое управление конфигурацией — SaltStack предназначен для обработки десяти тысяч миньонов на мастера.
Модель параллельного выполнения — Salt позволяет командам выполнять удаленные системы параллельно.
Python API — Salt предоставляет простой интерфейс программирования, и он был разработан, чтобы быть модульным и легко расширяемым, чтобы его можно было легко адаптировать к различным приложениям.
Простота установки — Salt прост в настройке и предоставляет единую архитектуру удаленного выполнения, которая может управлять разнообразными требованиями любого количества серверов.
Language Agnostic — файлы конфигурации состояния соли, механизм шаблонов или тип файла поддерживает любой тип языка.
Преимущества SaltStack
Как простая, так и многофункциональная система, Salt предоставляет множество преимуществ, и их можно обобщить, как показано ниже:
-
Надежный — Salt — это мощная и надежная структура управления конфигурацией, которая работает с десятками тысяч систем.
-
Аутентификация — Salt управляет простыми парами ключей SSH для аутентификации.
-
Безопасный — Солт управляет безопасными данными, используя зашифрованный протокол.
-
Fast — Salt — это очень быстрая и легкая коммуникационная шина, которая обеспечивает основу для механизма удаленного выполнения.
-
Автоматизация виртуальных машин — для автоматизации используется функция облачного контроллера Salt Virt.
-
Инфраструктура как данные, а не код — Salt обеспечивает простое развертывание, управляемое моделью управление конфигурацией и среду выполнения команд.
Надежный — Salt — это мощная и надежная структура управления конфигурацией, которая работает с десятками тысяч систем.
Аутентификация — Salt управляет простыми парами ключей SSH для аутентификации.
Безопасный — Солт управляет безопасными данными, используя зашифрованный протокол.
Fast — Salt — это очень быстрая и легкая коммуникационная шина, которая обеспечивает основу для механизма удаленного выполнения.
Автоматизация виртуальных машин — для автоматизации используется функция облачного контроллера Salt Virt.
Инфраструктура как данные, а не код — Salt обеспечивает простое развертывание, управляемое моделью управление конфигурацией и среду выполнения команд.
Введение в ZeroMQ
Salt основан на библиотеке ZeroMQ и является встраиваемой сетевой библиотекой. Это легкая и быстрая библиотека сообщений. Базовая реализация на C / C ++ и нативные реализации для нескольких языков, включая Java и .Net .
ZeroMQ — это одноранговая обработка сообщений без посредников. ZeroMQ позволяет легко проектировать сложную систему связи.
ZeroMQ поставляется с пятью основными моделями:
-
Синхронный запрос / ответ — используется для отправки запроса и получения последующих ответов на каждый отправленный.
-
Асинхронный запрос / ответ. Запрашивающий инициирует диалог, отправив сообщение-запрос и ожидает ответного сообщения. Поставщик ожидает входящие сообщения-запросы и отвечает ответными сообщениями.
-
Публикация / подписка — используется для распространения данных из одного процесса (например, издателя) среди нескольких получателей (например, подписчиков).
-
Push / Pull — Используется для распределения данных по подключенным узлам.
-
Эксклюзивная пара — используется для соединения двух пиров вместе, образуя пару.
Синхронный запрос / ответ — используется для отправки запроса и получения последующих ответов на каждый отправленный.
Асинхронный запрос / ответ. Запрашивающий инициирует диалог, отправив сообщение-запрос и ожидает ответного сообщения. Поставщик ожидает входящие сообщения-запросы и отвечает ответными сообщениями.
Публикация / подписка — используется для распространения данных из одного процесса (например, издателя) среди нескольких получателей (например, подписчиков).
Push / Pull — Используется для распределения данных по подключенным узлам.
Эксклюзивная пара — используется для соединения двух пиров вместе, образуя пару.
ZeroMQ — это очень гибкий сетевой инструмент для обмена сообщениями между кластерами, облаком и другими мультисистемными средами. ZeroMQ — это транспортная библиотека по умолчанию, представленная в SaltStack.
SaltStack — Архитектура
Архитектура SaltStack предназначена для работы с любым количеством серверов, от локальных сетевых систем до других развертываний в разных центрах обработки данных. Архитектура — это простая модель сервера / клиента с необходимой функциональностью, встроенной в единый набор демонов.
Посмотрите на следующую иллюстрацию. Он показывает различные компоненты архитектуры SaltStack.
-
SaltMaster — SaltMaster — главный демон. SaltMaster используется для отправки команд и настроек Salt-рабам. Один мастер может управлять несколькими мастерами.
-
SaltMinions — SaltMinion — это рабский демон. Соли миньон получает команды и настройки от SaltMaster.
-
Выполнение — Модули и команды Adhoc выполняются из командной строки для одного или нескольких миньонов. Он выполняет мониторинг в реальном времени.
-
Формулы — Формулы — это заранее написанные солевые состояния. Они такие же открытые, как и сами солевые состояния, и могут использоваться для таких задач, как установка пакета, настройка и запуск службы, настройка пользователей или разрешений и многие другие общие задачи.
-
Зерна — Зерна это интерфейс, который предоставляет информацию, специфичную для миньонов. Информация, доступная через интерфейс зерна, является статической. Зерна загружаются, когда запускается Соленый миньон. Это означает, что информация в зернах неизменна. Следовательно, зерновая информация может быть о работающем ядре или операционной системе. Это без учета регистра.
-
Pillar — Pillar — это интерфейс, который генерирует и хранит высокочувствительные данные, относящиеся к конкретному миньону, такие как криптографические ключи и пароли. Он хранит данные в паре ключ / значение, и управление данными осуществляется аналогично дереву состояний соли.
-
Top File — Сопоставляет солевые состояния и данные столба с миньонами соли.
-
Бегуны — это модуль, расположенный внутри SaltMaster и выполняющий такие задачи, как статус задания, состояние соединения, чтение данных из внешних API, запрос связанных миньонов соли и многое другое.
-
Returners — возвращает данные от миньонов Salt в другую систему.
-
Реактор — Он отвечает за запуск реакций, когда события происходят в вашей среде SaltStack.
-
SaltCloud — Salt Cloud предоставляет мощный интерфейс для взаимодействия с облачными хостами.
-
SaltSSH — запускать команды Salt через SSH в системах без использования Salt minion.
SaltMaster — SaltMaster — главный демон. SaltMaster используется для отправки команд и настроек Salt-рабам. Один мастер может управлять несколькими мастерами.
SaltMinions — SaltMinion — это рабский демон. Соли миньон получает команды и настройки от SaltMaster.
Выполнение — Модули и команды Adhoc выполняются из командной строки для одного или нескольких миньонов. Он выполняет мониторинг в реальном времени.
Формулы — Формулы — это заранее написанные солевые состояния. Они такие же открытые, как и сами солевые состояния, и могут использоваться для таких задач, как установка пакета, настройка и запуск службы, настройка пользователей или разрешений и многие другие общие задачи.
Зерна — Зерна это интерфейс, который предоставляет информацию, специфичную для миньонов. Информация, доступная через интерфейс зерна, является статической. Зерна загружаются, когда запускается Соленый миньон. Это означает, что информация в зернах неизменна. Следовательно, зерновая информация может быть о работающем ядре или операционной системе. Это без учета регистра.
Pillar — Pillar — это интерфейс, который генерирует и хранит высокочувствительные данные, относящиеся к конкретному миньону, такие как криптографические ключи и пароли. Он хранит данные в паре ключ / значение, и управление данными осуществляется аналогично дереву состояний соли.
Top File — Сопоставляет солевые состояния и данные столба с миньонами соли.
Бегуны — это модуль, расположенный внутри SaltMaster и выполняющий такие задачи, как статус задания, состояние соединения, чтение данных из внешних API, запрос связанных миньонов соли и многое другое.
Returners — возвращает данные от миньонов Salt в другую систему.
Реактор — Он отвечает за запуск реакций, когда события происходят в вашей среде SaltStack.
SaltCloud — Salt Cloud предоставляет мощный интерфейс для взаимодействия с облачными хостами.
SaltSSH — запускать команды Salt через SSH в системах без использования Salt minion.
В следующей главе мы подробно узнаем о различных конкурентах SaltStack и их функциях.
SaltStack — Конкуренты
Salt, Puppet, Chef и Ansible являются ведущими инструментами управления конфигурациями и оркестровки, каждый из которых имеет свой путь к автоматизации сервера. Они были созданы, чтобы упростить настройку и обслуживание десятков, сотен или даже тысяч серверов.
Давайте разберемся, как SaltStack конкурирует в основном с Puppet, Chef и Ansible.
Платформы и поддержка
Ниже приведен список всех платформ, которые поддерживают SaltStack и его конкурентов.
-
SaltStack — программное обеспечение SaltStack работает и управляет многими версиями Linux, Windows, Mac OS X и UNIX.
-
Puppet — Red Hat Enterprise Linux, CentOS, Oracle Linux, Scientific Linux, SUSE Linux Enterprise Server и Ubuntu.
-
Chef — Chef поддерживается на нескольких платформах, таких как AIX, RHEL / CentOS, FreeBSD, OS X, Solaris, Microsoft Windows и Ubuntu.
-
Ansible — дистрибутив Fedora Linux, CentOS и Scientific Linux через дополнительные пакеты для Enterprise Linux (EPEL), а также для других операционных систем.
SaltStack — программное обеспечение SaltStack работает и управляет многими версиями Linux, Windows, Mac OS X и UNIX.
Puppet — Red Hat Enterprise Linux, CentOS, Oracle Linux, Scientific Linux, SUSE Linux Enterprise Server и Ubuntu.
Chef — Chef поддерживается на нескольких платформах, таких как AIX, RHEL / CentOS, FreeBSD, OS X, Solaris, Microsoft Windows и Ubuntu.
Ansible — дистрибутив Fedora Linux, CentOS и Scientific Linux через дополнительные пакеты для Enterprise Linux (EPEL), а также для других операционных систем.
Язык происхождения
-
SaltStack — Python
-
Кукольный — Рубин
-
Chef — Ruby и его CLI используют DSL на основе ruby
-
Ansible — Python
SaltStack — Python
Кукольный — Рубин
Chef — Ruby и его CLI используют DSL на основе ruby
Ansible — Python
Поддерживаемый язык
-
SaltStack — любой язык
-
Кукольный — Рубин
-
Chef — Ruby и его CLI используют DSL на основе ruby
-
Ansible — любой язык
SaltStack — любой язык
Кукольный — Рубин
Chef — Ruby и его CLI используют DSL на основе ruby
Ansible — любой язык
Веб-интерфейс
-
SaltStack — веб-интерфейс пользователя отображает запущенные задания, статус миньонов и журналы событий.
-
Puppet — веб-интерфейс для управления отчетами, инвентаризацией и управлением узлами в реальном времени.
-
Chef — веб-интерфейс позволяет вам искать и инвентаризировать узлы, просматривать активность узлов и назначать кулинарные книги, роли и узлы.
-
Ansible — веб-интерфейс позволяет настраивать пользователей, команды и инвентаризации и применять Playbooks к инвентарям.
SaltStack — веб-интерфейс пользователя отображает запущенные задания, статус миньонов и журналы событий.
Puppet — веб-интерфейс для управления отчетами, инвентаризацией и управлением узлами в реальном времени.
Chef — веб-интерфейс позволяет вам искать и инвентаризировать узлы, просматривать активность узлов и назначать кулинарные книги, роли и узлы.
Ansible — веб-интерфейс позволяет настраивать пользователей, команды и инвентаризации и применять Playbooks к инвентарям.
Инструменты управления
-
SaltStack — SaltStack Enterprise позиционируется как основной инструмент управления оркестровкой облачных и ИТ-операций, а также DevOps .
-
Puppet — Puppet выпускается в двух вариантах: Puppet Enterprise и Open Source Puppet. Помимо обеспечения функциональности Puppet с открытым исходным кодом, Puppet Enterprise также предоставляет графический интерфейс, API и инструменты командной строки для управления узлами.
-
Chef — CFEngine — инструмент управления конфигурацией.
-
Ansible — Ansible 1.3 является основным инструментом управления.
SaltStack — SaltStack Enterprise позиционируется как основной инструмент управления оркестровкой облачных и ИТ-операций, а также DevOps .
Puppet — Puppet выпускается в двух вариантах: Puppet Enterprise и Open Source Puppet. Помимо обеспечения функциональности Puppet с открытым исходным кодом, Puppet Enterprise также предоставляет графический интерфейс, API и инструменты командной строки для управления узлами.
Chef — CFEngine — инструмент управления конфигурацией.
Ansible — Ansible 1.3 является основным инструментом управления.
Спектакль
-
SaltStack — Salt предназначен для высокой производительности и масштабируемости. Система связи Salt устанавливает постоянный канал передачи данных между мастером Salt и миньонами, использующими ZeroMQ.
-
Puppet — Безопасный, высокопроизводительный, без каких-либо агентов.
-
Chef . Наиболее очевидная борьба за Chef Server — это поиск; Поиск медленный и не запрашивается одновременно у клиентов.
-
Ansible — Безопасный, высокопроизводительный и не требующий агентов.
SaltStack — Salt предназначен для высокой производительности и масштабируемости. Система связи Salt устанавливает постоянный канал передачи данных между мастером Salt и миньонами, использующими ZeroMQ.
Puppet — Безопасный, высокопроизводительный, без каких-либо агентов.
Chef . Наиболее очевидная борьба за Chef Server — это поиск; Поиск медленный и не запрашивается одновременно у клиентов.
Ansible — Безопасный, высокопроизводительный и не требующий агентов.
Цена и стоимость
-
SaltStack — Бесплатная версия с открытым исходным кодом. SaltStack Enterprise стоит 150 долларов за машину в год.
-
Puppet — Бесплатная версия с открытым исходным кодом. Puppet Enterprise стоит 100 долларов за машину в год.
-
Chef — бесплатная версия с открытым исходным кодом; Enterprise Chef бесплатно на 5 машин, 120 долларов в месяц на 20 машин, 300 долларов в месяц на 50 машин.
-
Ansible — бесплатная версия с открытым исходным кодом; Бесплатно для 10 машин, затем 100 или 250 долларов за машину в год в зависимости от необходимой вам поддержки.
SaltStack — Бесплатная версия с открытым исходным кодом. SaltStack Enterprise стоит 150 долларов за машину в год.
Puppet — Бесплатная версия с открытым исходным кодом. Puppet Enterprise стоит 100 долларов за машину в год.
Chef — бесплатная версия с открытым исходным кодом; Enterprise Chef бесплатно на 5 машин, 120 долларов в месяц на 20 машин, 300 долларов в месяц на 50 машин.
Ansible — бесплатная версия с открытым исходным кодом; Бесплатно для 10 машин, затем 100 или 250 долларов за машину в год в зависимости от необходимой вам поддержки.
использование
-
SaltStack — SaltStack используется Cisco и Rackspace. Может интегрироваться с любой облачной платформой.
-
Puppet — Puppet используется Zynga, Twitter, Нью-Йоркской фондовой биржей, PayPal, Disney, Google и так далее.
-
Chef — Chef может интегрироваться с облачными платформами, такими как Internap, Amazon EC2, Google Cloud Platform, OpenStack, Microsoft Azure и Rackspace.
-
Ansible — Ansible может развертываться в средах виртуализации, облачных средах, включая Amazon Web Services, Cloud Stack, DigitalOcean, Google Cloud Platform и так далее.
SaltStack — SaltStack используется Cisco и Rackspace. Может интегрироваться с любой облачной платформой.
Puppet — Puppet используется Zynga, Twitter, Нью-Йоркской фондовой биржей, PayPal, Disney, Google и так далее.
Chef — Chef может интегрироваться с облачными платформами, такими как Internap, Amazon EC2, Google Cloud Platform, OpenStack, Microsoft Azure и Rackspace.
Ansible — Ansible может развертываться в средах виртуализации, облачных средах, включая Amazon Web Services, Cloud Stack, DigitalOcean, Google Cloud Platform и так далее.
SaltStack — Установка
Перед тем, как перейти к установке, вы должны иметь следующие требования —
-
Сервер Linux (последний сервер Ubuntu).
-
sudo или root-доступ к этому серверу.
Сервер Linux (последний сервер Ubuntu).
sudo или root-доступ к этому серверу.
Установите все обновления, используя следующую команду —
sudo apt-get update
Установить SaltMaster
Установите SaltMaster из репозитория с помощью следующей команды apt-get.
sudo apt-get install salt-master
Установить Соль Миньон
Установите Salt minion из репозитория с помощью следующей команды apt-get.
sudo apt-get install salt-minion
Установить солевой синдик
Установите Солт-синдик из репозитория с помощью следующей команды apt-get.
sudo apt-get install salt-syndic
Мастер конфигурации
Конфигурация соли очень проста. Конфигурация по умолчанию для мастера будет работать для большинства установок. Конфигурационные файлы устанавливаются в каталог / etc / salt и имеют имена соответствующих компонентов, таких как — / etc / salt / master и / etc / salt / minion.
#interface: 0.0.0.0 interface: <local ip address>
После обновления файла конфигурации перезапустите мастер соли с помощью следующей команды.
sudo service salt-master restart
Конфигурация миньонов
Настроить соляного миньона очень просто. По умолчанию Salt Minion попытается подключиться к DNS-имени «salt»; если Minion может правильно определить это имя, настройка не требуется. Переопределите директиву «master» в файле конфигурации minion, который обычно является / etc / salt / minion , как показано в приведенном ниже коде —
#master: salt master: <local ip address>
После обновления файла конфигурации перезапустите Salt minion с помощью команды ниже.
sudo service salt-minion restart
Ключевой менеджмент
Соль использует AES Encryption для всей коммуникации между Мастером и Миньоном. Связь между Мастером и Миньоном аутентифицируется через доверенные, принятые ключи.
salt-key -L
Это даст следующий результат —
Accepted Keys: Denied Keys: Unaccepted Keys: <local system name> Rejected Keys:
Примите все ключи, введя команду ниже.
sudo salt-key -A
Это даст следующий результат —
The following keys are going to be accepted: Unaccepted Keys: <local system name> Proceed? [n/Y] y Key for minion bala-Inspiron-N4010 accepted.
Теперь снова введите команду солт-ключа ,
salt-key -L
Это даст следующий результат —
Accepted Keys: <local system name> Denied Keys: Unaccepted Keys: Rejected Keys:
Отправка команд
Связь между Мастером и Миньоном должна быть проверена с помощью команды test.ping.
sudo salt '*' test.ping
Это даст следующий результат —
<local system name> True
Здесь «*» относится ко всем миньонам. Поскольку у нас есть только один миньон — test.ping, он выполняет команду ping и возвращает информацию о том, успешно ли выполнен ping или нет.
SaltStack — Создание простой среды
В этой главе мы создадим простую среду SaltStack, один мастер соли и два миньона соли. Эта среда поможет нам изучить концепцию соли в следующих главах.
Давайте придерживаться следующих шагов для создания среды SaltStack.
Установите среду VirtualBox
VirtualBox — это кроссплатформенное приложение для виртуализации. VirtualBox позволяет запускать более одной операционной системы одновременно. VirtualBox работает на Windows, Linux, Macintosh и Solaris. Он размещает и поддерживает большое количество гостевых операционных систем .
Вы можете скачать и установить VirtualBox, перейдя по следующей ссылке — https://www.virtualbox.org/wiki/Downloads
Мы создадим три виртуальные машины и запустим их с помощью VirtualBox.
Установить Vagrant
Vagrant предоставляет простые в настройке, воспроизводимые и переносимые рабочие среды.
Вы можете скачать и установить Vagrant, перейдя по следующей ссылке — https://www.vagrantup.com
После успешной установки Vagrant его необходимо настроить. Создайте в папке один файл с именем Vagrantfile и опишите тип компьютера и его свойства.
Запустить Vagrant. Чтобы запустить Vagrant, введите следующую команду:
vagrant up
После запуска vagrant Vagrant создает и запускает те машины, которые определены в Vagrantfile, используя VirtualBox в фоновом режиме. Эти машины будут работать, пока вы их не закроете.
Stop Vagrant — чтобы остановить все работающие машины в VirtualBox, введите следующую команду —
vagrant halt
Загрузите демонстрационную среду
SaltStack предоставляет простую демонстрационную среду, такую как установка Vagrant, и она размещена в github . Давайте загрузим установку, используя следующую команду —
cd /cd/to/path git clone https://github.com/UtahDave/salt-vagrant-demo
Начальная среда
Теперь запустите демонстрационную среду, используя следующую команду —
cd /cd/to/path/salt-vagrant-demo vagrant up
После этой команды вы увидите следующий ответ —
result
Теперь три сервера работают, один с настроенным солт-мастером, а два — с соленым миньоном.
Беги Соляной мастер
Войдите в Salt master, используя следующую команду —
vagrant ssh master
Теперь перейдите к пользователю root с помощью команды ниже —
sudo su
Теперь мы успешно подключились к мастеру соли.
Давайте теперь рассмотрим некоторые основные команды в SaltStack.
Перечислите все ключи
Следующая команда предназначена для проверки соединений Salt minion и просмотра того, принято или отклонено соединение.
salt-key —list-all
Это даст следующий результат —
Accepted Keys: minion1 minion2 Denied Keys: Unaccepted Keys: Rejected Keys:
Проверьте соленых миньонов
Теперь мы приняли все ключи, вы можете отправить команду от Мастера соли, чтобы проверить, слушают ли миньоны соли или нет,
salt '*' test.ping
Это даст следующий результат —
minion1: True minion2: True
Из приведенного выше результата перечислите миньонов 1 и миньонов 2, что означает, что миньоны правильно слушают, иначе миньоны теперь могут реагировать правильно.
SaltStack — система контроля доступа
Система контроля доступа предоставляет пользователю возможность для группы выполнять задачу с разрешениями. Система контроля доступа Salt используется для настройки доступа к неадминистративным интерфейсам управления. Вы можете применить этот процесс ко всем системам. Этот элемент управления помогает пользователям без прав администратора выполнять команды Salt.
Солевые интерфейсы бывают следующих трех типов:
- Система ACL издателя
- Внешняя система аутентификации
- Пир система
Давайте разберемся, подробно рассмотрим каждый из этих интерфейсов.
Издатель ACL System
Система ACL Publisher предоставляет доступ другим пользователям, кроме root, для выполнения команд Salt на миньонах с главного устройства. Система ACL издателя настраивается в главном файле конфигурации с помощью параметра конфигурации publisher_acl . Это определяется следующим образом —
publisher_acl: user1: - .* user2: - web*: - test.* - pkg.*
Вот,
-
Пользователь1 может выполнять что угодно.
-
user2 разрешено использовать test и pkg , но только на миньонах «web *».
Пользователь1 может выполнять что угодно.
user2 разрешено использовать test и pkg , но только на миньонах «web *».
Внешняя система аутентификации
Внешняя система аутентификации используется для предоставления доступа к выполнению солт-команд для определенных миньонов через внешнюю систему авторизации, такую как PAM, LDAP и т. Д. Этот файл конфигурации определяется в мастер-файле, как описано ниже.
external_auth: pam: user1: - 'web*': - test.* - network.* user2: - .*
Вот,
-
Пользователь user1 может выполнять функции в тестовом и сетевом модулях миньонов, которые соответствуют цели web * .
-
Пользователь user2 может выполнять все функции.
Пользователь user1 может выполнять функции в тестовом и сетевом модулях миньонов, которые соответствуют цели web * .
Пользователь user2 может выполнять все функции.
Включить внешнюю систему аутентификации в команде
Солевой сервер предоставляет опцию ‘-a’ для включения внешней аутентификации.
salt -a pam web\* test.ping
Здесь опция -a pam используется для включения внешней аутентификации PAM. Salt Server будет запрашивать данные аутентификации всякий раз, когда мы выполняем команду. Чтобы запретить Salt Server запрашивать данные аутентификации только в первый раз, мы можем использовать опцию T. Эта опция -T кэширует детали аутентификации в течение следующих 12 часов (настройка по умолчанию) и использует ее для аутентификации пользователей.
salt -T -a pam web\* test.ping
Система сверстников
Миньоны соли могут передавать команды, используя одноранговый интерфейс. Интерфейс однорангового узла настраивается через главный файл конфигурации либо для того, чтобы миньоны могли отправлять команды от мастера, используя раздел конфигурации однорангового узла, либо чтобы миньоны могли выполнять бегунов от мастера, используя конфигурацию peer_run .
Позвольте нам понять обе эти конфигурации в деталях.
Конфигурация пира
Простая конфигурация, которая должна быть определена в мастер-файле, выглядит так:
peer: .*: - .*
Здесь он обеспечивает связь для всех миньонов, но рекомендуется только для очень безопасных сред.
Чтобы назначить миньонов конкретным идентификаторам, необходимо определить конфигурацию, как показано ниже: peer —
.*domain.com: - test.*
Конфигурация peer_run
Эта конфигурация позволяет миньонам выполнять бегунов от мастера, используя опцию peer_run в мастер-файле. Следующий пример — предоставить доступ всем миньонам и всем бегунам.
peer_run: .*: - .*
Чтобы назначить миньонов конкретному идентификатору, необходимо определить конфигурацию, как указано ниже:
peer_run: .*domain.com: - test.*
Как выполнить команды
Чтобы выполнить test.ping для всех миньонов, используйте команду salt-call вместе с модулем publish.publish .
salt-call publish.publish \* test.ping
Чтобы выполнить runner , используйте команду salt-call вместе с модулем publish.runner .
salt-call publish.runner manage.up
SaltStack — Управление работой
Соль обладает возможностью высокоскоростной связи с большим количеством систем. Такой подход помогает Солту создать мощную многозадачную систему. Salt может выполнять задания в более чем одной системе, поэтому Salt использует технику управления заданиями для управления каждой задачей, выполняемой во всех системах. Эта глава подробно описывает управление работой.
Что такое идентификатор работы?
Соль имеет каталог кеша, cachedir . Внутри этого каталог, поддерживаемый миньонами, называется каталогом proc . Он находится в следующем каталоге / var / cache / salt / proc.
Каталог proc используется для поддержки всех файлов. Когда эти файлы выполняются, им присваивается уникальный идентификатор задания. Этот идентификатор задания помогает идентифицировать текущие запущенные задания на миньоне и позволяет искать задания.
Модуль SALTUTIL
Salt представляет новый модуль, который называется процессом управления заданиями Saltutil. Этот модуль содержит различные функции для управления заданиями. Эти функции используются для управления заданиями на уровне миньонов. Функции описаны вкратце следующим образом —
-
running — возвращает все данные о запущенных заданиях, которые находятся в каталоге proc.
-
find_job — возвращает конкретные данные об определенной работе на основе идентификатора работы.
-
signal_job — позволяет заданному идентификатору задания (jid) отправлять сигнал.
-
term_job — отправляет сигнал завершения для указанного задания.
-
kill_job — отправляет сигнал уничтожения для указанного задания.
running — возвращает все данные о запущенных заданиях, которые находятся в каталоге proc.
find_job — возвращает конкретные данные об определенной работе на основе идентификатора работы.
signal_job — позволяет заданному идентификатору задания (jid) отправлять сигнал.
term_job — отправляет сигнал завершения для указанного задания.
kill_job — отправляет сигнал уничтожения для указанного задания.
Джобс Бегун
Бегунок заданий содержит функции, которые делают просмотр данных проще и чище. У него разные функции. Давайте обсудим каждую из этих функций подробно.
АКТИВНАЯ функция
Функция Active используется для определения того, какие задания еще выполняются, и проверки того, какие системы завершили задание и какие системы еще ожидают. Это выполняется с помощью следующей команды,
salt-run jobs.active
Функция LOOKUP_JID
Бегунок lookup_jid отобразит данные для текущей ищущей работы. Эти задания настраиваются с помощью опции keep_jobs в основной конфигурации. Это выполняется с помощью следующей команды.
salt-run jobs.lookup_jid <job id number>
Функция LIST_JOBS
Функция List_jobs используется для вывода списка данных для заданий. Это выражается следующей командой —
salt-run jobs.list_jobs
Планирование работы
Система расписаний предоставляет выполнение любой функции выполнения для миньонов или любого бегуна на главном сервере.
Это выполняется следующими методами —
-
Расписание — опция расписания в файлах конфигурации master или minion .
-
Данные колонны миньонов — обновляет данные колонн миньонов с помощью команды saltutil.refresh_pillar.
-
Состояние расписания или модуль расписания.
Расписание — опция расписания в файлах конфигурации master или minion .
Данные колонны миньонов — обновляет данные колонн миньонов с помощью команды saltutil.refresh_pillar.
Состояние расписания или модуль расписания.
Соляные состояния исполняются на миньоне. Вы можете передать позиционные аргументы и указать YAML -аргумент для именованных аргументов в файле конфигурации, как показано ниже.
schedule: job1: function: saltstate.sls seconds: 3600 args: - httpd kwargs: test: True
Здесь job1 будет выполнять функцию salttate.sls с указанными аргументами httpd для каждого часа. Тест: True — это дополнительный аргумент для команды httpd, который определен в salttate.sls .
SaltStack — соляной файловый сервер
Файловый сервер Salt является сервером ZeroMQ без сохранения состояния. Он встроен в мастера соли. Файловый сервер Salt используется для распространения файлов от мастера к миньонам. Он содержит разные модули. Давайте разберемся в этой главе с файловым сервером соли, его конфигурацией, модулями, относящимися к файловому серверу соли, как получить доступ к файловому серверу соли в Python и т. Д.
Бэкэнд файлового сервера
Бэкэнд файлового сервера позволяет файловому серверу Salt выступать в качестве прозрачного интерфейса с другим файловым сервером, таким как локальная файловая система, система контроля версий Git и т. Д.
Бэкэнд файлового сервера Git можно включить с помощью следующей конфигурации в мастер-файле.
fileserver_backend: - git
Чтобы включить файловую систему с несколькими бэкэндами, мы можем использовать следующую конфигурацию.
fileserver_backend: - roots - git
Мы также можем указать дополнительную опцию для другого внутреннего сервера, используя определенный раздел соответствующего внутреннего сервера.
Локальная файловая система
Для использования этой системы мы должны использовать следующий код.
file_roots: base: - /srv/salt/prod
Git File System
Для использования этой системы мы должны использовать следующий код.
gitfs_remotes: - https://github.com/sample/sample1.git
Запрашиваемые файлы
Соль имеет возможность запрашивать файлы для конкретных сред.
salt://path/to/file?saltenv = base
Здесь среда определяется с помощью параметра корней.
Конфигурация файлового сервера
Солевые файлы могут быть размещены во многих корневых каталогах и доступны, указав путь к файлу и среду для поиска. Отдельные среды могут охватывать несколько корней каталогов.
Среда
Среда по умолчанию является базовой. Эта среда определена и используется для загрузки файлов, когда не указана другая среда.
file_roots: base: - /srv/salt/base
Вы также можете использовать несколько сред, как показано в коде ниже.
file_roots: base: - /srv/salt/base dev: - /srv/salt/dev - /srv/salt/base
Модуль CP
Модуль CP является основным модулем для управления файловым сервером Salt . Команда salt-cp также может использоваться для распространения файлов, представленных файловым сервером Salt.
ПОЛУЧИТЬ ФАЙЛ
Функция cp.get_file может использоваться на миньоне для загрузки файла с мастера. Это определяется, как показано в следующем блоке кода.
salt '*' cp.get_file salt://vimrc /etc/vimrc
Приведенная выше команда инструктирует всех миньонов Salt скачать файл vimrc и скопировать его в / etc / vimrc .
Включить шаблон
Вы можете включить параметр шаблона в get_file следующим образом:
salt '*' cp.get_file "salt://vimrc" /etc/vimrc template = jinja
Применить сжатие
Чтобы использовать сжатие, используйте именованный аргумент gzip . Допустимые значения — целые числа от 1 до 9, где 1 — минимальное сжатие, а 9 — максимальное значение.
Команда определяется следующим образом:
salt '*' cp.get_file salt://vimrc /etc/vimrc gzip = 5
GET_DIR
Функция cp.get_dir может использоваться на миньоне для загрузки всего каталога с мастера. Это определено в следующем блоке кода.
salt '*' cp.get_dir salt://etc/mysql /etc
Cp.get_dir поддерживает аргументы рендеринга шаблонов и сжатия gzip. Если вы хотите, вы также можете назначить.
Модуль FILECLIENT
Salt предоставляет модуль python, который помогает получить доступ к файловому серверу соли. Модуль salt / fileclient.py используется для настройки связи от миньона к мастеру.
Пример кода для получения файлов выглядит следующим образом:
import salt.minion import salt.fileclient def get_file(path, dest, saltenv = ‘base'): client = salt.fileclient.get_file_client(__opts__) return client.get_file(path, dest, true, saltenv)
Вот,
-
Опция доступна, когда модуль работает в солевой среде. В противном случае мы должны указать путь к конфигурации — / etc / salt / minion .
-
путь указывает на путь к исходному файлу на файловом сервере соли.
-
dest указывает путь к файлу назначения.
-
saltenv относится к окружающей среде
Опция доступна, когда модуль работает в солевой среде. В противном случае мы должны указать путь к конфигурации — / etc / salt / minion .
путь указывает на путь к исходному файлу на файловом сервере соли.
dest указывает путь к файлу назначения.
saltenv относится к окружающей среде
В следующей главе мы поймем, как использовать Git в качестве файлового сервера.
SaltStack — Git как файловый сервер
Git — это система управления версиями с открытым исходным кодом. Его можно использовать для отслеживания изменений в любых файлах. Salt отправляет файлы из репозиториев Git, используя файловый сервер Git. Вы можете настроить Git для опции fileserver_backend list, и если вам нужно сконфигурировать один или несколько репозиториев, вы можете сделать это, используя опцию gitfs_remotes .
В этой главе рассказывается, как установить и настроить файловый сервер Git. Прежде чем перейти к установке, вы должны иметь следующие предварительные условия.
Необходимые условия для работы с Git-сервером
Минимальное требование к Git-серверу для использования Git в качестве файлового сервера следующее:
- pygit2
- Dulwich
Pygit2 и Dulwich настраиваются с помощью параметра gitfs_provider в главном конфигурационном файле. Если gitfs_provider не настроен в главном файле, то Salt предпочтет pygit2, если подходящая версия доступна, за которой следуют GitPython и Dulwich .
Установите pygit2
Следующие команды используются для установки pygit2 в системах на основе Fedora и Ubuntu:
-
Система на основе Fedora
Система на основе Fedora
yum install python-pygit2
-
Система на основе Ubuntu
Система на основе Ubuntu
apt-get install python-pygit2
Здесь минимальная поддерживаемая версия pygit2 составляет 0.20.3.
Установить GitPYTHON
GitPython может быть легко установлен на мастер с помощью команды yum / apt, как показано ниже.
-
Система на основе Fedora
Система на основе Fedora
yum install GitPython
-
Система на основе Ubuntu
Система на основе Ubuntu
apt-get install python-git
Установите DULWICH
Dulwich может быть легко установлен на мастер при помощи команды yum.
-
Система на основе Fedora
Система на основе Fedora
yum install python-dulwich
-
Система на основе Ubuntu
Система на основе Ubuntu
apt-get install python-dulwich
Теперь мы установили все зависимости для файлового сервера Git. Теперь давайте настроим этот файловый сервер Git, используя раздел fileserver_backend в главном конфигурационном файле.
Конфигурация сервера
Чтобы использовать файловый сервер Git, вам нужно добавить Git в список fileserver_backend в главном конфигурационном файле. Это описано следующим образом —
fileserver_backend: - git
Позвольте нам далее понять, как настроить файловый сервер Git в удаленной конфигурации.
Конфигурация gitfs_remotes
Вы можете указать любой один или все URL-адреса, такие как git: //, https: //, file: // или ssh: // для конфигурации gitfs_remotes в основном файле. Это используется для поиска запрошенных файлов.
Простая спецификация https URL определена ниже.
gitfs_remotes: - https://github.com
Конфигурирование ssh может быть сделано, как показано ниже.
gitfs_remotes: - [email protected]:user1/sample.git - ssh://[email protected]/path/to/sample.git
Теперь мы настроили файловый сервер Git, используя две опции fileserver_backend и gitfs_remotes .
Перезагрузите Мастер
После внесения всех изменений в мастер-файл, теперь перезапустите мастер, чтобы загрузить все конфигурации на файловом сервере Git.
Конфигурация нескольких пультов
Следующая команда используется для множественной конфигурации в gitfs_remotes в мастер-файле.
gitfs_remotes: - git://github.com/sample/sample1.git - https://github.com/sample/sample2.git - file:///root/user/sample
Здесь репозитории sample1.git, sample2.git и sample.doc могут иметь следующие файлы.
sample1.git: top.sls sample2.git edit/vimrc sample.doc edit/vimrc
SaltStack — Использование MinionFS в качестве файлового сервера
MinionFS — это специальный файловый сервер, предоставляемый Salt для обмена файлами между ними. Файлы, обслуживаемые MinionFS, — это файлы, специально предназначенные для совместного использования миньонами. Чтобы поделиться файлами, Миньон должен выполнить шаги, указанные ниже.
-
Исходный миньон должен передать файл мастеру соли с помощью функции cp.push .
-
После того как файлы отправлены исходным миньоном, к развернутым файлам может получить доступ любой другой миньон с помощью файлового сервера MinionFS.
Исходный миньон должен передать файл мастеру соли с помощью функции cp.push .
После того как файлы отправлены исходным миньоном, к развернутым файлам может получить доступ любой другой миньон с помощью файлового сервера MinionFS.
Включить Pushing
По умолчанию отправка файлов миньонами на мастер отключена. Чтобы принимать файлы от миньонов, мастер должен иметь опцию «file_recv» в файле конфигурации, и его значение должно быть установлено в True . По умолчанию значение «file_recv» равно false .
file_recv: True
Как только опция включена, перезапустите главную службу.
Pushing Files
Миньоны могут передавать файлы мастеру. Это выполняется функцией cp.push . Эта функция cp.push предоставляет простой механизм для отправки файлов по minion с помощью идентификатора minion.
salt 'minion-id' cp.push /path/to/the/file
Здесь идентификатор миньона используется для определения, какой миньон толкает файл. Эта команда сохранит файл в подкаталоге с именем minions под кэшированным именем мастера . Обычно это путь — / var / cache / salt / master / minions.
Для minion, m1 и файла — /var/log/mylog.txt файл будет сохранен в — /var/cache/salt/master/minions/m1/var/log/mylog.txt.
Включить MinionFS
Чтобы включить MinionFS, просто добавьте minion в настройку бэкэнда файлового сервера, как показано в следующем блоке кода.
fileserver_backend: - roots - minion
Как только MinionFS включен, отправленные файлы minion доступны как —
salt://<minion-id>/path/to/pushed/file
Для minion, m1 и отправляемого файла — /var/log/mylog.txt, отправленный файл будет обслуживаться из соли: //m1/var/log/mylog.txt.
Эта minionFS может быть смонтирована в специальном каталоге с использованием следующей конфигурации. Он отделит файлы minionFS от других файлов и поможет в организации файлов minion.
minionfs_mountpoint: salt://minionfs
Для вышеуказанной конфигурации файл будет доступен в каталоге minionfs как — salt: //minionfs/m1/var/log/mylog.txt
Дополнительные возможности MinionFS
MinionFS также предоставляет возможность включить / отключить доступ к загружаемым файлам определенного миньона. Варианты: minionfs_whitelist , чтобы включить миньонов и minionfs_blacklist , чтобы отключить миньонов.
minionfs_whitelist: - webserver - develop* - ‘mail\d+.mysite.com' minionfs_blacklist: - testing
В приведенной выше конфигурации всем миньонам, кроме тестирования , разрешено предоставлять общий доступ к файлу с помощью minionFS.
-
WEBSERVER1
-
Миньоны, чьи идентификаторы соответствуют регулярному выражению, развиваются *
-
Миньоны, чьи идентификаторы соответствуют регулярному выражению mail \ d + .mysite.com .
-
тестирование
WEBSERVER1
Миньоны, чьи идентификаторы соответствуют регулярному выражению, развиваются *
Миньоны, чьи идентификаторы соответствуют регулярному выражению mail \ d + .mysite.com .
тестирование
В следующей главе мы узнаем, как использовать Cron с Salt.
SaltStack — Использование Cron с солью
Соль можно использовать вместе с приложением Cron . Совместное использование обоих приложений предоставляет отличную возможность для автоматизации Salt. В то время как Salt предоставляет возможность удаленного выполнения команд, Cron позволяет запускать его по расписанию или в автоматическом режиме. Давайте узнаем, как использовать Cron и Salt вместе в этой главе.
Что такое Крон?
Cron — очень полезное приложение в среде Linux. Это позволяет предварительно настроить команду или сценарий для запуска в определенную дату и время. Это также позволяет запускать приложения через регулярные промежутки времени, скажем, ежедневно, еженедельно или каждый первый день месяца.
Cron запускается при запуске системы и проверяет файл / etc / crontab на предмет конфигурации. Файл / etc / crontab содержит каждое приложение и его расписание в отдельной строке, как показано ниже.
15 * * * * root echo "This command runs at 15 minutes past every hour" 15 10 * * * root echo "This command is run daily at 10:15 am"
Каждая строка имеет следующие семь точек входа, которые разделены пробелом и имеют следующий вид:
-
минута — минута часа и находится в диапазоне от «0» до «59».
-
час — час и указывается в 24-часовых часах.
-
day_of_month — День месяца и находится в диапазоне от 1 до 31. Например, 10- го числа каждого месяца — 10.
-
месяц — месяц, указанный и указанный численно (0-12) или как название месяца (например, май).
-
day_of_week — День недели указывается численно (0-7) или как название дня (например, Солнце).
-
user — учетная запись пользователя, под которой запускается команда.
-
cmd — фактическая команда и ее аргументы.
минута — минута часа и находится в диапазоне от «0» до «59».
час — час и указывается в 24-часовых часах.
day_of_month — День месяца и находится в диапазоне от 1 до 31. Например, 10- го числа каждого месяца — 10.
месяц — месяц, указанный и указанный численно (0-12) или как название месяца (например, май).
day_of_week — День недели указывается численно (0-7) или как название дня (например, Солнце).
user — учетная запись пользователя, под которой запускается команда.
cmd — фактическая команда и ее аргументы.
Здесь * заменяет, если ничего не назначено.
Солонка (солевой зов)
Salt предоставляет CLI (интерфейс командной строки), солт-вызов для запуска модулей в самой локальной системе миньонов вместо главного сервера с помощью команды salt. CLI солт-вызова поддерживает все параметры, поддерживаемые солт-командой, но запускаются локально.
Изначально Salt Caller был разработан для поддержки отладки, но теперь его можно использовать как отдельное приложение.
salt-call test.ping
Использование соли-вызова в cron
CLI соли вызова полезен для планирования работы соли с помощью Cron. Например, чтобы проверять состояние миньона каждый день в полночь, мы можем использовать salt-call вместе с опцией — state.apply, как показано ниже.
/ и т.д. / кронтаб
PATH = /bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/opt/bin 0 0 * * * salt-call state.apply
Вот,
-
Функция state.apply проверит файл конфигурации соли для миньона и проверит, правильно ли сконфигурированы все действия, определенные для миньона.
-
Установка пути является хорошей практикой, потому что иногда команда salt может быть недоступна в системном пути.
Функция state.apply проверит файл конфигурации соли для миньона и проверит, правильно ли сконфигурированы все действия, определенные для миньона.
Установка пути является хорошей практикой, потому что иногда команда salt может быть недоступна в системном пути.
В следующей главе мы изучим Remote Execution, который является основной концепцией Salt.
SaltStack — Удаленное выполнение
Одна из основных концепций Salt — удаленное выполнение. Salt может выполнять команды на тысячах систем за считанные секунды. Соль использует свою собственную команду, чтобы сделать эту функциональность. Давайте теперь разберемся с различными командами Salt для удаленного выполнения в этой главе.
Соляная команда
Команда Salt позволяет Мастеру соли общаться с одним или несколькими миньонами Salt . Основной синтаксис выглядит следующим образом:
salt '<target>' <module.function> [arguments]
Приведенный выше синтаксис команды состоит из следующих трех основных компонентов.
-
target — определяет, какие системы применяются командой.
-
module.function — это команда. Команды состоят из модуля и функции.
-
arguments — дополнительные данные, необходимые для вызова функции.
target — определяет, какие системы применяются командой.
module.function — это команда. Команды состоят из модуля и функции.
arguments — дополнительные данные, необходимые для вызова функции.
Давайте разберемся с каждым из компонентов в деталях.
Что такое целевой компонент?
Target — это компонент, который позволяет фильтровать миньонов (управляемую систему) для запуска функции. Простая команда, использующая целевой компонент, определена ниже.
salt '*' test.ping
Это даст следующий результат —
minion2: True minion1: True
Здесь цель ‘*’ представляет все управляемые системы. Здесь ‘ test ‘ — это модуль, а ping — это функция. Это используется для проверки службы ping в удаленной системе. Мы узнаем о различных модулях и их функциях в следующих главах.
Цели с использованием ID (миньон)
Вы можете отправить команду конкретному миньону, используя его идентификатор в цели. Вместо использования ‘*’ вы можете заменить его, используя идентификатор миньона . Это определено ниже.
salt 'minion1’ test.ping
Это даст следующий результат —
minion1: True
Цели с использованием регулярных выражений
Цели могут быть отфильтрованы по определенному регулярному выражению. Это определено ниже.
salt -E 'minion[0-9]' test.ping
Это даст следующий результат —
minion2: True minion1: True
Цели с использованием списка
Цели могут быть явно указаны в списке. Это определено в следующем блоке кода.
salt -L 'minion1,minion2' test.ping
Это даст следующий результат —
minion2: True minion1: True
Цели по условию
Цели могут быть объединены в одну команду, как показано в блоке кода ниже.
salt -C 'G@os:Ubuntu and minion* or [email protected].*' test.ping
Это даст следующий результат —
minion1: True minion2: True
Модуль и функции (module.function)
Соль может выполнять команды оболочки; обновлять пакеты и распространять файлы и т. д. одновременно во всех управляемых системах. Соль выполняет эти операции с использованием модулей. Соль имеет специальные модули для всех доступных функций. Давайте разберемся с различными модулями Salt, используя простой пример из этой главы.
Shell Shell
Salt выполняет команды оболочки удаленно в нескольких системах с помощью команды cmd.run . Cmd — это основной модуль, а run — одна из функций, доступных в модуле cmd . Функция run позволяет выполнять любую команду оболочки в удаленной системе, как показано в блоке кода ниже.
salt '*' cmd.run 'ls -l /etc'
Это даст следующий результат —
minion2: total 868 drwxr-xr-x 7 root root 4096 Jan 26 22:10 X11 drwxr-xr-x 3 root root 4096 Jan 26 21:02 acpi -rw-r--r-- 1 root root 2981 Jan 26 20:48 adduser.conf -rw-r--r-- 1 root root 10 Jan 26 21:04 adjtime drwxr-xr-x 2 root root 4096 Jan 26 22:10 alternatives drwxr-xr-x 3 root root 4096 Jan 26 20:53 apm drwxr-xr-x 3 root root 4096 Jan 26 21:02 apparmor drwxr-xr-x 9 root root 4096 Jan 26 21:02 apparmor.d drwxr-xr-x 3 root root 4096 Jan 26 21:02 apport drwxr-xr-x 6 root root 4096 Jan 29 07:14 apt drwxr-xr-x 2 root root 4096 Jan 26 22:10 at-spi2 …………… …………… minion1: total 868 drwxr-xr-x 7 root root 4096 Jan 26 22:10 X11 drwxr-xr-x 3 root root 4096 Jan 26 21:02 acpi -rw-r--r-- 1 root root 2981 Jan 26 20:48 adduser.conf -rw-r--r-- 1 root root 10 Jan 26 21:04 adjtime drwxr-xr-x 2 root root 4096 Jan 26 22:10 alternatives drwxr-xr-x 3 root root 4096 Jan 26 20:53 apm drwxr-xr-x 3 root root 4096 Jan 26 21:02 apparmor drwxr-xr-x 9 root root 4096 Jan 26 21:02 apparmor.d drwxr-xr-x 3 root root 4096 Jan 26 21:02 apport drwxr-xr-x 6 root root 4096 Jan 29 07:09 apt drwxr-xr-x 2 root root 4096 Jan 26 22:10 at-spi2 -rw-r----- 1 root daemon 144 Oct 21 2013 at.deny -rw-r--r-- 1 root root 2177 Apr 9 2014 bash.bashrc -rw-r--r-- 1 root root 45 Mar 22 2014 bash_completion …………… ……………
Показать использование диска
Солт предоставляет специальный модуль- диск для получения полной информации о диске управляемой системы. Дисковый модуль имеет функцию использования для запроса деталей.
salt '*' disk.usage
Это даст следующий результат —
minion1: ---------- /: ---------- 1K-blocks: 41251136 available: 37852804 capacity: 5% filesystem: /dev/sda1 used: 1662420 /dev: ---------- 1K-blocks: 503908 available: 503896 capacity: 1% filesystem: udev used: 12 /run: ---------- 1K-blocks: 101780 available: 101412 capacity: 1% filesystem: tmpfs used: 368 /run/lock: ---------- 1K-blocks: 5120 available: 5120 capacity: 0% filesystem: none used: 0 /run/shm: ---------- 1K-blocks: 508884 available: 508872 capacity: 1% filesystem: none used: 12 /run/user: ---------- 1K-blocks: 102400 available: 102400 capacity: 0% filesystem: none used: 0 /sys/fs/cgroup: ---------- 1K-blocks: 4 available: 4 capacity: 0% filesystem: none used: 0 /vagrant: ---------- 1K-blocks: 303114632 available: 252331440 capacity: 17% filesystem: none used: 50783192 minion2: ---------- /: ---------- 1K-blocks: 41251136 available: 37852804 capacity: 5% filesystem: /dev/sda1 used: 1662420 /dev: ---------- 1K-blocks: 503908 available: 503896 capacity: 1% filesystem: udev used: 12 /run: ---------- 1K-blocks: 101780 available: 101412 capacity: 1% filesystem: tmpfs used: 368 /run/lock: ---------- 1K-blocks: 5120 available: 5120 capacity: 0% filesystem: none used: 0 /run/shm: ---------- 1K-blocks: 508884 available: 508872 capacity: 1% filesystem: none used: 12 /run/user: ---------- 1K-blocks: 102400 available: 102400 capacity: 0% filesystem: none used: 0 /sys/fs/cgroup: ---------- 1K-blocks: 4 available: 4 capacity: 0% filesystem: none used: 0 /vagrant: ---------- 1K-blocks: 303114632 available: 252331440 capacity: 17% filesystem: none used: 50783192
Сетевые интерфейсы
Salt предоставляет отдельный модуль, сеть и функцию, интерфейсы внутри модуля для запроса информации сетевого интерфейса об управляемых системах.
salt '*' network.interfaces
Это даст следующий результат —
minion1: ---------- eth0: ---------- hwaddr: 08:00:27:04:3e:28 inet: |_ ---------- address: 10.0.2.15 broadcast: 10.0.2.255 label: eth0 netmask: 255.255.255.0 inet6: |_ ---------- address: fe80::a00:27ff:fe04:3e28 prefixlen: 64 scope: link up: True eth1: ---------- hwaddr: 08:00:27:34:10:52 inet: |_ ---------- address: 192.168.50.11 broadcast: 192.168.50.255 label: eth1 netmask: 255.255.255.0 inet6: |_ ---------- address: fe80::a00:27ff:fe34:1052 prefixlen: 64 scope: link up: True lo: ---------- hwaddr: 00:00:00:00:00:00 inet: |_ ---------- address: 127.0.0.1 broadcast: None label: lo netmask: 255.0.0.0 inet6: |_ ---------- address: ::1 prefixlen: 128 scope: host up: True minion2: ---------- eth0: ---------- hwaddr: 08:00:27:04:3e:28 inet: |_ ---------- address: 10.0.2.15 broadcast: 10.0.2.255 label: eth0 netmask: 255.255.255.0 inet6: |_ ---------- address: fe80::a00:27ff:fe04:3e28 prefixlen: 64 scope: link up: True eth1: ---------- hwaddr: 08:00:27:a7:31:8e inet: |_ ---------- address: 192.168.50.12 broadcast: 192.168.50.255 label: eth1 netmask: 255.255.255.0 inet6: |_ ---------- address: fe80::a00:27ff:fea7:318e prefixlen: 64 scope: link up: True lo: ---------- hwaddr: 00:00:00:00:00:00 inet: |_ ---------- address: 127.0.0.1 broadcast: None label: lo netmask: 255.0.0.0 inet6: |_ ---------- address: ::1 prefixlen: 128 scope: host up: True
Модуль выполнения sys.doc
Солевые функции могут быть отправлены в исполнительный модуль sys.doc . Это используется для получения подробной информации о любом модуле непосредственно из командной строки. Функции Соли самодокументированы. Всю документацию по функциям можно получить из миньонов с помощью функции sys.doc (), которая определена ниже.
salt '*' sys.doc
Аргументы для вызова функции
Аргументы используются для предоставления дополнительных данных для вызова функции. Простой аргумент приведен ниже.
salt '*' sys.doc pkg.install
Здесь аргумент pkg.install — это модуль для установки определенных пакетов.
Python Function
Аргументы — это разделенные пробелами параметры функции. Это позволяет передавать код Python в качестве аргументов, как указано ниже.
salt '*' cmd.exec_code python 'import sys;print sys.version'
Это даст следующий результат —
minion2: 2.7.6 (default, Oct 26 2016, 20:30:19) [GCC 4.8.4] minion1: 2.7.6 (default, Oct 26 2016, 20:30:19) [GCC 4.8.4]
Точно так же вы можете использовать дополнительные ключевые слова и формат YAML .
SaltStack — Управление конфигурацией
Управление конфигурацией является одним из наиболее важных понятий в SaltStack. Он используется для создания повторно используемого шаблона конфигурации, называемого состоянием . Состояние описывает все, что требуется для помещения системного компонента или приложения в известную конфигурацию.
Солт-Стейт
Соленое состояние — это многоразовая конфигурация для определенной части системы. Состояния легче понять и описать с помощью простого YAML.
Создать соляное состояние
Солевые состояния легко создавать. Давайте создадим простое состояние в этой главе. Перейдите в каталог salt-vagrant-demo / salttack / salt /, создайте файл samples.sls и добавьте в него следующие строки.
samples.sls
install_network_packages: pkg.installed: - pkgs: - rsync - lftp - curl
Теперь сохраните файл и выполните следующую команду в мастере соли.
root@saltmaster:/home/vagrant# salt 'minion1’ state.apply samples
Здесь мы установили rsync, lftp и curl через модуль pkg.installed, используя состояние Salt в соляном миньоне minion1 . Если он работает правильно, вы можете увидеть ответ, как показано ниже.
Это даст следующий результат —
minion1: ---------- ID: install_network_packages Function: pkg.installed Result: True Comment: All specified packages are already installed Started: 08:08:48.612336 Duration: 545.385 ms Changes: Summary for minion1 ------------ Succeeded: 1 Failed: 0 ------------ Total states run: 1 Total run time: 545.385 ms
Применить состояние соли
Теперь, когда мы создали состояние с помощью файла .sls и применили его, специально вызвав его. У Salt есть файл состояния по умолчанию, который называется top.sls . Верхний файл используется для применения нескольких файлов состояния к миньонам Salt. Верхний файл описывает, где должны применяться состояния. Итак, файлы States и Top работают вместе, чтобы создать ядро возможностей управления конфигурацией SaltStack.
Теперь давайте создадим простой файл top.sls в каталоге salttack / salt и добавим следующее.
top.sls
base: '*': - common 'minion1': - samples
Здесь состояние , как правило, применяется ко всем системным состояниям, примеры применяются к minion1 .
Затем запустите мастер соли и примените состояние, как показано ниже.
root@saltmaster:/home/vagrant# salt '*' state.apply
Это даст следующий результат —
minion1: ---------- ID: common_packages Function: pkg.installed Result: True Comment: All specified packages are already installed Started: 09:33:35.642355 Duration: 588.21 ms Changes: Summary for minion1 ------------ Succeeded: 1 Failed: 0 ------------ Total states run: 1 Total run time: 588.210 ms minion2: ---------- ID: common_packages Function: pkg.installed Result: True Comment: All specified packages are already installed Started: 09:33:35.890331 Duration: 602.79 ms Changes: Summary for minion2 ------------ Succeeded: 1 Failed: 0 ------------ Total states run: 1 Total run time: 602.790 ms
Применить размер партии
Если у вас есть большое количество подключенных миньонов, вы можете ограничить количество обновляемых систем одновременно. Это выполняется с помощью опции –batch-size , которая определена ниже.
root@saltmaster:/home/vagrant# salt --batch-size 5 '*' state.apply
Это даст следующий результат —
Executing run on ['minion2', 'minion1'] jid: 20170314094638482664 minion1: ---------- ID: common_packages Function: pkg.installed Result: True Comment: All specified packages are already installed Started: 09:46:41.228519 Duration: 582.24 ms Changes: Summary for minion1 ------------ Succeeded: 1 Failed: 0 ------------ Total states run: 1 Total run time: 582.240 ms retcode: 0 jid: 20170314094638482664 minion2: ---------- ID: common_packages Function: pkg.installed Result: True Comment: All specified packages are already installed Started: 09:46:41.153609 Duration: 605.235 ms Changes: Summary for minion2 ------------ Succeeded: 1 Failed: 0 ------------ Total states run: 1 Total run time: 605.235 ms retcode: 0
Функции солевого состояния
Функции состояния соли используются для установки и настройки приложений в удаленной системе. Давайте установим пакет «Vim», используя функцию состояния соли.
Создать и применить функцию состояния
Создайте файл с именем «sample.sls» в каталоге «salt-vagrant-demo / salttack / salt / sample.sls» и добавьте следующее:
sample.sls
install vim: pkg.installed: - name: vim
После запуска среды Vagrant запустите мастер соли и примените sample.sls, выполнив следующую команду.
root@saltmaster:/home/vagrant# sudo salt 'minion2’ state.apply sample
Это даст следующий результат —
minion2: ---------- ID: install vim Function: pkg.installed Name: vim Result: True Comment: Package vim is installed Started: 15:07:45.752764 Duration: 553.506 ms Changes: Summary for minion2 ------------ Succeeded: 1 Failed: 0 ------------ Total states run: 1 Total run time: 553.506 ms
Теперь мы добавили пакет «Vim». Теперь давайте проверим пакет, используя метод тестирования Salt.
Соль Государственное Тестирование
Выполнение теста выполняется путем добавления опции «test = True» к состояниям. Информация о возвращении покажет состояния, которые будут применены желтым цветом, а результат будет отображен как «Нет».
Следующая команда используется для проверки состояния —
root@saltmaster:/home/vagrant# sudo salt 'minion2’ state.apply sample test = True
Это даст следующий результат —
minion2: ---------- ID: install vim Function: pkg.installed Name: vim Result: True Comment: Package vim is already installed Started: 15:07:45.752764 Duration: 553.506 ms Changes: Summary for minion2 ------------ Succeeded: 1 Failed: 0 ------------ Total states run: 1 Total run time: 553.506 ms
SaltStack ─ Компонент столба
Столп является важным компонентом для повторного использования соляных состояний. Он используется для определения защищенных данных для миньонов, назначенных с использованием целей. Данные соляного столба хранят такие значения, как порты, пути к файлам, параметры конфигурации и пароли.
Конфигурационный файл Pillar
Конфигурация для pillar_roots в главном конфигурационном файле показана ниже —
pillar_roots: base: - /srv/pillar
Здесь файл находится в каталоге «/ srv / pillar».
Учтите, что верхний файл, расположенный в /srv/pillar/top.sls, имеет следующую структуру:
base: '*': - default
Теперь перейдите к файлу default.sls, расположенному в /srv/pillar/default.sls, и добавьте следующий код.
# Default pillar values apache git
После сохранения файла обновите столб, чтобы обновить все изменения.
Освежающий столб
Вы можете обновить столб, используя следующую команду.
root@saltmaster:/home/vagrant# salt '*' saltutil.refresh_pillar
Приведенная выше команда используется для обновления данных соляного столба по всем миньонам.
Список основных данных
Чтобы перечислить данные столба, вы можете использовать команду, приведенную ниже.
root@saltmaster:/home/vagrant# salt '*' pillar.ls
Это даст следующий результат —
minion2: - apache - git minion1: - apache - git
Элементы столба
После того, как столп настроен, данные можно просмотреть на миньоне через модуль столба. Доступ к нему можно получить через функцию pillar.items , которая определена ниже.
root@saltmaster:/home/vagrant# salt '*' pillar.items
Это даст следующий результат —
minion2: ---------- apache: httpd git: git minion1: ---------- apache: httpd git: git
SaltStack — включить компонент
Компонент «Включить» используется для определения одной и той же задачи конфигурации в нескольких местах. Это легко выполнить. В верхней части файла состояния добавьте включение в следующем формате:
include: - state file 1 - state file 2
Здесь файл состояния 1 и файл состояния 2 — это имена файлов SLS, которые вы хотите включить. Не нужно включать расширение .sls . Состояния включенной соли вставляются вверху текущего файла.
Файл состояния в подкаталоге
Вы можете включить файл состояния подкаталога, используя точку (.). Он действует как разделитель каталогов.
include: - dir.sls1
Зерновой интерфейс
Зерна — это интерфейс, используемый для получения информации о базовой системе. Зерна собираются для операционной системы, доменного имени, IP-адреса, ядра, типа ОС, памяти и многих других системных свойств.
Таргетинг по зерну
Данные о зерне можно использовать при нацеливании на миньонов, что определено в следующем блоке кода.
root@saltmaster:/home/vagrant# salt -G 'os:Ubuntu' test.ping
Это даст следующий результат —
minion1: True minion2: True
Листинг зерна
Зерновые могут быть перечислены с помощью модуля ‘grains.ls’, который определен ниже.
root@saltmaster:/home/vagrant# salt '*' grains.ls
Элементы списка
Как и в случае с Pillar, данные о зерновых также могут быть перечислены с помощью «grains.items».
root@saltmaster:/home/vagrant# salt '*' grains.items
SaltStack — ведение журнала
Ведение журнала используется для отслеживания запущенных программных событий. Событие описывается описательным сообщением, которое может содержать переменные данные. Подход солевого каротажа используется для решения любых проблем, с которыми вы можете столкнуться. Вы можете проверить с определенными уровнями журнала.
Настройки конфигурации
Давайте разберемся с различными настройками конфигурации для регистрации, подробно.
ЖУРНАЛЬНЫЙ ФАЙЛ
Записи соленого журнала передаются через файл, который содержит локальный путь или сетевое местоположение для идентификации. Этот файл считается файлом журнала.
log_file: /var/log/salt/master
Здесь файл зависит от исполняемого двоичного файла в master. Точно так же вы можете выполнить в миньоне, как показано ниже.
log_file: /var/log/salt/minion
Вы также можете использовать удаленный адрес. Синтаксис для использования удаленного адреса: <file | udp | tcp>: // <host | socketpath>: <port-if-required> / <log-средства>.
log_file: udp://loghost:port
Здесь по умолчанию Log-средство — LOG_USER.
LOG_LEVEL
Уровни журнала упорядочены в числовом значении. Библиотека Python определила большинство уровней ведения журнала по умолчанию. В дополнение к этому, Соль использует еще несколько уровней. Некоторые уровни описаны ниже.
-
log_level: ошибка; значение уровня 40 — указывает на запись оператора журнала при ошибке.
-
log_level: тихий; Значение уровня — 1000. Это означает, что на этом уровне ничего не должно регистрироваться.
-
log_level: info; значение уровня 20 — указывает на нормальную информацию журнала.
-
log_level: warn; значение уровня — 30 — указывает запись оператора журнала при предупреждении.
-
log_level: debug; значение уровня равно 10 — Информация полезна для отладки как солт-реализаций, так и солт-кода.
-
log_level: trace; значение уровня 5 — Более подробная информация об отладке кода.
log_level: ошибка; значение уровня 40 — указывает на запись оператора журнала при ошибке.
log_level: тихий; Значение уровня — 1000. Это означает, что на этом уровне ничего не должно регистрироваться.
log_level: info; значение уровня 20 — указывает на нормальную информацию журнала.
log_level: warn; значение уровня — 30 — указывает запись оператора журнала при предупреждении.
log_level: debug; значение уровня равно 10 — Информация полезна для отладки как солт-реализаций, так и солт-кода.
log_level: trace; значение уровня 5 — Более подробная информация об отладке кода.
LOG_LEVEL_LOGFILE
Он определяет уровень сообщений для отправки в файл журнала.
log_level_logfile: info
LOG_DATEFMT
Он определяет формат даты журнала. По умолчанию он представлен в виде% Y-% m-% d% H:% M:% S.
log_datefmt_logfile: '%Y-%m-%d %H:%M:%S'
LOG_FMT_CONSOLE
Он определяет формат консоли регистрации сообщений. Солт использует настраиваемые атрибуты LogRecord, чтобы раскрасить вывод журнала консоли. Следует следующий синтаксис —
'%(colorlevel)s' # log level name colorized by level '%(colorname)s' # colorized module name '%(colorprocess)s' # colorized process number '%(colormsg)s' # colorized messages name
LOG_FMT_LOGFILE
Он определяет формат файла журнала регистрации сообщений. Основной синтаксис выглядит следующим образом —
%(asctime)s,%(msecs)03d [%(name)-17s][%(levelname)-8s] %(message)s
LOG_GRANULAR_LEVELS
Этот уровень используется для более точного управления уровнями журналирования.
log_granular_levels: 'salt': 'info' 'salt.modules': ‘trace'
Здесь, основная солевая библиотека на уровне ‘info’ устанавливает salt.modules для регистрации на уровне трассировки.
Внешний обработчик журналирования
Солт использует LogStash и Sentry для обработки логов. Давайте разберемся об этом подробно в этой главе.
LOGSTASH Handler
LogStash является открытым исходным кодом; защищенный конвейер обработки данных на стороне сервера. Давайте рассмотрим простой обработчик журналирования UDP в Salt, который использует LogStash.
Укажите следующие изменения в мастер-файле Salt —
logstash_udp_handler: host: 127.0.0.1 port: 9999 version: 1 msg_type: logstash
Затем добавьте изменения в файл конфигурации Logstash —
input { udp { port ⇒ 9999 codec ⇒ json } }
Здесь UDP — это ввод, который должен иметь формат json_event , который мы отправляем по проводам.
SENTRY Logging Handler
Sentry — это отслеживание ошибок в реальном времени в производственных развертываниях и информация для воспроизведения и устранения сбоев. Конфигурация по умолчанию в мастер-файле определяется ниже.
sentry_handler: dsn: https://pub-key:[email protected]/app-id log_level: debug
Здесь уровень регистрации по умолчанию для обработчика sentry — ERROR, но мы определили уровень отладки log_level в ключе конфигурации sentry_handler.
SaltStack — соль через SSH
Salt выполняет команды в удаленной системе с помощью salt-minion . Это нормальное поведение. В некоторых случаях удаленная система может быть доступна только по протоколу SSH. Для этих сценариев Salt предоставляет возможность подключиться к удаленной системе только по протоколу SSH и выполнить команду через уровень SSH.
Соль SSH очень проста в настройке. Единственная необходимая конфигурация — указать данные удаленной системы в специальном файле, который называется файлом реестра . Этот файл обычно находится в / etc / salt / roster . В реестре будет вся информация об удаленной системе и о том, как мы можем к ней подключиться. Как только файлы реестра настроены, все команды Salt выполняются с использованием salt-ssh вместо команды salt.
Реестр файлов
Система Roster разработана специально для Salt SSH. Это разработано как подключаемая система. Единственная цель системы реестров — сбор информации об удаленной системе. Файл реестра — это файл конфигурации на основе YAML, содержащий информацию об удаленной системе в качестве целей . Эти цели представляют собой специальную структуру данных с предопределенным набором атрибутов. Файл реестра содержит одну или несколько целей, и каждая цель идентифицируется идентификатором соли .
Основная структура файла реестра выглядит следующим образом:
<Salt ID>: host: <host name> user: <user name> passwd: <password of the user>
Все остальные атрибуты, поддерживаемые файлом реестра, являются необязательными. Они заключаются в следующем —
-
порт — номер порта SSH.
-
sudo — запускать ли команду через sudo.
-
sudo_user — имя пользователя sudo.
-
tty — true, если sudo включено.
-
priv — закрытый ключ.
-
timeout — тайм-аут для соединения SSH.
-
minion_opts — словарь опций миньонов .
-
thin_dir — каталог хранения целевой системы для солевых компонентов.
-
cmd_umask — umask для использования для команды salt-call.
порт — номер порта SSH.
sudo — запускать ли команду через sudo.
sudo_user — имя пользователя sudo.
tty — true, если sudo включено.
priv — закрытый ключ.
timeout — тайм-аут для соединения SSH.
minion_opts — словарь опций миньонов .
thin_dir — каталог хранения целевой системы для солевых компонентов.
cmd_umask — umask для использования для команды salt-call.
Пример файла реестра выглядит следующим образом:
web: host: 192.168.2.1 user: webuser passwd: secret sudo: True db: host: 192.168.2.2
Развертывание ключей SSH
Salt SSH сгенерирует пары открытого и закрытого ключей по умолчанию для входа в систему SSH. Путь по умолчанию будет /etc/salt/pki/master/ssh/salt-ssh.rsa. Этот ключ может быть развернут в удаленной системе с помощью команды ssh-copy-id, как показано ниже.
ssh-copy-id -i /etc/salt/pki/master/ssh/salt-ssh.rsa.pub [email protected]
Выполнить команду
Выполнить команду salt так же просто, как изменить команду salt cli на salt-ssh, как показано ниже.
salt-ssh '*' test.ping
Команда Raw Shell
Salt SSH предоставляет опцию (-r) для выполнения необработанной команды в удаленной системе, минуя солт-модуль и функции.
salt-ssh '*' -r 'ls'
Таргетинг с помощью соли SSH
Ориентация на удаленную систему в Salt SSH поддерживает только глобальные и регулярные выражения. Поскольку Salt SSH является отдельным модулем, на данный момент он предоставляет только ограниченные возможности и предоставит больше возможностей в ближайшем будущем.
SaltStack — соль для облачной инфраструктуры
Salt предоставляет отдельный модуль Salt Cloud для предоставления виртуальных машин различных облачных провайдеров, таких как Amazon AWS, Google Compute и т. Д. Salt Cloud — это универсальный интерфейс для настройки и управления виртуальными машинами различных облачных провайдеров.
-
Cloud Config — Основной файл конфигурации для Salt Cloud — это / etc / salt / cloud, и он применяется ко всем виртуальным машинам. Основной файл конфигурации называется Cloud Config .
-
Облачные провайдеры. Для таргетинга на конкретных облачных провайдеров мы можем использовать определенный файл конфигурации, который находится в /etc/salt/cloud.providers.d/*.conf, они называются облачными провайдерами .
-
Облачные профили. Для нацеливания на конкретную ВМ мы также можем использовать специальный файл конфигурации, который применяется только к этой конкретной ВМ и расположен в /etc/salt/cloud.profiles.d/*.conf, они называются облачными. Профили
Cloud Config — Основной файл конфигурации для Salt Cloud — это / etc / salt / cloud, и он применяется ко всем виртуальным машинам. Основной файл конфигурации называется Cloud Config .
Облачные провайдеры. Для таргетинга на конкретных облачных провайдеров мы можем использовать определенный файл конфигурации, который находится в /etc/salt/cloud.providers.d/*.conf, они называются облачными провайдерами .
Облачные профили. Для нацеливания на конкретную ВМ мы также можем использовать специальный файл конфигурации, который применяется только к этой конкретной ВМ и расположен в /etc/salt/cloud.profiles.d/*.conf, они называются облачными. Профили
Для виртуальной машины сначала применяются настройки в облачной конфигурации , а затем в облачных провайдерах, и, наконец, переопределение выполняется облачными профилями .
Установка Соляного Облака
По умолчанию Соленое Облако встроено в Соль и легко доступно. Если он недоступен, мы можем установить его с помощью команды ниже.
pip install salt-cloud
Поскольку Salt Cloud является отдельным модулем и работает в своем собственном процессе, его можно установить и в систему Salt Minion вместо Salt Master.
Предоставление виртуальной машины
Чтобы подготовить виртуальную машину, нам нужно определить облачного провайдера и облачный профиль. После того, как оба будут созданы, мы можем предоставить новую виртуальную машину для ее использования.
Облачный провайдер
Информация о хосте облака настраивается в файле конфигурации провайдера Cloud. Обычно основная информация, которую необходимо настроить, — это драйвер облака, имя пользователя, пароль, закрытый ключ и т. Д. Давайте создадим нового поставщика облачных услуг, названного my-amazon-cloud .
-
Создайте файл my-amazon-cloud.conf в /etc/salt/cloud.providers.d/
-
Добавьте нового провайдера, используя драйвер ec2 .
Создайте файл my-amazon-cloud.conf в /etc/salt/cloud.providers.d/
Добавьте нового провайдера, используя драйвер ec2 .
my-amazon-cloud: driver: ec2 id: '<AWS_ID>' key: '<AWS_KEY>' private_key: /path/to/privatekey.pem keyname: <name of the key> securitygroup: default minion: master: <master server>
Salt предоставляет драйверы для различных облачных хостов из коробки, таких как GoGrid, HP Cloud, Google Compute Engine (GCE), Amazon AWS, Joyent, Linode, OpenNebula, ProfitBricks, Proxmox, Saltify, VexxHost, VMWare и т. Д.
После настройки облачных провайдеров мы можем запросить доступное местоположение провайдера, доступные образы компьютеров и их различные размеры.
salt-cloud --list-location my-amazon-cloud salt-cloud --list-images my-amazon-cloud salt-cloud --list-sizes my-amazon-cloud
Облачный профиль
Облачный профиль определяет образ и размер виртуальной машины. Его можно настроить в — /etc/salt/cloud.profiles.d/. Давайте создадим простой профиль simple.conf .
aws_micro: provider: my-amazon-cloud image: <image_id> size: <machine_id e.g. t1.micro>
Виртуальная машина
Как только провайдер и профили настроены, мы можем легко предоставить виртуальную машину, используя солт-облако, как показано ниже.
salt-cloud -p aws_micro master minion1 minion2
Где p — имя профиля master, minion1 и minion2 — новые виртуальные машины.
Подробная информация о недавно созданной виртуальной машине может быть получена с помощью следующей команды.
salt-cloud --query
Виртуальные машины могут быть уничтожены с помощью следующей команды —
slat-cloud -d master minion1
Облачная карта
Облачная карта — это специальный формат для создания нескольких виртуальных машин одновременно. Формат файла карты — указать профиль, а затем добавить список виртуальных машин под ним.
Пример файла карты выглядит следующим образом:
micro: - web1 - web2 large: - db1 - db2
Файл карты можно передать в качестве аргумента команде salt-cloud для создания виртуальной машины следующим образом:
salt-cloud -m /path/to/mapfile
SaltStack — Соли Прокси Миньонов
Существует множество устройств, таких как маршрутизатор, сетевое оборудование и т. Д., Имеющих собственную ОС, ограниченную память и соображения высокой безопасности. В этих устройствах мы не смогли установить стандартный соляной миньон и впоследствии не смогли управлять этими системами. Однако Salt предлагает инновационную технологию для преодоления этого ограничения.
Salt имеет отдельный модуль, Salon Proxy Minion, который управляет удаленной системой с помощью службы REST, работающей в удаленной системе. Эта служба REST является веб-службой на основе HTTP, написанной с использованием концепции репрезентативной передачи состояния (REST), и они просты в реализации и использовании.
Каждое устройство будет иметь свой собственный SDK и среду разработки для написания сложных приложений. Солт ожидает, что служба REST будет разработана в устройстве согласно спецификации интерфейса Солт. Солт также предоставляет модуль Python для написания веб-службы REST. Если устройство поддерживает python, тогда будет легко разработать веб-сервис REST.
Как только веб-служба REST разработана и развернута в удаленной системе, Salt можно настроить для управления удаленным устройством с помощью веб-службы REST вместо соли-миньона.
Рабочий пример
Давайте изучим концепцию соляных миньонов, используя живую рабочую среду. Для живого окружения мы выбрали систему Linux как для главного, так и для прокси-миньонов. Мы собираемся управлять системой, используя веб-сервис REST вместо соли-миньона.
Установите и настройте REST Web Service
Salt предоставляет пример реализации веб-службы REST, который в своем модуле contrib называется proxyminion_rest_example. Давайте установим образец веб-сервиса.
-
Установите «бутылку» с помощью пипса. Команда bottle — это веб-фреймворк Python для разработки веб-приложения.
Установите «бутылку» с помощью пипса. Команда bottle — это веб-фреймворк Python для разработки веб-приложения.
pip install bottle = 0.12.8
-
Загрузите проект salttack / salt-contrib from github. В противном случае клонируйте проект с помощью следующей команды.
Загрузите проект salttack / salt-contrib from github. В противном случае клонируйте проект с помощью следующей команды.
git clone https://github.com/saltstack/salt-contrib
-
Откройте терминал и перейдите в каталог salt-contrib .
-
Этот каталог солей-вкладов будет иметь папку proxyminion_rest_example . В этой папке содержится пример реализации веб-службы REST. Перейдите в папку proxyminion_rest_example.
-
Выполните следующую команду, чтобы запустить веб-службу REST.
Откройте терминал и перейдите в каталог salt-contrib .
Этот каталог солей-вкладов будет иметь папку proxyminion_rest_example . В этой папке содержится пример реализации веб-службы REST. Перейдите в папку proxyminion_rest_example.
Выполните следующую команду, чтобы запустить веб-службу REST.
python rest.py --address <your ip address> --port 8000
-
Откройте браузер и загрузите http: // «ваш ip адрес»: 8000. Это покажет страницу по умолчанию со службами и пакетами, как показано на скриншоте ниже.
Откройте браузер и загрузите http: // «ваш ip адрес»: 8000. Это покажет страницу по умолчанию со службами и пакетами, как показано на скриншоте ниже.
Теперь мы настроили веб-службу REST, и она проверит, как настроить солевой прокси-сервер для запроса веб-службы REST и управления системой.
Настроить Salt-Proxy
Чтобы настроить Salt-Proxy, мы должны выполнить шаги, указанные ниже.
-
Мы должны указать главный узел для соли-прокси. Отредактируйте расположение файла конфигурации прокси, которое находится в / etc / salt / proxy, и введите следующий код.
Мы должны указать главный узел для соли-прокси. Отредактируйте расположение файла конфигурации прокси, которое находится в / etc / salt / proxy, и введите следующий код.
master: <your ip address>
-
Измените / создайте файл базового уровня в /srv/pillar/top.sls, как показано в следующем блоке кода.
Измените / создайте файл базового уровня в /srv/pillar/top.sls, как показано в следующем блоке кода.
base: 'p8000': - p8000
-
Добавьте новый файл pillar p8000.sls в / srv / pillar, как показано в блоке кода ниже.
Добавьте новый файл pillar p8000.sls в / srv / pillar, как показано в блоке кода ниже.
proxy: proxytype: rest_sample url: http://<your ip address>:8000
-
Запустите salt-proxy в режиме отладки, используя следующую команду.
Запустите salt-proxy в режиме отладки, используя следующую команду.
salt-proxy --proxyid = p8000 -l debug
-
Как и соль-миньон, примите солт-прокси ключ, как показано ниже.
Как и соль-миньон, примите солт-прокси ключ, как показано ниже.
salt-key -y -a p8000 The following keys are going to be accepted: Unaccepted Keys: p8000 Key for minion p8000 accepted.
Соль
Теперь запустите команду salt и вызовите функцию ping.test, как показано ниже.
salt p8000 test.ping
Мы можем запустить любую функцию, поддерживаемую веб-сервисом REST, используя salt , который похож на salt-minion .
Например, информация о зерне может быть получена с помощью следующей команды.
salt p8000 grains.items
SaltStack — система событий
Система событий в Salt является локальным интерфейсом ZeroMQ PUB, который запускает события соли. Это выполняется следующими компонентами.
-
Сокеты событий — используется для публикации событий.
-
Библиотека событий — используется для прослушивания событий и отправки событий в солт-систему.
Сокеты событий — используется для публикации событий.
Библиотека событий — используется для прослушивания событий и отправки событий в солт-систему.
Соль Мастер Событие
Мастер соли предоставляет различные типы событий, которые подробно описаны ниже —
- События аутентификации
- Начать события
- Ключевые события
- Работа события
- Бегун События
- События присутствия
- Облачные события
Давайте подробно рассмотрим каждый из типов событий.
События аутентификации
Эти события аутентификации запускаются, когда миньон выполняет проверку аутентификации с мастером. Он представлен солью / авт.
Начать события
Стартовые события запускаются всякий раз, когда миньон соединяется с Мастером соли, и он представлен солью / миньоном // start.
Ключевые события
События Key запускаются, когда мастер соли принимает и отклоняет ключи на миньоне соли. Вы можете получить доступ к этому событию, используя команду Salt Key.
Работа События
Событие Job запускается всякий раз, когда начинается новая работа. Он представлен солью / заданием // новым . Здесь, JID — ИД работы новый — новая работа
Бегун События
Когда бегун начинает выполнение, запускается событие бегуна. Он представлен как соль / бег // новый.
События присутствия
Когда миньоны подключены или вновь подключены или отключены, это событие вызывается с регулярным интервалом. Он представлен — соль / присутствие / настоящее и соль / присутствие / изменение . Вот,
-
Присутствует — означает, что мастер соли в настоящее время подключен к списку миньонов.
-
Изменить — используется для обнаружения нового миньона — подключен или отключен.
Присутствует — означает, что мастер соли в настоящее время подключен к списку миньонов.
Изменить — используется для обнаружения нового миньона — подключен или отключен.
Облачные события
События соленого облака запускаются на виртуальной машине. Если нет других событий, это не выполняется на миньоне. Вы можете получить к нему доступ, используя — salt / cloud // creation . Он запускается, когда облако соли запускает процесс выполнения виртуальной машины.
Инструменты для проведения мероприятий
Теперь давайте рассмотрим инструменты и сценарии событий. Вы можете получить доступ к шине событий, используя CLI. Доступ к нему осуществляется с помощью следующей команды.
salt-run state.event pretty = True
Здесь бегун предназначен для взаимодействия с шиной событий из внешних инструментов и сценариев оболочки. Доступ к шине событий Salt можно получить удаленно через REST API . Он представлен — (пример URL).
curl -SsNk https://salt-api.example.com:8000/events?token = 05A3.
Точно так же вы можете получить доступ к событиям из скриптов Python.
SaltStack — оркестровка
В общем, оркестровка — это автоматизированная координация и организация систем. Orchestrate runner используется для выполнения оркестровки в SaltStack.
Оркестр бегун
Orchestrate Runner предлагает все функциональные возможности OverState (предыдущей системы). Первоначально он называется бегун state.sls . Этот оркестровый бегун используется для обобщения системы состояний соли в контексте мастера соли.
Функции state.sls и state.highstate выполняются для каждого миньона Salt, но бегун state.orchestrate выполняется для мастера. Бегун state.orchestrate позволяет полностью управлять всей инфраструктурой. Давайте поймем, как пройти простой процесс выполнения.
Простое исполнение
Команда Orchestrate Runner такая же, как функция state.sls , но вы можете выполнить ее с помощью «salt-run» вместо salt.
Предположим, что у вас есть файл sample.sls, расположенный по адресу /srv/salt/orch/samples.sls . Добавьте следующий код в этот файл.
sample.sls
install_nginx: salt.state: - tgt: 'web*' - sls: - nginx
Следующая команда используется для запуска на мастере, и она будет применять состояния, определенные в этом файле.
salt-run state.orchestrate orch.sample
Это даст следующий результат —
saltmaster.local_master: ---------- ID: install_nginx Function: salt.state Result: True Comment: States ran successfully. Started: 11:54:56.308078 Duration: 63.401 ms Changes: Summary for saltmaster.local_master ------------ Succeeded: 1 Failed: 0 ------------ Total states run: 1 Total run time: 63.401 ms root@saltmaster:/home/vagrant#
Здесь, согласно текущей версии, функция бегуна была переименована в state.orchestrate . Это будет полезно во избежание путаницы с функцией выполнения state.sls, но необходимо использовать предыдущие версии state.sls .
Выполнить функцию
Чтобы выполнить функцию, вы должны использовать salt.function . Рассмотрим файл data.sls, расположенный в /srv/salt/orch/data.sls . Теперь добавьте следующие изменения в этот файл.
data.sls
cmd.run: salt.function: - tgt: '*' - arg: - rm -rf /tmp/data
Следующая команда используется для выполнения функции Salt.
root@saltmaster:/home/vagrant# salt-run state.orchestrate orch.data
Это даст следующий результат —
saltmaster.local_master: ---------- ID: cmd.run Function: salt.function Result: True Comment: Function ran successfully. Function cmd.run ran on minion1, minion2. Started: 12:14:54.791635 Duration: 234.615 ms Changes: minion1: minion2: Summary for saltmaster.local_master ------------ Succeeded: 1 (changed = 1) Failed: 0 ------------ Total states run: 1 Total run time: 234.615 ms
SaltStack — менеджер пакетов соли
Формулы соли упаковываются и распространяются среди мастеров соли с помощью менеджера пакетов. На эту концепцию повлияли упаковочные системы RPM , Yum и Pacman . Состояние соли, столб, шаблоны файлов и другие файлы используются формулой, а затем упаковываются в один файл.
После создания пакета формул он копируется в систему репозитория, чтобы использовать его для мастеров соли. Прежде чем перейти к менеджеру пакетов, давайте посмотрим, как установить пакет «nginx» с помощью базовой команды Salt.
Следующий синтаксис используется для установки пакета «nginx».
root@saltmaster:/home/vagrant# salt '*' pkg.install nginx
Здесь для установки пакета используется команда pkg.install nginx . После выполнения вы увидите следующий ответ.
Это даст следующий результат —
minion2: ---------- httpd: ---------- new: 1 old: httpd-cgi: ---------- new: 1 old: libxslt1.1: ---------- new: 1.1.28-2build1 old: nginx: ---------- new: 1.4.6-1ubuntu3.7 old: nginx-common: ---------- new: 1.4.6-1ubuntu3.7 old: nginx-core: ---------- new: 1.4.6-1ubuntu3.7 old: minion1: ---------- httpd: ---------- new: 1 old: httpd-cgi: ---------- new: 1 old: libxslt1.1: ---------- new: 1.1.28-2build1 old: nginx: ---------- new: 1.4.6-1ubuntu3.7 old: nginx-common: ---------- new: 1.4.6-1ubuntu3.7 old: nginx-core: ---------- new: 1.4.6-1ubuntu3.7 old:
Теперь вы установили пакет. Чтобы запустить службы для этого пакета, используйте команду, приведенную ниже.
root@saltmaster:/home/vagrant# salt '*' service.start nginx
После выполнения этой команды результат выглядит так, как показано в блоке кода ниже.
minion1: True minion2: True
Поэтому мы установили и запустили службы для пакета «nginx» с помощью базовой команды. Давайте теперь обсудим, как собирать и устанавливать пакеты в менеджере пакетов Salt.
Строительные пакеты
Пакеты могут быть собраны в любой системе, где вы можете установить Salt. Есть три типа пакетов, и они следующие.
- формула
- Реактор
- конф
Давайте теперь поймем, как создавать пакеты, используя Fomula File.
Файл формулы
Большинство файлов из пакета по умолчанию находятся в каталоге — / srv / spm / salt /, но файл pillar можно поместить в каталог — / srv / spm / pillar /. Файл формулы описывает пакет.
пример
name: apache os: RedHat os_family: RedHat version: 201607 release: 2 summary: Formula for installing Apache description: Formula for installing Apache
Вот,
-
Имя — название пакета. Здесь имя пакета — apache .
-
os — используется для определения того, какие операционные системы могут поддерживать этот пакет.
-
os_family — используется для определения того, какие семейства операционных систем могут поддерживать этот пакет.
-
Версия — версия пакета. Указывается в формате ГГГГММ.
-
Выпуск — это поле относится в основном к выпуску версии.
-
Краткое содержание — краткое описание пакета.
-
Описание — более подробное описание пакета.
Имя — название пакета. Здесь имя пакета — apache .
os — используется для определения того, какие операционные системы могут поддерживать этот пакет.
os_family — используется для определения того, какие семейства операционных систем могут поддерживать этот пакет.
Версия — версия пакета. Указывается в формате ГГГГММ.
Выпуск — это поле относится в основном к выпуску версии.
Краткое содержание — краткое описание пакета.
Описание — более подробное описание пакета.
РЕАКТОР
Файлы реактора находятся в каталоге / srv / spm / реактор / .
CONF
Файлы в пакете этого типа являются файлами конфигурации для Salt, которые обычно находятся в каталоге / etc / salt / . Файлы конфигурации для пакетов, отличных от Salt, могут и должны обрабатываться с помощью Salt State (используя пакетный тип формулы).
Давайте продолжим со следующими шагами для создания пакета.
-
Создайте файл FORMULA и поместите его в корень папки пакета.
-
Соберите файлы формул в папке в системе сборки.
-
Запустите spm build . Пакет собран и помещен в папку / srv / spm_build. Следующая команда используется для сборки пакета.
Создайте файл FORMULA и поместите его в корень папки пакета.
Соберите файлы формул в папке в системе сборки.
Запустите spm build . Пакет собран и помещен в папку / srv / spm_build. Следующая команда используется для сборки пакета.
spm build /path/to/salt-packages-source/formula
-
Теперь скопируйте файл .spm в папку в системе хранилища.
-
Вы можете открыть общий доступ к папке srv / spm_build в сети или скопировать файлы на свой FTP или веб-сервер .
-
Сгенерируйте метаданные репо, используя следующую команду.
Теперь скопируйте файл .spm в папку в системе хранилища.
Вы можете открыть общий доступ к папке srv / spm_build в сети или скопировать файлы на свой FTP или веб-сервер .
Сгенерируйте метаданные репо, используя следующую команду.
spm create_repo /srv/spm_build
Установка пакетов
В этом разделе рассказывается об установке пакетов менеджера пакетов Salt.
Настроить удаленные репозитории
Чтобы настроить удаленные репозитории, Salt Master должен знать, где находится репозиторий в процессе настройки.
Файлы находятся в каталоге /etc/salt/spm.repos.d/spm.repo .
пример
file_repository: url: https://spm.example.com/
Здесь файл содержит имя хранилища и ссылку на хранилище. Вы также можете использовать http, https, ftp или путь к файлу. Чтобы использовать путь к файлу, вы можете получить к нему доступ с помощью URL: file: /// srv / spm_build.
Обновить метаданные
После того, как хранилище сконфигурировано на главном сервере Salt, метаданные хранилища загружаются с помощью приведенной ниже команды.
spm update_repo
Обновить корни файлов
Пакеты SPM находятся в каталоге srv / spm / salt. Добавьте следующий путь к корням файла на мастере соли,
file_roots: base: 1. /srv/salt 2. /srv/spm/salt
Теперь перезапустите мастер соли.
Установить пакет Apache
Чтобы установить пакет apache, используйте следующую команду.
spm install apache
Вы также можете установить непосредственно из файла SPM с помощью команды ниже.
spm local install /srv/spm/apache-201607-1.spm
Удаление пакета
Чтобы удалить пакет, например — apache, используйте следующую команду:
spm remove apache
Обратите внимание, что если какие-либо файлы были изменены, они не будут удалены.
SaltStack — Python API
Соль обеспечивает программный доступ ко всем его командам. Соль предоставляет различные модули для каждого раздела системы Соль. Давайте изучим основы Python API и о том, как выполнять основные команды соли в этой главе.
конфигурация
Модуль salt.config используется для доступа к деталям конфигурации Salt.
import salt.config opts = salt.config.client_config('/etc/salt/master')
Здесь client_config читает солевой файл конфигурации и возвращает детали конфигурации в виде словаря.
погрузчик
Модуль salt.loader используется для загрузки в Солт всех модулей, таких как зерна, миньоны и т. Д.
import salt.loader opts = salt.config.minion_config('/etc/salt/master') grains = salt.loader.grains(opts)
Здесь зерна считывают детали зерен в соляной системе и возвращают их.
Клиентский модуль
Модуль salt.client используется для программного выполнения команд salt, salt-call и salt-SSH.
Наиболее важные классы Python следующие:
- salt.client.LocalClient
- salt.client.Caller
- salt.client.ssh.client.SSHClient
Основной функцией, предоставляемой большинством клиентских модулей, является cmd . Эта функция оборачивает параметры CLI и выполняет их, что аналогично командной строке и возвращает результаты в виде структур данных Python.
LocalClient
LocalClient используется для отправки команд от мастера миньонам соли и возврата результатов мастеру.
import salt.client local = salt.client.LocalClient() local.cmd('*', 'test.ping')
Это даст следующий результат —
{'minion1': True, 'minion2': True }
гость
Вызывающая сторона используется для программного вызова соли и возврата результатов.
import salt.client caller = salt.client.Caller() caller.cmd('test.ping')
Это даст следующий результат —
True
SSHClient
SSHCient используется для программного запуска salt-ssh и возврата результатов.
import salt.client.ssh.client ssh = salt.client.ssh.client.SSHClient() ssh.cmd('*', 'test.ping')
Это даст следующий результат —
{'minion1': True, 'minion2': True }
CloudClient
Модуль salt.cloud используется для программного выполнения команд salt-cloud.
client = salt.cloud.CloudClient(path = '/etc/salt/cloud')
Облачный модуль предоставляет функции для создания виртуальных машин (создание), для уничтожения виртуальных машин (уничтожение), создания списка изображений, предоставляемых поставщиком облака (list_images), списка местоположений поставщика облака (list_locations), списка размеров машин поставщика облака (list_sizes), и т.п.
SaltStack — рабочий пример
В этом рабочем примере мы создадим формулу Salt, которая настроит веб-сервер apache вместе с программным обеспечением PHP. Salt — отличный способ выполнять специальные команды, но вам не нужно постоянно настраивать свою инфраструктуру таким образом. Создав набор формул Соли, вы можете надежно воспроизвести любую конфигурацию поверх.
Salt Formulas — это простые текстовые файлы YAML, которые по умолчанию хранятся в Salt Master в / srv / salt / * . Давайте начнем с создания формулы соли для установки веб-сервера Apache и PHP одновременно.
Создайте файл с именем «websetup.sls» в каталоге / srv / salt / и добавьте следующий код.
websetup.sls
websetup: pkg: - installed - pkgs: - apache2 - php5 - php5-mysql
В этом примере обратите внимание на аргумент «- pkgs:». Каждый элемент в списке ниже «- pkgs:» будет передаваться вместе в менеджер пакетов ОС для совместной установки. Когда у вас есть большой список пакетов для установки, это самый эффективный способ их установки.
Примените эту формулу к мастеру соли, используя следующую команду.
root@saltmaster:/home/vagrant# salt 'minion2' state.sls websetup
Теперь вы увидите следующий вывод —
minion2: ---------- ID: websetup Function: pkg.installed Result: True Comment: 3 targeted packages were installed/updated. Started: 01:50:53.978396 Duration: 86738.132 ms Changes: ---------- apache2: ---------- new: 2.4.7-1ubuntu4.13 old: apache2-api-20120211: ---------- new: 1 old: apache2-bin: ---------- new: 2.4.7-1ubuntu4.13 old: apache2-data: ---------- new: 2.4.7-1ubuntu4.13 old: libapache2-mod-php5: ---------- new: 5.5.9+dfsg-1ubuntu4.21 old: libapr1: ---------- new: 1.5.0-1 old: libaprutil1: ---------- new: 1.5.3-1 old: libaprutil1-dbd-sqlite3: ---------- new: 1.5.3-1 old: libaprutil1-ldap: ---------- new: 1.5.3-1 old: php5: ---------- new: 5.5.9+dfsg-1ubuntu4.21 old: php5-cli: ---------- new: 5.5.9+dfsg-1ubuntu4.21 old: php5-common: ---------- new: 5.5.9+dfsg-1ubuntu4.21 old: php5-json: ---------- new: 1.3.2-2build1 old: php5-mhash: ---------- new: 1 old: php5-mysql: ---------- new: 5.5.9+dfsg-1ubuntu4.21 old: php5-readline: ---------- new: 5.5.9+dfsg-1ubuntu4.21 old: phpapi-20121212: ---------- new: 1 old: ssl-cert: ---------- new: 1.0.33 old: Summary for minion2 ------------ Succeeded: 1 (changed = 1) Failed: 0 ------------ Total states run: 1 Total run time: 86.738 s
Теперь вы установили пакеты в minion2 .
Highstate
«Highstate» — это способ для Соли определить, какую из формул соли следует применять к определенному миньону. Выполните «highstate», используя следующую команду.
root@saltmaster:/home/vagrant# salt <targets> state.highstate
top.sls
Когда миньон запрашивает выполнение highstate, как упоминалось ранее, миньон запрашивает top.sls от мастера соли и ищет формулы, которые ему соответствуют. По умолчанию этот файл находится по адресу /srv/salt/top.sls. Давайте добавим нашу формулу в файл top.sls и установим minion2 в качестве цели.
base: '*': - common 'minion2’: - websetup
Теперь выполните высокоуровневый таргетинг minion2, как показано ниже.
root@saltmaster:/home/vagrant# salt 'minion2' state.highstate
После применения вы можете увидеть следующий вывод —
minion2: ---------- ID: common_packages Function: pkg.installed Result: True Comment: All specified packages are already installed Started: 01:55:17.998824 Duration: 461.615 ms Changes: Summary for minion2 ------------ Succeeded: 1 Failed: 0 ------------ Total states run: 1 Total run time: 461.615 ms
Теперь веб-сервер Apache и PHP установлены в minion2. Таким образом, мы должны нацелить миньонов, используя как top.sls, так и highstate, и установить необходимое программное обеспечение с минимальной работой и максимальной гибкостью.