SaltStack - Краткое руководство
В этой главе мы изучим основы SaltStack. Возможности удаленного выполнения SaltStack позволяют администраторам запускать команды на разных машинах параллельно с гибкой системой нацеливания. Управление конфигурацией Salt устанавливает модель «главный-миньон» для быстрого, очень простого, гибкого и безопасного приведения компонентов инфраструктуры в соответствие с заданной политикой.
Что такое SaltStack?
Salt - очень мощный фреймворк для автоматизации. Архитектура Salt основана на идее удаленного выполнения команд. Вся сеть построена вокруг некоторого аспекта удаленного выполнения. Это может быть так же просто, как спроситьRemote Web Serverдля отображения статической веб-страницы или столь же сложного, как использование сеанса оболочки для интерактивного выполнения команд удаленному серверу. Salt - это пример одного из наиболее сложных типов удаленного выполнения.
Salt предназначен для того, чтобы пользователи могли явно указывать и отправлять команды нескольким машинам напрямую. Соль основана на идее Мастера, который управляет одним или несколькимиMinions. Команды обычно передаются Мастером целевой группе Миньонов, которые затем выполняют задачи, указанные в командах, а затем возвращают полученные данные обратно Мастеру. Связь между мастером и миньонами происходит черезZeroMQ message bus.
Модули SaltStack взаимодействуют с поддерживаемыми операционными системами миньонов. ВSalt Masterпо умолчанию работает в Linux, но любая операционная система может быть миньоном, и в настоящее время хорошо поддерживаются варианты Windows, VMware vSphere и BSD Unix. Мастер соли и миньоны используют ключи для общения. Когда миньон впервые подключается к мастеру, он автоматически сохраняет ключи на мастере. SaltStack также предлагаетSalt SSH, который обеспечивает «безагентное» управление системами.
Потребность в SaltStack
SaltStack создан для скорости и масштабирования. Вот почему он используется для управления крупными инфраструктурами с десятками тысяч серверов в LinkedIn, WikiMedia и Google.
Представьте, что у вас есть несколько серверов и вы хотите что-то делать с ними. Вам нужно будет войти в каждый из них и выполнять эти действия по одному на каждом из них, а затем вы можете захотеть выполнить сложные вещи, например, установить программное обеспечение, а затем настроить это программное обеспечение на основе определенных критериев.
Предположим, у вас есть десять или даже 100 серверов. Представьте себе, что входить по одному на каждый сервер индивидуально, вводить одни и те же команды на этих 100 машинах, а затем редактировать файлы конфигурации на всех 100 машинах становится очень утомительной задачей. Чтобы решить эти проблемы, вы хотели бы обновить все свои серверы сразу, просто набрав одну команду. SaltStack предоставляет вам точное решение всех подобных проблем.
Особенности SaltStack
SaltStack - это программное обеспечение с открытым исходным кодом для управления конфигурацией и механизм удаленного выполнения. Salt - это инструмент командной строки. Хотя управление конфигурацией SaltStack написано на Python, оно не зависит от языка и является простым. Платформа Salt использует модель push для выполнения команд по протоколу SSH. Система конфигурации по умолчанию:YAML и Jinja templates. Соль в первую очередь конкурирует сPuppet, Chef и Ansible.
По сравнению с другими конкурирующими инструментами Salt предоставляет множество функций. Некоторые из этих важных функций перечислены ниже.
Fault tolerance- Миньоны соли могут подключаться к нескольким мастерам одновременно, настроив параметр конфигурации master как YAML-список всех доступных мастеров. Любой мастер может направлять команды в инфраструктуру Salt.
Flexible- Подход к управлению Salt очень гибкий. Он может быть реализован в соответствии с наиболее популярными моделями управления системами, такими как агент и сервер, только агент, только сервер или все вышеперечисленные в одной среде.
Scalable Configuration Management - SaltStack рассчитан на десять тысяч миньонов на одного мастера.
Parallel Execution model - Salt может включать команды для параллельного выполнения удаленных систем.
Python API - Salt предоставляет простой интерфейс программирования, он был разработан как модульный и легко расширяемый, чтобы упростить адаптацию к различным приложениям.
Easy to Setup - Salt прост в настройке и предоставляет единую архитектуру удаленного выполнения, которая может управлять разнообразными требованиями любого количества серверов.
Language Agnostic - Конфигурационные файлы состояния соли, механизм шаблонов или тип файла поддерживают любой язык.
Преимущества SaltStack
Будучи простой, а также многофункциональной системой, Salt предоставляет множество преимуществ, которые можно резюмировать следующим образом:
Robust - Salt - это мощный и надежный фреймворк для управления конфигурациями, который работает с десятками тысяч систем.
Authentication - Salt управляет простыми парами ключей SSH для аутентификации.
Secure - Salt управляет безопасными данными с помощью зашифрованного протокола.
Fast - Salt - это очень быстрая и легкая коммуникационная шина, служащая основой для механизма удаленного выполнения.
Virtual Machine Automation - Возможности Salt Virt Cloud Controller используются для автоматизации.
Infrastructure as data, not code - Salt обеспечивает простое развертывание, управление конфигурацией на основе модели и структуру выполнения команд.
Введение в ZeroMQ
Salt основан на ZeroMQбиблиотека, и это встраиваемая сетевая библиотека. Это легкая и быстрая библиотека обмена сообщениями. Базовая реализация находится вC/C++ и собственные реализации для нескольких языков, включая Java и .Net доступен.
ZeroMQ - это одноранговая обработка сообщений без брокера. ZeroMQ позволяет легко проектировать сложную систему связи.
ZeroMQ имеет следующие пять основных шаблонов:
Synchronous Request/Response - Используется для отправки запроса и получения последующих ответов на каждый отправленный.
Asynchronous Request/Response- Запрашивающая сторона инициирует диалог, отправляя сообщение запроса, и ожидает сообщения ответа. Провайдер ожидает входящих сообщений запроса и отвечает сообщениями ответа.
Publish/Subscribe - Используется для распространения данных от одного процесса (например, издателя) нескольким получателям (например, подписчикам).
Push/Pull - Используется для распределения данных по подключенным узлам.
Exclusive Pair - Используется для соединения двух сверстников вместе, образуя пару.
ZeroMQ - это очень гибкий сетевой инструмент для обмена сообщениями между кластерами, облаком и другими мультисистемными средами. ZeroMQ - этоdefault transport library представлен в SaltStack.
Архитектура SaltStack предназначена для работы с любым количеством серверов, от систем локальной сети до других развертываний в разных центрах обработки данных. Архитектура - это простая модель сервер / клиент с необходимой функциональностью, встроенной в единый набор демонов.
Взгляните на следующую иллюстрацию. Он показывает различные компоненты архитектуры SaltStack.
SaltMaster- SaltMaster - главный демон. SaltMaster используется для отправки команд и конфигураций подчиненным устройствам Salt. Один мастер может управлять несколькими мастерами.
SaltMinions- SaltMinion - демон рабов. Миньон Salt получает команды и конфигурацию от SaltMaster.
Execution- Модули и специальные команды, выполняемые из командной строки против одного или нескольких миньонов. Он выполняет мониторинг в реальном времени.
Formulas- Формулы - это заранее записанные состояния соли. Они так же открыты, как и сами состояния соли, и могут использоваться для таких задач, как установка пакета, настройка и запуск службы, настройка пользователей или разрешений и многих других общих задач.
Grains- Grains - это интерфейс, который предоставляет информацию, специфичную для миньона. Информация, доступная через интерфейс гранул, статична. Зерна загружаются при запуске миньона Salt Это означает, что информация в зернах неизменна. Следовательно, зернистая информация может относиться к работающему ядру или операционной системе. Он нечувствителен к регистру.
Pillar- Столб - это интерфейс, который генерирует и хранит высокочувствительные данные, относящиеся к конкретному миньону, такие как криптографические ключи и пароли. Он хранит данные в паре ключ / значение, и этими данными управляют так же, как и в дереве состояний соли.
Top File - Соответствует состояниям соли и данным столбов миньонам соли.
Runners - Это модуль, расположенный внутри SaltMaster, который выполняет такие задачи, как состояние задания, состояние подключения, чтение данных из внешних API, запрос подключенных соляных миньонов и многое другое.
Returners - Возвращает данные от миньонов Salt в другую систему.
Reactor - Он отвечает за запуск реакций при возникновении событий в вашей среде SaltStack.
SaltCloud - Salt Cloud предоставляет мощный интерфейс для взаимодействия с облачными хостами.
SaltSSH - Запускайте команды Salt через SSH в системах без использования Salt minion.
В следующей главе мы подробно узнаем о различных конкурентах 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 - Python
Puppet - Рубин
Chef - Ruby и его CLI используют DSL на основе Ruby
Ansible - Python
Поддерживаемый язык
SaltStack - Любой язык
Puppet - Рубин
Chef - Ruby и его CLI используют DSL на основе Ruby
Ansible - Любой язык
Веб-интерфейс
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- 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- Бесплатная версия с открытым исходным кодом; 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 и т. Д.
Перед тем, как перейти к установке, вам необходимо выполнить следующие требования:
Сервер Linux (последний сервер Ubuntu).
sudo или же root access к этому серверу.
Установите все обновления, используя следующую команду -
sudo apt-get update
Установить SaltMaster
Установите SaltMaster из репозитория с помощью следующей команды apt-get.
sudo apt-get install salt-master
Установить Salt Minion
Установите миньон Salt из репозитория с помощью следующей команды apt-get.
sudo apt-get install salt-minion
Установить синдикат Salt
Установите синдикат Salt из репозитория с помощью следующей команды 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>
После обновления файла конфигурации перезапустите мастер Salt, используя следующую команду.
sudo service salt-master restart
Конфигурация миньона
Настроить Salt Minion очень просто. По умолчанию Salt Minion будет пытаться подключиться к DNS-имени «salt»; если Миньон может правильно разрешить это имя, настройка не требуется. Переопределите директиву master в файле конфигурации миньона, который обычно/etc/salt/minion, как показано в коде ниже -
#master: salt
master: <local ip address>
После обновления файла конфигурации перезапустите миньона Salt, используя команду ниже.
sudo service salt-minion restart
Ключевой менеджмент
Использование соли AES Encryptionдля всего общения между Мастером и Миньоном. Связь между Мастером и Миньоном аутентифицируется с помощью доверенных принятых ключей.
salt-key -L
Это приведет к следующему output -
Accepted Keys:
Denied Keys:
Unaccepted Keys:
<local system name>
Rejected Keys:
Подтвердите все ключи, выполнив команду ниже.
sudo salt-key -A
Это приведет к следующему output -
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 listing команда
salt-key -L
Это приведет к следующему output -
Accepted Keys:
<local system name>
Denied Keys:
Unaccepted Keys:
Rejected Keys:
Отправка команд
Связь между Мастером и Миньоном должна быть проверена с помощью команды test.ping.
sudo salt '*' test.ping
Это приведет к следующему output -
<local system name>
True
Здесь "*" относится ко всем миньонам. Поскольку у нас есть только один миньон - test.ping, он выполняетping команда и возвращает, успешен ли эхо-запрос.
В этой главе мы создадим простую среду SaltStack, одного мастера соли и двух миньонов соли. Эта среда поможет нам изучить концепцию соли в следующих главах.
Давайте придерживаться следующих шагов для создания среды SaltStack.
Установите среду VirtualBox
VirtualBox - это кроссплатформенное приложение для виртуализации. VirtualBox позволяет запускать более одной операционной системы одновременно. VirtualBox работает в Windows, Linux, Macintosh и Solaris. Он размещает и поддерживает большое количествоGuest Operating Systems.
Вы можете скачать и установить VirtualBox, перейдя по следующей ссылке - https://www.virtualbox.org/wiki/Downloads
Мы создадим три виртуальные машины и запустим их с помощью VirtualBox.
Установить Vagrant
Vagrant предоставляет простые в настройке, воспроизводимые и портативные рабочие среды.
Вы можете скачать и установить Vagrant, перейдя по следующей ссылке - https://www.vagrantup.com
После успешной установки Vagrant вам необходимо его настроить. Создайте один файл с именемVagrantfile в папке и опишите тип машины и ее свойства.
Run Vagrant - Чтобы запустить Vagrant, выполните следующую команду -
vagrant up
После того, как вы запустите vagrant up, 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
Войдите в Salt master, используя следующую команду -
vagrant ssh master
Теперь перейдите к пользователю root, используя команду ниже -
sudo su
Теперь мы успешно подключились к Salt master.
Давайте теперь рассмотрим некоторые из основных команд в SaltStack.
Перечислите все ключи
Следующая команда предназначена для проверки соединений миньонов Salt и просмотра того, принято ли соединение, отклонено или ожидает ответа.
salt-key —list-all
Это приведет к следующему output -
Accepted Keys:
minion1
minion2
Denied Keys:
Unaccepted Keys:
Rejected Keys:
Проверить соленые миньоны
Теперь, когда мы приняли все ключи, вы можете отправить команду от мастера соли, чтобы проверить, слушают ли миньоны соли или нет,
salt '*' test.ping
Это приведет к следующему output -
minion1:
True
minion2:
True
Из приведенного выше результата перечислите миньона 1 и миньона 2, что означает, что миньоны слушают правильно, в противном случае миньоны теперь могут правильно реагировать.
Система контроля доступа предоставляет пользователю возможность группы выполнить задачу с разрешениями. Система управления доступом Salt используется для настройки доступа к неадминистративным интерфейсам управления. Вы можете применить этот процесс ко всем системам. Этот элемент управления помогает пользователям без прав администратора выполнять команды Salt.
Солевые интерфейсы бывают следующих трех типов -
- Система ACL издателя
- Внешняя система аутентификации
- Одноранговая система
Давайте разберемся, подробно рассмотрим каждый из этих интерфейсов.
Система ACL издателя
Система ACL издателя позволяет пользователям, кроме root, выполнять команды Salt на миньонах от мастера. Система ACL издателя настраивается в главном файле конфигурации черезpublisher_aclвариант конфигурации. Это определяется следующим образом -
publisher_acl:
user1:
- .*
user2:
- web*:
- test.*
- pkg.*
Вот,
user1 разрешено выполнять что угодно.
user2 разрешено использовать test и pkg, но только для миньонов «паутины *».
Внешняя система аутентификации
В external auth system используется для предоставления доступа для выполнения команд соли на определенных миньонах через внешнюю систему авторизации, например PAM, LDAPи т. д. Этот файл конфигурации определяется в главном файле, как описано ниже.
external_auth:
pam:
user1:
- 'web*':
- test.*
- network.*
user2:
- .*
Вот,
user1 разрешено выполнять функции в test и network modules на миньонов, которые соответствуют web* цель.
user2 разрешено выполнять все функции.
Включить внешнюю систему аутентификации в команде
Сервер Salt предоставляет параметр «–a» для включения внешней аутентификации.
salt -a pam web\* test.ping
Здесь -a pamопция используется для включения внешней аутентификации PAM. Salt Server будет запрашивать данные аутентификации всякий раз, когда мы выполняем команду. Чтобы запретить Salt Server запрашивать данные аутентификации только в первый раз, мы можем использовать опцию T. Этот-T option кэширует данные аутентификации на следующие 12 часов (настройка по умолчанию) и использует их для аутентификации пользователей.
salt -T -a pam web\* test.ping
Одноранговая система
Миньоны соли могут передавать команды через одноранговый интерфейс. Одноранговый интерфейс настраивается через главный файл конфигурации, чтобы позволить миньонам отправлять команды от мастера, используяpeer раздел конфигурации или позволить миньонам запускать бегунов от мастера, используя 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
Salt имеет возможность высокоскоростной связи с большим количеством систем. Такой подход помогает Salt создать мощную многозадачную систему. Salt может выполнять задания в нескольких системах, поэтому Salt использует технику управления заданиями для управления каждым заданием, выполняемым во всех системах. В этой главе подробно рассказывается об управлении заданиями.
Что такое Job ID?
У соли есть кеш-каталог, cachedir. Внутри него каталог, который поддерживают миньоны, называетсяprocкаталог. Он находится в следующем каталоге / var / cache / salt / proc.
Каталог proc используется для хранения всех файлов. Когда эти файлы выполняются, им присваивается уникальный идентификатор задания. Этот идентификатор задания помогает идентифицировать текущие выполняемые задания на миньоне и позволяет искать задания.
САЛТУТИЛ Модуль
В Salt представлен новый модуль, который называется процессом управления заданиями Saltutil. Этот модуль содержит различные функции для управления заданиями. Эти функции используются для управления заданиями на уровне миньонов. Функции кратко описаны ниже:
running - Возвращает все данные о запущенных заданиях, которые находятся в каталоге proc.
find_job - Возвращает конкретные данные о задании на основе идентификатора задания.
signal_job - Позволяет заданному идентификатору задания (jid) отправлять сигнал.
term_job - Посылает сигнал о завершении указанного задания.
kill_job - Посылает сигнал уничтожения для указанного задания.
Бегущий по вакансиям
Средство выполнения заданий содержит функции, упрощающие и упрощающие просмотр данных. У него разные функции. Давайте подробно обсудим каждую из этих функций.
АКТИВНАЯ функция
Активная функция используется для определения того, какие задания все еще выполняются, и проверки того, какие системы выполнили задание, а какие системы еще ждут. Он выполняется с помощью следующей команды,
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
Планирование работы
Система расписания показывает выполнение любой исполнительной функции на миньонах или любых бегунах на мастере.
Это выполняется следующими методами -
Schedule - Вариант расписания в мастере или миньоне config файлы.
Minion pillar data - Обновляет данные столба миньонов с помощью команды saltutil.refresh_pillar.
Состояние расписания или модуль расписания.
Солевые состояния выполняются на миньоне. Вы можете передать позиционные аргументы и предоставитьYAML dict названных аргументов в config file как показано ниже.
schedule:
job1:
function: saltstate.sls
seconds: 3600
args:
- httpd
kwargs:
test: True
Вот, job1 выполнит функцию saltstate.sls с указанными аргументами, httpdза каждый час. Вtest: True является дополнительным аргументом в пользу httpd команда, которая определена в saltstate.sls.
Файловый сервер Salt - это сервер ZeroMQ без сохранения состояния. Он встроен в мастер соли. Файловый сервер Salt используется для передачи файлов от мастера к миньонам. Он содержит разные модули. В этой главе давайте разберемся с файловым сервером соли, его конфигурацией, модулями, относящимися к файловому серверу соли, как получить доступ к файловому серверу соли в Python и т.д.
Бэкэнд файлового сервера
Бэкэнд файлового сервера позволяет файловому серверу Salt действовать как прозрачный интерфейс для других файловых серверов, таких как локальная файловая система, система контроля версий Git и т. Д.
Бэкэнд файлового сервера Git можно включить, используя следующую конфигурацию в главном файле.
fileserver_backend:
- git
Чтобы включить несколько серверных файловых систем, мы можем использовать следующую конфигурацию.
fileserver_backend:
- roots
- git
Мы также можем указать дополнительную опцию для другого внутреннего сервера, используя конкретный раздел соответствующего внутреннего сервера.
Локальная файловая система
Для использования этой системы мы должны использовать следующий код.
file_roots:
base:
- /srv/salt/prod
Файловая система Git
Для использования этой системы мы должны использовать следующий код.
gitfs_remotes:
- https://github.com/sample/sample1.git
Запрос файлов
У Salt есть возможность запрашивать файлы для определенных сред.
salt://path/to/file?saltenv = base
Здесь среда определяется с помощью параметра root.
Конфигурация файлового сервера
Файлы соли могут быть размещены во многих корневых каталогах, и к ним можно получить доступ, указав путь к файлу и среду для поиска. Отдельные среды могут охватывать несколько корней каталогов.
Окружающая обстановка
Среда по умолчанию - базовая. Эта среда определена и используется для загрузки файлов, когда не указана другая среда.
file_roots:
base:
- /srv/salt/base
Вы также можете использовать несколько сред, как показано в приведенном ниже коде.
file_roots:
base:
- /srv/salt/base
dev:
- /srv/salt/dev
- /srv/salt/base
Модуль CP
Модуль CP - это основной модуль для управления Salt file server. В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)
Вот,
opts доступен, когда модуль запущен в солевой среде. В противном случае мы должны предоставить путь конфигурации -/etc/salt/minion.
path относится к пути к исходному файлу на файловом сервере соли.
dest относится к пути назначения файла.
saltenv относится к окружающей среде
В следующей главе мы поймем, как использовать Git как файловый сервер.
Gitэто распределенная система контроля версий с открытым исходным кодом. Его можно использовать для отслеживания изменений в любых файлах. Salt отправляет файлы из репозиториев Git с помощью файлового сервера Git. Вы можете настроить Git наfileserver_backend list, и если вам нужно настроить один или несколько репозиториев, вы можете сделать это с помощью gitfs_remotes вариант.
В этой главе объясняется, как установить и настроить файловый сервер Git. Прежде чем приступить к установке, у вас должны быть следующие предварительные условия.
Предварительные требования Salt Server для использования Git
Минимальные требования для солевого сервера для использования Git в качестве файлового сервера следующие:
- pygit2
- Dulwich
Pygit2 и Dulwich настраиваются с помощью gitfs_providerпараметр в главном файле конфигурации. Еслиgitfs_provider не настроен в главном файле, то Salt предпочтет pygit2, если подходящая версия доступна, а затем GitPython и Dulwich.
Установите pygit2
Следующие команды используются для установки pygit2 в системах на основе Fedora и Ubuntu:
Fedora-based system
yum install python-pygit2
Ubuntu-based system
apt-get install python-pygit2
Здесь минимальная поддерживаемая версия pygit2 - 0.20.3.
Установить GitPYTHON
GitPython можно легко установить на мастере с помощью yum / apt command как показано ниже.
Fedora-based system
yum install GitPython
Ubuntu-based system
apt-get install python-git
Установить ДУЛЬВИЧ
Dulwich можно легко установить на мастере с помощью команды yum.
Fedora-based system
yum install python-dulwich
Ubuntu-based system
apt-get install python-dulwich
Теперь мы установили все зависимости для файлового сервера Git. Давайте теперь настроим этот файловый сервер Git, используяfileserver_backend раздел в master config файл.
Конфигурация бэкэнда
Чтобы использовать файловый сервер Git, вам необходимо добавить Git в список fileserver_backend в главном файле конфигурации. Это описывается следующим образом -
fileserver_backend:
- git
Давайте дополнительно разберемся, как настроить файловый сервер Git в удаленной конфигурации.
gitfs_remotes Конфигурация
Вы можете указать любой или все URL-адреса, такие как git: //, https: //, file: // или ssh: //, для конфигурации gitfs_remotes в главном файле. Это используется для поиска запрошенных файлов.
Простая спецификация URL https определена ниже.
gitfs_remotes:
- https://github.com
В ssh конфигурацию можно выполнить, как показано ниже.
gitfs_remotes:
- [email protected]:user1/sample.git
- ssh://[email protected]/path/to/sample.git
Теперь мы настроили файловый сервер Git, используя два варианта fileserver_backend и gitfs_remotes.
Перезапустить Мастер
После внесения всех изменений в главный файл перезапустите мастер, чтобы загрузить все конфигурации на файловый сервер Git.
Конфигурация нескольких пультов
Следующая команда используется для множественной конфигурации в gitfs_remotes в мастер-файле.
gitfs_remotes:
- git://github.com/sample/sample1.git
- https://github.com/sample/sample2.git
- file:///root/user/sample
Здесь репозитории sample1.git, sample2.git, и sample.doc могут быть следующие файлы.
sample1.git:
top.sls
sample2.git
edit/vimrc
sample.doc
edit/vimrc
В MinionFS- специальный файловый сервер, предоставляемый Salt для миньонов, чтобы обмениваться файлами между ними. Файлы, обслуживаемые MinionFS, являются файлами, преднамеренно предоставленными миньонами. Чтобы поделиться файлами, Миньон должен выполнить шаги, указанные ниже.
Миньон-источник должен отправить файл мастеру соли, используя cp.push функция.
После того, как файлы будут отправлены исходным миньоном, к развернутым файлам может получить доступ любой другой миньон, использующий файловый сервер MinionFS.
Включить отправку
По умолчанию отправка файлов миньонами мастеру отключена. Чтобы принимать файлы от миньонов, у мастера должна быть опция «file_recv» в файле конфигурации, и ее значение должно быть установлено наTrue. По умолчанию значение «file_recv» равноfalse.
file_recv: True
Как только опция будет включена, перезапустите главную службу.
Отправка файлов
Миньоны могут отправлять файлы мастеру. Выполняетсяcp.pushфункция. Эта функция cp.push предоставляет простой механизм для отправки файлов миньоном с использованием идентификатора миньона.
salt 'minion-id' cp.push /path/to/the/file
Здесь идентификатор миньона используется для определения того, какой миньон отправляет файл. Эта команда сохранит файл в подкаталоге с именемminions под master's cachedir. Обычно путь - / var / cache / salt / master / minions.
Для миньона, m1 и файл - /var/log/mylog.txt, файл будет сохранен в - /var/cache/salt/master/minions/m1/var/log/mylog.txt.
Включить MinionFS
Чтобы включить MinionFS, просто добавьте minion в настройках серверной части файлового сервера, как показано в следующем блоке кода.
fileserver_backend:
- roots
- minion
После включения MinionFS загруженные файлы миньонов будут доступны как -
salt://<minion-id>/path/to/pushed/file
Для миньона, m1 и загруженный файл - /var/log/mylog.txt, отправленный файл будет обслуживаться из salt: //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
В приведенной выше конфигурации все миньоны, кроме testing разрешено делиться файлом с помощью minionFS.
Webserver1
Миньоны, чьи идентификаторы соответствуют регулярному выражению, разрабатываются *
Миньоны, чьи идентификаторы соответствуют регулярному выражению mail\d+.mysite.com.
Testing
В следующей главе мы узнаем, как использовать Cron с Salt.
Соль можно использовать вместе с 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"
Каждая строка имеет следующие семь точек входа, разделенных пробелом, и они следующие:
minute - минуты часа в диапазоне от «0» до «59».
hour - час и указывается в 24-часовом формате.
day_of_month- День месяца от 1 до 31. Например, 10- е число каждого месяца - 10.
month - Месяц указывается в цифрах (0–12) или как название месяца (например, май).
day_of_week - День недели указывается цифрами (0-7) или названием дня (например, Sun).
user - Учетная запись пользователя, под которой выполняется команда.
cmd - Фактическая команда и ее аргументы.
Здесь * заменяет, если ничего не назначено.
Salt Caller (солонка)
Salt предоставляет CLI (интерфейс командной строки), salt-callдля запуска модулей в самой локальной системе миньонов, а не с главного сервера с помощью команды salt. Интерфейс командной строки вызова соли поддерживает все параметры, поддерживаемые командой salt, но запускается локально.
Изначально Salt Caller был разработан для поддержки отладки, но теперь его можно использовать как отдельное приложение.
salt-call test.ping
Использование salt-call в cron
Интерфейс командной строки с вызовом соли полезен для планирования солевых операций с помощью Cron. Например, чтобы проверять состояние миньона каждый день в полночь, мы можем использовать salt-call вместе с опцией - state.apply, как показано ниже.
/etc/crontab
PATH = /bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/opt/bin
0 0 * * * salt-call state.apply
Вот,
В state.apply функция проверит файл конфигурации соли для миньона и проверит, правильно ли настроены все действия, определенные для миньона.
Установка пути - это хорошая практика, потому что иногда команда salt может быть недоступна в системном пути.
В следующей главе мы изучим удаленное выполнение, которое является основной концепцией Salt.
Одна из основных концепций Salt - удаленное выполнение. Salt может выполнять команды в тысячах систем за считанные секунды. Salt использует свою собственную команду для выполнения этой функции. Давайте теперь разберемся с различными командами Salt для удаленного выполнения в этой главе.
Соль Командование
Команда Salt позволяет мастеру Salt связываться с одним или несколькими Salt minions. Базовый синтаксис выглядит следующим образом:
salt '<target>' <module.function> [arguments]
Синтаксис указанной выше команды состоит из следующих трех основных компонентов.
target - Он определяет, какие системы применены командой.
module.function- Это команда. Команды состоят из модуля и функции.
arguments - Дополнительные данные, необходимые для вызова функции.
Давайте подробно разберемся с каждым из компонентов.
Что такое целевой компонент?
Target - это компонент, который позволяет вам фильтровать миньонов (управляемую систему) для запуска функции. Ниже описана простая команда, использующая целевой компонент.
salt '*' test.ping
Это приведет к следующему output -
minion2:
True
minion1:
True
Здесь цель ‘*’представляет все управляемые системы. 'test'вот модуль и pingэто функция. Это используется для проверки службы ping в удаленной системе. Мы узнаем о различных модулях и их функциях в следующих главах.
Цели, использующие ID (миньон)
Вы можете отправить команду определенному миньону, используя его idв мишени. Вместо того, чтобы использовать'*', вы можете заменить его, используя minion id. Это определено ниже.
salt 'minion1’ test.ping
Это приведет к следующему output -
minion1:
True
Цели с использованием регулярного выражения
Цели можно фильтровать по определенному регулярному выражению. Это определено ниже.
salt -E 'minion[0-9]' test.ping
Это приведет к следующему output -
minion2:
True
minion1:
True
Цели с использованием списка
Цели могут быть явно указаны в списке. Это определено в следующем блоке кода.
salt -L 'minion1,minion2' test.ping
Это приведет к следующему output -
minion2:
True
minion1:
True
Цели по состоянию
Цели можно объединить в одну команду, как показано в блоке кода ниже.
salt -C 'G@os:Ubuntu and minion* or [email protected].*' test.ping
Это приведет к следующему output -
minion1:
True
minion2:
True
Модуль и функции (module.function)
Salt может выполнять команды оболочки; обновлять пакеты и распространять файлы и т. д. во всех управляемых системах одновременно. Salt выполняет эти операции с помощью модулей. В Salt есть специальные модули для всех доступных функций. Давайте разберемся с различными модулями Salt на простом примере из этой главы.
Команда оболочки
Salt выполняет команды оболочки удаленно в нескольких системах, используя cmd.runкоманда. Вcmd является основным модулем и run одна из функций, доступных в cmdмодуль. Вrun Функция позволяет выполнять любую команду оболочки в удаленной системе, как показано в блоке кода ниже.
salt '*' cmd.run 'ls -l /etc'
Это приведет к следующему output -
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
……………
……………
Показать использование диска
Соль предоставляет специальный модуль, diskчтобы получить полную информацию о диске управляемой системы. Вdiskmodule имеет usage функция для запроса подробностей.
salt '*' disk.usage
Это приведет к следующему output -
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
Это приведет к следующему output -
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исполнительный модуль. Это используется для получения подробной информации о любом модуле непосредственно из командной строки. Функции Salt самодокументируются. Вся документация по функциям может быть получена от миньонов с помощью функции sys.doc (), которая определена ниже.
salt '*' sys.doc
Аргументы для вызова функции
Аргументы используются для предоставления дополнительных данных для вызова функции. Ниже приводится простой пример аргументации.
salt '*' sys.doc pkg.install
Здесь аргумент pkg.install это модуль для установки определенных пакетов.
Функция Python
Аргументы - это параметры функции, разделенные пробелами. Это позволяет передавать код Python в качестве аргументов, как указано ниже.
salt '*' cmd.exec_code python 'import sys;print sys.version'
Это приведет к следующему output -
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. Он используется для создания многоразового шаблона конфигурации, называемогоstate. Состояние описывает все, что требуется для перевода системного компонента или приложения в известную конфигурацию.
Состояние соли
Солевое состояние - это многократно используемая конфигурация для определенной части системы. Состояния легче понять и описать с помощью простого YAML.
Создать состояние соли
Солевые состояния создать легко. Давайте создадим простое состояние в этой главе. Перейдите в каталог «salt-vagrant-demo / saltstack / 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. Если он работает правильно, вы можете увидеть ответ, как показано ниже.
Это приведет к следующему output -
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 file работать вместе, чтобы создать ядро возможностей управления конфигурацией SaltStack.
Давайте теперь создадим простой файл top.sls в каталоге saltstack/salt и добавьте следующее.
top.sls
base:
'*':
- common
'minion1':
- samples
Здесь state, обычно applies к all system штат, samples относится к minion1.
Затем запустите мастер соли и примените состояние, как показано ниже.
root@saltmaster:/home/vagrant# salt '*' state.apply
Это приведет к следующему output -
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
Это приведет к следующему output -
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», используя функцию состояния Salt.
Создать и применить функцию состояния
Создайте файл с именем «sample.sls» в каталоге «salt-vagrant-demo / saltstack / salt / sample.sls» и добавьте следующее:
sample.sls
install vim:
pkg.installed:
- name: vim
После того, как среда Vagrant будет запущена, запустите мастер соли и примените sample.sls, выполнив следующую команду.
root@saltmaster:/home/vagrant# sudo salt 'minion2’ state.apply sample
Это приведет к следующему output -
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». Давайте теперь протестируем пакет, используя метод тестирования соли.
Проверка состояния соли
Для выполнения тестового прогона необходимо добавить в состояния параметр «test = True». Информация о возврате покажет состояния, которые будут применены желтым, а результат будет отмечен как «Нет».
Следующая команда используется для проверки состояния -
root@saltmaster:/home/vagrant# sudo salt 'minion2’ state.apply sample test = True
Это приведет к следующему output -
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 - важный компонент, позволяющий повторно использовать состояния Salt. Он используется для определения защищенных данных для миньонов, назначенных с помощью целей. В данных соляного столба хранятся такие значения, как порты, пути к файлам, параметры конфигурации и пароли.
Файл конфигурации 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
Это приведет к следующему output -
minion2:
- apache
- git
minion1:
- apache
- git
Предметы столба
После того, как столп настроен, данные о миньоне можно будет просмотреть через модуль столба. Доступ к нему можно получить через функциюpillar.items, который определен ниже.
root@saltmaster:/home/vagrant# salt '*' pillar.items
Это приведет к следующему output -
minion2:
----------
apache:
httpd
git:
git
minion1:
----------
apache:
httpd
git:
git
SaltStack - включить компонент
Компонент «Включить» используется для определения одной и той же задачи конфигурации в нескольких местах. Выполнить легко. Вверху файла состояния добавьте включение в следующем формате:
include:
- state file 1
- state file 2
Вот, state file 1 и state file 2- это имена файлов SLS, которые вы хотите включить. Нет необходимости включать.slsрасширение. Включенные состояния соли вставляются в начало текущего файла.
Файл состояния в подкаталоге
Вы можете включить файл состояния подкаталога, используя точку (.). Он действует как разделитель каталогов.
include:
- dir.sls1
Интерфейс зерна
Grains - это интерфейс, используемый для получения информации о базовой системе. Собираются зерна для операционной системы, доменного имени, IP-адреса, ядра, типа ОС, памяти и многих других свойств системы.
Ориентация на зерно
Данные зерна можно использовать при нацеливании на миньонов, что определено в следующем блоке кода.
root@saltmaster:/home/vagrant# salt -G 'os:Ubuntu' test.ping
Это приведет к следующему output -
minion1:
True
minion2:
True
Перечисление зерен
Зерна можно перечислить с помощью модуля grains.ls, который определен ниже.
root@saltmaster:/home/vagrant# salt '*' grains.ls
Элементы списка
Как и Pillar, данные Grains также можно перечислить с помощью файла «grains.items».
root@saltmaster:/home/vagrant# salt '*' grains.items
Регистрация используется для отслеживания событий запущенного программного обеспечения. Событие описывается описательным сообщением, которое может содержать переменные данные. Подход солевого журнала используется для решения любых проблем, с которыми вы можете столкнуться. Вы можете проверить это с определенными уровнями журнала.
Настройки конфигурации
Давайте подробно разберемся с различными настройками конфигурации для ведения журнала.
ЛОГ-ФАЙЛ
Записи журнала соли передаются через файл, который содержит имя локального пути или сетевое расположение для идентификации. Этот файл считается файлом журнала.
log_file: /var/log/salt/master
Здесь файл, зависящий от двоичного файла, выполняемого в master. Точно так же вы можете выполнить и в миньоне, как показано ниже.
log_file: /var/log/salt/minion
Вы также можете использовать удаленный адрес. Синтаксис использования удаленного адреса - <file | udp | tcp>: // <host | socketpath>: <port-if-required> / <log-facility>.
log_file: udp://loghost:port
Здесь функция журнала по умолчанию - LOG_USER.
LOG_LEVEL
Уровни журнала упорядочены по числовому значению. Библиотека Python по умолчанию определила большинство уровней ведения журнала. В дополнение к этому, Salt использует еще несколько уровней. Некоторые из уровней описаны ниже.
log_level: error; level value is 40 - Указывает, что запись выписки из журнала произошла при ошибке.
log_level: quiet; level value is 1000 - Это означает, что на этом уровне ничего не должно регистрироваться.
log_level: info; level value is 20 - Указывает на нормальную информацию журнала.
log_level: warn; level value is 30 - Указывает на запись в журнале при предупреждении.
log_level: debug; level value is 10 - Информация, полезная для отладки как реализаций соли, так и кода соли.
log_level: trace; level value is 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'
Здесь основная библиотека соли на уровне информации устанавливает salt.modules для регистрации на уровне трассировки.
Внешний обработчик журналов
Salt использует внешний обработчик журналов LogStash и Sentry для ведения журнала. Давайте разберемся с этим подробно в этой главе.
Обработчик LOGSTASH
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
Sentry - это отслеживание ошибок в реальном времени в производственных развертываниях и информация для воспроизведения и исправления сбоев. Конфигурация по умолчанию в главном файле определена ниже.
sentry_handler:
dsn: https://pub-key:[email protected]/app-id
log_level: debug
Здесь уровень ведения журнала по умолчанию для обработчика часов - ERROR, но мы определили отладку log_level под ключом конфигурации sentry_handler.
Salt выполняет команды в удаленной системе с помощью salt-minion. Это нормальное поведение. В некоторых сценариях доступ к удаленной системе возможен только по протоколу SSH. Для этих сценариев Salt предоставляет возможность подключиться к удаленной системе только с использованием протокола SSH и выполнить команду через уровень SSH.
Salt SSHочень легко настроить. Единственная необходимая конфигурация - указать детали удаленной системы в специальном файле, который называетсяRoster file. Этот файл реестра обычно находится в/etc/salt/roster. В файле реестра будет вся информация об удаленной системе и о том, как мы можем к ней подключиться. После настройки файлов реестра все команды Salt выполняются с использованиемsalt-ssh вместо команды соли.
Файл реестра
Система реестров разработана специально для Salt SSH. Это спроектировано как подключаемая система. Единственная цель системы реестров - сбор информации об удаленной системе. Файл реестра - этоYAML based configuration file содержащую информацию об удаленной системе как targets. Эти цели представляют собой особую структуру данных с предопределенным набором атрибутов. Файл реестра содержит одну или несколько целей, и каждая цель идентифицируетсяSalt ID.
Базовая структура файла списка выглядит следующим образом:
<Salt ID>:
host: <host name>
user: <user name>
passwd: <password of the user>
Все остальные атрибуты, поддерживаемые файлом реестра, не являются обязательными. Они следующие -
port - Номер порта SSH.
sudo - запускать ли команду через sudo.
sudo_user - имя пользователя sudo.
tty - истина, если sudo включен.
priv - закрытый ключ.
timeout - тайм-аут для SSH-соединения.
minion_opts - словарь оптов миньонов.
thin_dir - каталог хранилища целевой системы для солевых компонентов.
cmd_umask - umask принудительно для команды вызова соли.
Пример файла списка выглядит следующим образом -
web:
host: 192.168.2.1
user: webuser
passwd: secret
sudo: True
db:
host: 192.168.2.2
Развернуть ключи SSH
Salt SSH сгенерирует пары открытого / закрытого ключей по умолчанию для входа в систему через SSH. Путь по умолчанию будет /etc/salt/pki/master/ssh/salt-ssh.rsa. Этот ключ можно развернуть в удаленной системе с помощьюssh-copy-id как показано ниже.
ssh-copy-id -i /etc/salt/pki/master/ssh/salt-ssh.rsa.pub [email protected]
Выполнить команду
Выполнить команду соли так же просто, как изменить salt cli командовать в salt-ssh как показано ниже.
salt-ssh '*' test.ping
Команда Raw Shell
Salt SSH предоставляет параметр (-r) для выполнения необработанной команды в удаленной системе, минуя модуль соли и функции.
salt-ssh '*' -r 'ls'
Таргетинг с помощью Salt SSH
Нацеливание на удаленную систему в Salt SSH поддерживает только цели glob и regex. Поскольку Salt SSH является отдельным модулем, он предоставляет только ограниченные возможности на данный момент и предоставит больше функций в ближайшем будущем.
Соль предоставляет отдельный модуль, Salt Cloud для предоставления виртуальных машин различных облачных провайдеров, таких как Amazon AWS, Google Compute и т. д. Salt Cloud - это общий интерфейс для настройки и управления виртуальными машинами различных облачных провайдеров.
Cloud Config- Основной файл конфигурации для Salt Cloud - это / etc / salt / cloud, и он применяется ко всем виртуальным машинам. Основной файл конфигурации называетсяCloud Config.
Cloud Providers - Чтобы настроить таргетинг на определенных облачных провайдеров, мы можем использовать определенный файл конфигурации, и они находятся в /etc/salt/cloud.providers.d/*.conf, они называются Cloud Providers.
Cloud Profiles - Чтобы настроить таргетинг на конкретную виртуальную машину, мы также можем использовать специальный файл конфигурации, который применяется только к этой конкретной виртуальной машине, и они находятся в /etc/salt/cloud.profiles.d/*.conf, они называются как Cloud Profiles.
Для виртуальной машины настройки в Cloud Config применяется сначала, а затем в Cloud Providers и, наконец, переопределение выполняется Cloud Profiles.
Установка Salt Cloud
По умолчанию Salt Cloud встроен в Salt и легко доступен. Если он недоступен, мы можем установить его, используя команду ниже.
pip install salt-cloud
Поскольку Salt Cloud является отдельным модулем и запускается в собственном процессе, его также можно установить в системе Salt Minion вместо Salt Master.
Подготовка виртуальной машины
Чтобы подготовить виртуальную машину, нам нужно определить облачного провайдера и облачный профиль. Как только оба будут созданы, мы можем подготовить новую виртуальную машину для ее использования.
Облачный провайдер
Информация об облачном хосте настраивается в файле конфигурации облачного провайдера. Обычно основная информация, которую необходимо настроить, - это драйвер облака, имя пользователя, пароль, закрытый ключ и т. Д. Давайте создадим нового поставщика облачных услуг с именемmy-amazon-cloud.
Создайте файл 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
Существует множество устройств, таких как маршрутизатор, сетевое оборудование и т. Д., С настраиваемой ОС, ограниченной памятью и высокими требованиями к безопасности. На этих устройствах нам не удалось установить стандартныйsalt-minionи впоследствии не могли управлять этими системами. Однако Salt предлагает инновационную технологию для преодоления этого ограничения.
У Salt есть отдельный модуль, salt proxy minion, который управляет удаленной системой с помощью службы REST, запущенной в удаленной системе. Эта служба REST представляет собой веб-службу на основе HTTP, написанную с использованиемRepresentational State Transfer (REST) концепции, и они оба просты в реализации и удобны в использовании.
Каждое устройство будет иметь собственный SDK и среду разработки для написания сложных приложений. Salt ожидает, что в устройстве будет разработана служба REST в соответствии со спецификацией интерфейса Salt. Salt также предоставляет модуль Python для написания веб-службы REST. Если устройство поддерживает Python, то разработать веб-сервис REST будет несложно.
После разработки и развертывания веб-службы REST в удаленной системе Salt можно настроить для управления удаленным устройством с помощью веб-службы REST вместо миньона соли.
Рабочий пример
Давайте узнаем концепцию salt proxy minionиспользуя живую рабочую среду. Для живой среды мы выбрали систему Linux как для главного, так и для прокси-миньона. Мы собираемся управлять системой с помощью веб-сервиса REST вместо salt-minion.
Установить и настроить веб-службу REST
Salt предоставляет образец реализации веб-службы REST, который в своем модуле contrib назван как proxyminion_rest_example. Давайте установим образец веб-службы.
Установить ‘bottle’с помощью пипса. Вbottle Команда - это веб-фреймворк на Python для разработки веб-приложений.
pip install bottle = 0.12.8
Загрузите saltstack/salt-contribпроект из github. В противном случае клонируйте проект с помощью следующей команды.
git clone https://github.com/saltstack/salt-contrib
Откройте терминал и перейдите в salt-contrib каталог.
В этом каталоге salt-contrib будет папка, proxyminion_rest_example. Эта папка содержит образец реализации веб-службы REST. Перейдите в папку proxyminion_rest_example.
Выполните следующую команду, чтобы запустить веб-службу REST.
python rest.py --address <your ip address> --port 8000
Откройте браузер и загрузите http: // «ваш IP-адрес»: 8000. Откроется страница по умолчанию со службами и пакетами, как показано на снимке экрана ниже.
Теперь мы настроили веб-службу REST, и она проверит, как настроить прокси-сервер соли для запроса веб-службы REST и управления системой.
Настроить Salt-Proxy
Чтобы настроить Salt-Proxy, мы должны выполнить шаги, указанные ниже.
Мы должны указать главный узел для солевого прокси. Отредактируйте расположение файла конфигурации прокси, который находится в / etc / salt / proxy, и введите следующий код.
master: <your ip address>
Изменить / создать файл базовой стойки в /srv/pillar/top.sls как показано в следующем блоке кода.
base:
'p8000':
- p8000
Добавьте новый файл столба, p8000.sls в /srv/pillar как показано в блоке кода ниже.
proxy:
proxytype: rest_sample
url: http://<your ip address>:8000
Запустите salt-proxy в режиме отладки, используя следующую команду.
salt-proxy --proxyid = p8000 -l debug
Подобно соленому миньону, примите salt-proxy key как показано ниже.
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
Система событий в Salt - это локальный интерфейс ZeroMQ PUB, который запускает солевые события. Это выполняется следующими компонентами.
Event Sockets - Используется для публикации событий.
Event library - Он используется для прослушивания событий и отправки событий в солевую систему.
Мастер соли Ивент
Мастер соли предоставляет различные типы событий, которые подробно описаны ниже -
- События аутентификации
- Начать события
- Ключевые события
- События вакансий
- События раннера
- События присутствия
- Облачные события
Давайте подробно рассмотрим каждый из типов событий.
События аутентификации
Эти события аутентификации срабатывают, когда миньон выполняет проверку аутентификации с мастером. Он представлен солью / аутентификацией.
Начало событий
События start срабатывают всякий раз, когда миньон подключается к мастеру Salt, и он представлен солью / миньоном // start.
Ключевые события
События Key запускаются, когда мастер соли принимает и отклоняет ключи миньона Salt. Вы можете получить доступ к этому событию, используя команду соленой клавиши.
События вакансий
Событие Job запускается всякий раз, когда начинается новое задание. Он представленsalt/job//new. Здесь JID - Job id new - новая работа
События раннера
Когда бегун начинает выполнение, запускается событие бегуна. Он представлен как salt / run // new.
События присутствия
Когда миньоны подключены или вновь подключены или отключены, это событие запускается с регулярным интервалом. Он представлен -salt/presence/present и salt/presence/change. Вот,
Present - означает, что мастер соли в данный момент подключен к списку миньонов.
Change - используется для обнаружения нового миньона - подключено или отключено.
Облачные события
События солевого облака запускаются на виртуальной машине. За исключением других событий, это не выполняется на миньоне. Вы можете получить к нему доступ, используя -salt/cloud//creating. Он запускается, когда облако Salt запускает процесс выполнения виртуальной машины.
Инструменты для мероприятий
Теперь давайте рассмотрим инструменты и сценарии событий. Вы можете получить доступ к шине событий с помощью интерфейса командной строки. Доступ к нему осуществляется с помощью следующей команды.
salt-run state.event pretty = True
Здесь бегун предназначен для взаимодействия с шиной событий из внешних инструментов и сценариев оболочки. Доступ к шине событий Salt можно получить удаленно черезREST API. Он представлен - (образец URL).
curl -SsNk https://salt-api.example.com:8000/events?token = 05A3.
Точно так же вы можете получить доступ к событиям из скриптов Python.
В общем, orchestrationавтоматизированное согласование и расстановка систем. Средство выполнения оркестровки используется для оркестровки в SaltStack.
Оркестровый бегун
он Orchestrate Runner предлагает все функции OverState(предыдущая система). Первоначально он называлсяstate.slsбегун. Этот исполнитель оркестровки используется для обобщения системы состояний Salt в контексте мастера Salt.
В state.sls и state.highstate функции выполняются на каждом миньоне Salt, но state.orchestrateбегунок выполнен на мастере. Вstate.orchestraterunner позволяет вам полностью управлять всей вашей инфраструктурой как государством. Давайте разберемся, как пройти простой процесс выполнения.
Простое исполнение
Команда Orchestrate Runner аналогична команде state.sls функция, но вы можете выполнить ее с «солевым прогоном» вместо соли.
Предположим, что у вас есть sample.sls файл, расположенный в /srv/salt/orch/samples.sls. Добавьте в этот файл следующий код.
sample.sls
install_nginx:
salt.state:
- tgt: 'web*'
- sls:
- nginx
Следующая команда используется для запуска на главном сервере и применяет состояния, определенные в этом файле.
salt-run state.orchestrate orch.sample
Это приведет к следующему output -
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#
Здесь, согласно Current Version, функция runner была переименована в 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
Это приведет к следующему output -
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
Формулы соли упаковываются и распространяются мастерам соли с помощью диспетчера пакетов. Эта концепция возникла под влияниемRPM, Yum и Pacmanупаковочные системы. Состояние соли, столб, шаблоны файлов и другие файлы используются формулой, а затем упаковываются в один файл.
После создания пакета формул он копируется в систему репозитория, чтобы использовать его для мастеров соли. Прежде чем перейти к диспетчеру пакетов, давайте посмотрим, как установить пакет «nginx» с помощью базовой команды Salt.
Следующий синтаксис используется для установки пакета «nginx».
root@saltmaster:/home/vagrant# salt '*' pkg.install nginx
Здесь pkg.install nginxкоманда используется для установки пакета. После выполнения вы увидите следующий ответ.
Это приведет к следующему output -
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. Есть три типа пакетов, и они следующие.
- Formula
- Reactor
- Conf
Давайте теперь поймем, как создавать пакеты с помощью Fomula Файл.
Файл формулы
Большинство файлов из пакета по умолчанию расположены в каталоге - / srv / spm / salt /, но файл pillar можно разместить в каталоге - / srv / spm / pillar /. Файл формулы описывает пакет.
Example
name: apache
os: RedHat
os_family: RedHat
version: 201607
release: 2
summary: Formula for installing Apache
description: Formula for installing Apache
Вот,
Name- Название пакета. Здесь имя пакетаapache.
os - Он используется, чтобы узнать, какие операционные системы могут поддерживать этот пакет.
os_family - Он используется, чтобы узнать, какие семейства операционных систем могут поддерживать этот пакет.
Version- Версия пакета. Он указывается в формате ГГГГММ.
Release - Это поле в первую очередь относится к выпуску версии.
Summary - Краткое описание пакета.
Description - Более подробное описание пакета.
РЕАКТОР
Файлы реактора находятся в /srv/spm/reactor/ каталог.
CONF
Файлы в этом типе пакета представляют собой файлы конфигурации для Salt, которые обычно находятся в /etc/salt/каталог. Файлы конфигурации для пакетов, отличных от Salt, могут и должны обрабатываться с помощью Salt State (с использованием типа пакета формулы).
Давайте продолжим следующие шаги, чтобы собрать пакет.
Создайте файл FORMULA и поместите его в корень папки пакета.
Соберите файлы формул в папке в системе сборки.
Бежать spm build. Пакет собран и помещен в папку / srv / spm_build. Следующая команда используется для создания пакета.
spm build /path/to/salt-packages-source/formula
Теперь скопируйте .spm файл в папку в системе репозитория.
Вы можете поделиться srv/spm_build папку в сети или скопируйте файлы на свой FTP или веб-сервер.
Создайте метаданные репо с помощью следующей команды.
spm create_repo /srv/spm_build
Установка пакетов
В этом разделе объясняется установка пакетов диспетчера пакетов Salt.
Настроить удаленные репозитории
Чтобы настроить удаленные репозитории, Salt Master должен знать, где находится репозиторий, в процессе настройки.
Файлы находятся в /etc/salt/spm.repos.d/spm.repo каталог.
Example
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
Обратите внимание, что если какие-либо файлы были изменены, они не будут удалены.
Salt предоставляет программный доступ ко всем своим командам. Salt предоставляет разные модули для каждого раздела системы Salt. Давайте изучим основы API-интерфейса python и узнаем, как запускать основные команды соли в этой главе.
Конфигурация
В salt.config модуль используется для доступа к деталям конфигурации Salt.
import salt.config
opts = salt.config.client_config('/etc/salt/master')
Здесь client_config читает файл конфигурации соли и возвращает детали конфигурации в виде словаря.
Загрузчик
В salt.loader module используется для загрузки каждого модуля в Salt, такого как зерна, миньоны и т. д.
import salt.loader
opts = salt.config.minion_config('/etc/salt/minion')
grains = salt.loader.grains(opts)
Вот, grains считывает сведения о зернах в системе Salt и возвращает их.
Клиентский модуль
В salt.client Модуль используется для программного выполнения команд salt, salt-call и salt-SSH.
Наиболее важные классы Python следующие:
- salt.client.LocalClient
- salt.client.Caller
- salt.client.ssh.client.SSHClient
Основная функция, предоставляемая большей частью клиентского модуля, - это cmd. Эта функция обертывает параметры интерфейса командной строки и выполняет ее, что аналогично командной строке и возвращает результаты в виде структур данных python.
LocalClient
LocalClient используется для отправки команд от мастера к соляным миньонам и возврата результатов мастеру.
import salt.client
local = salt.client.LocalClient()
local.cmd('*', 'test.ping')
Это приведет к следующему output -
{'minion1': True, 'minion2': True }
Звонящий
Вызывающий используется для запуска salt-call программно и вернуть результаты.
import salt.client
caller = salt.client.Caller()
caller.cmd('test.ping')
Это приведет к следующему output -
True
SSHClient
SSHCient используется для запуска salt-ssh программно и вернуть результаты.
import salt.client.ssh.client
ssh = salt.client.ssh.client.SSHClient()
ssh.cmd('*', 'test.ping')
Это приведет к следующему output -
{'minion1': True, 'minion2': True }
CloudClient
Модуль salt.cloud используется для программного выполнения команд salt-cloud.
client = salt.cloud.CloudClient(path = '/etc/salt/cloud')
Облачный модуль предоставляет функции для создания виртуальных машин (создание), уничтожения виртуальных машин (уничтожение), списка образов, предоставленных облачным провайдером (list_images), списка местоположений облачного провайдера (list_locations), списка размеров машин облачного провайдера (list_sizes), и т.п.
В этом рабочем примере мы создадим формулу Salt, которая настроит веб-сервер apache вместе с программным обеспечением PHP. Salt - отличный способ выполнять специальные команды, но вы действительно не захотите постоянно настраивать свою инфраструктуру таким образом. Создав набор формул соли, вы можете надежно воспроизвести любую конфигурацию поверх.
Формулы соли - это простые текстовые файлы 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
Теперь вы увидите следующее output -
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» - это способ, с помощью которого Соль определяет, какая из формул соли должна применяться к определенному миньону. Выполните «высокое состояние», используя следующую команду.
root@saltmaster:/home/vagrant# salt <targets> state.highstate
top.sls
Когда миньон запрашивает выполнение высокого состояния, как упоминалось ранее, миньон запрашивает файл top.sls у мастера соли и ищет формулы, которым он соответствует. По умолчанию этот файл находится в /srv/salt/top.sls. Давайте добавим нашу формулу в файл top.sls и установим minion2 в качестве цели.
base:
'*':
- common
'minion2’:
- websetup
Теперь выполните highstate нацелившись на миньона 2, как показано ниже.
root@saltmaster:/home/vagrant# salt 'minion2' state.highstate
После применения вы могли увидеть следующее output -
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 и установить необходимое программное обеспечение с минимальными усилиями и максимальной гибкостью.