Учебники

SaltStack — Краткое руководство

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 выполняются из командной строки для одного или нескольких миньонов. Он выполняет мониторинг в реальном времени.

  • Формулы — Формулы — это заранее написанные солевые состояния. Они такие же открытые, как и сами солевые состояния, и могут использоваться для таких задач, как установка пакета, настройка и запуск службы, настройка пользователей или разрешений и многие другие общие задачи.

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

  • PillarPillar — это интерфейс, который генерирует и хранит высокочувствительные данные, относящиеся к конкретному миньону, такие как криптографические ключи и пароли. Он хранит данные в паре ключ / значение, и управление данными осуществляется аналогично дереву состояний соли.

  • Top File — Сопоставляет солевые состояния и данные столба с миньонами соли.

  • Бегуны — это модуль, расположенный внутри SaltMaster и выполняющий такие задачи, как статус задания, состояние соединения, чтение данных из внешних API, запрос связанных миньонов соли и многое другое.

  • Returners — возвращает данные от миньонов Salt в другую систему.

  • Реактор — Он отвечает за запуск реакций, когда события происходят в вашей среде SaltStack.

  • SaltCloud — Salt Cloud предоставляет мощный интерфейс для взаимодействия с облачными хостами.

  • SaltSSH — запускать команды Salt через SSH в системах без использования Salt minion.

SaltMaster — SaltMaster — главный демон. SaltMaster используется для отправки команд и настроек Salt-рабам. Один мастер может управлять несколькими мастерами.

SaltMinions — SaltMinion — это рабский демон. Соли миньон получает команды и настройки от SaltMaster.

Выполнение — Модули и команды Adhoc выполняются из командной строки для одного или нескольких миньонов. Он выполняет мониторинг в реальном времени.

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

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

PillarPillar — это интерфейс, который генерирует и хранит высокочувствительные данные, относящиеся к конкретному миньону, такие как криптографические ключи и пароли. Он хранит данные в паре ключ / значение, и управление данными осуществляется аналогично дереву состояний соли.

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:
   - git@github.com:user1/sample.git
   - ssh://user@domain.tld/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 S@192.168.50.*' 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:secret-key@app.getsentry.com/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 user@web.company.com

Выполнить команду

Выполнить команду 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 Web Service

Теперь мы настроили веб-службу 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, и установить необходимое программное обеспечение с минимальной работой и максимальной гибкостью.