Автоматизация вашей ИТ -среды с помощью соли (серия 3 частей)
Управление конфигурацией является важной частью любой компьютерной системы, состоящей из нескольких компонентов. При правильном внедрении он может сделать техническое обслуживание намного проще и предсказуемым для всех участвующих.
Это становится особенно мощным, когда система управляется с помощью машиночитаемых файлов конфигурации вместо использования различных интерактивных инструментов. Расширение и настройка каждого компонента должен быть автоматическим и последовательным.
SaltStack (Также известная под именем Salt Salt Sale) является одной из таких систем управления конфигурацией. Он не только поддерживает управление конфигурацией, но также и автоматизацию удаленного выполнения и управления событиями, но и давайте сосредоточимся на работе с управлением конфигурацией соли.
Прежде чем мы погрузимся в небольшой пример, давайте посмотрим на очень короткий и упрощенный обзор того, как работает соль, чтобы вы узнаете, о чем это все.
На своей основной соль работает путем настройки небольшого агента, называемого миньон , на всех компонентах системы, которые вы хотите настроить или работать (например, сервер). Этот миньон разговаривает с солью Мастер который знает, как должен быть настроен миньон на основе некоторых файлов конфигурации, написанных в YAML.
В углу управления конфигурацией соли эти файлы конфигурации YAML определяют Государство Компонент должен оказаться в. Затем сам миньон следит за тем, чтобы он был в желаемом состоянии, делая немного Python-Fu.
Таким образом, в основном для работы солью, все, что вам нужно сделать, это установить мастер соли и определить конфигурацию в файле YAML. Затем вы просто устанавливаете миньон на компоненты системы, которые вы хотите, чтобы солевой мастер контролировал.
Чтобы увидеть все это в действии, давайте настроим небольшой пример на основе докера. Я полностью осознаю, что это странно использовать соль для настройки изображений Docker, потому что Dockerfile По сути, файл конфигурации, обеспечивающий согласованность, но Docker просто упрощает продемонстрировать простоту и для того, чтобы вы попробовали соль.
Мы собираемся создать одно изображение Debian с Salt Master и создать файлы конфигурации для управления одним изображением Ubuntu и одно альпийским изображением.
Во -первых, давайте создадим наши два миньона.
Альпийский миньон
Единственное, что вам нужно сделать на самом деле, — это установить агент соли Minion, он будет автоматически настроен с помощью SANE Defaults, хотя мы немного их изменим.
Установка солевого миньона на альпийский так же просто, как и просто запуск:
apk add salt-minion
(В Docker мы добавим —нет-боч флаг, потому что мы хотим убрать за себя)
Мы должны внести одно небольшое изменение, чтобы облегчить файлы конфигурации для состояний. Мы собираемся изменить то, что называется Minion ID Анкет
Обычно, когда агент соли Minion запускается, он по умолчанию принимает имя хоста и устанавливает его как Minion ID Анкет Идентификатор — это то, как Мастер Соли узнает различные миньоны.
В настройке управления конфигурацией нам нужно цель Наши миньоны, которые позволят нам определять разные состояния для разных машин. Есть много способов цель миньоны Но мы будем нацелены на наши идентификаторы миньонов.
В Docker имена хостов будут случайной строкой (например, 71665BedA883
), что затрудняет предварительно определенную таргетинг. То, что мы собираемся сделать, это префикс идентификатор миньона со строкой, которая облегчает нам нацеливание на машину.
Для альпийского примера мы собираемся использовать префикс Локомотив
Анкет Для этого мы создадим файл Docker entrypoint, который повторяет "Locomotive- $ hostname"
в файл, где соль Minion хранит свой идентификатор, /etc/salt/minion_id
Анкет После этого мы запустим соленый миньон.
Так что это наш Docker-enterpoint.sh для альпийского:
echo "locomotive-$HOSTNAME" > /etc/salt/minion_id salt-minion
Теперь все, что нам нужно сделать для создания Alpine Salt Minion, — это установить соль Minion, скопировать наш файл Docker IntryPoint в изображение и установить команду для запуска файла Docker intryPoint.
FROM alpine RUN apk add --no-cache salt-minion COPY docker-entrypoint.sh / CMD ["sh", "/docker-entrypoint.sh"]
Давайте построим изображение Docker как Альпийский-Минион
(Предполагая, что мы в папке, где у нас есть альпийский Dockerfile):
docker build -t alpine-minion .
Хорошо, начиная с следующего миньона.
Ubuntu Minion
Ubuntu Minion будет почти таким же. Разница в том, что мы используем APT для установки солевого миньона вместо APK, и мы собираемся использовать префикс корова
вместо Локомотив
(Потому что мы хотим нацелиться на миньонов по -разному).
Итак, Docker-EntryPoint.Sh будет таким:
echo "cow-$HOSTNAME" > /etc/salt/minion_id salt-minion
Dockerfile будет выглядеть так:
FROM ubuntu RUN apt-get update && \ apt-get install -y salt-minion COPY docker-entrypoint.sh / CMD ["sh", "/docker-entrypoint.sh"]
Давайте построим это как Ubuntu-minion
(снова предполагая, что мы сейчас в каталоге Ubuntu Minion):
docker build -t ubuntu-minion .
Этого достаточно миньонов, давайте перейдем к штатам для наших миньонов.
Соляные состояния
Вам может быть интересно, почему я выбрал локомотив
и корова
Префикс для альпийских и Ubuntu Images соответственно. Это потому, что мы собираемся установить два разных программных пакета на основе префикса.
Как я уже говорил, мы собираемся нацелиться на миньонов (на основе их идентификатора Minion) и установить различные пакеты на основе префикса. При составлении состояния для конкретного миньона соль всегда начинает искать в файле, называемом top.sls
. SLS
Расширение файла обозначает файл соли, но не позволяйте этому обмануть вас, это просто файл YAML. Все файлы определения состояния должны иметь SLS
расширение файла.
Мы собираемся создать три файла состояния. Один для установки двух программных пакетов: Коусей
и удача
. Один для установки программных пакетов sl
и Фортуна
(Мы устанавливаем Fortune таким образом, для примера). Наконец, мы создаем top.sls
Файл, где соль начинает свое путешествие
Убедитесь, что пакет установлен
Начнем с того, чтобы убедиться, что пакеты коровах
и Фортуна
установлены. Файл состояния соли может содержать несколько состояний, все определяемые именами состояния как корневые элементы файла состояния. У нас просто будет один в файле с именем Cow.sls
Чтобы убедиться, что мы установили коровах
и удача
.
Мы можем назвать состояние того, что хотим, но быть явным, давайте назовем его Установите Fun Cow Tools Анкет Единственное, что мы должны убедиться в том, чтобы дать эти имена, это то, что для любого данного миньона ни одно два состояния не могут иметь одинаковое имя.
Элемент состояния в файле YAML — это словарь состояний, которые мы хотим. Соль поставляется с большим количеством встроенных государственных модулей, которые мы можем использовать (это красота соли), но модуль соли, который мы хотим использовать, называется pkg
Анкет
Мы используем pkg
Модуль состояния, чтобы определить, что миньоны, в которых применяется это состояние, должны иметь пакеты установлены
(Функция в модуле pkg.intalled
Функция может принять аргумент ключевого слова
Pkgs который для его значения представляет собой список пакетов для установки, в нашем случае:
Фортуна и
коровах .
Cow.sls
Файл будет выглядеть так:
install cow tools: pkg.installed: - pkgs: - fortune - cowsay
Локомотив будет похож, но вместо установки Cowsay мы собираемся установить sl
В дополнение к удача
. Мы также будем использовать имя Установить локомотивные инструменты
для государства. Итак, файл Locomotive.sls
будет выглядеть так:
install locomotive tools: pkg.installed: - pkgs: - fortune - sl
Как вы можете видеть, файлы используют те же модули и функции соляных модулей, даже если мы знаем, что за кулисами один будет выполнен на альпийской машине, а другой на машине Ubuntu. Соль будет использовать соответствующий диспетчер пакетов.
top.sls
Давайте связать все это вместе в top.sls
и нацеливаться на машины на основе их префикса. Соль позволяет использовать звездочку/глобус при нацеливании, поэтому довольно легко нацелиться на идентификаторы миньонов с помощью этих префиксов.
Сначала мы должны определить среду, которую мы используем. Мы будем использовать солевую среду по умолчанию под названием основание
. Это будет корневой элемент, а значение — словарь. Ключевыми элементами этого словаря являются шаблоны нацеливания. Их значения — это то, какие файлы состояния он должен применить. Так что -то вроде этого:
: : - -
Файлы состояния даны как имя без расширения файла. Файлы состояния могут быть в подкатализаторах Но тогда мы должны использовать соглашение о Python, где каталоги и файлы разделены периодом. Итак, файл Cow.sls
В подкаталоге ферма
включен как Farm.cow
Анкет
Теперь это может показаться сложным, но на самом деле это не так. Это просто сложно описать. Если мы предположим, что файлы находятся в том же каталоге, что и файл top.sls, наши Top.sls будут выглядеть так:
base: locomotive-*: - locomotive cow-*: - cow
Это означает любой идентификатор миньона, который начинается с Локомотив-
собирается применять штаты, найденные в Locomotive.sls
Файл в той же папке, что и top.sls
файл.
Это суть того, как мы создаем и определяем состояние системы с солью, используя файлы YAML. Теперь мы все, что нам нужно, это мастер, который может рассказать миньонам, что делать.
Соляный мастер
Давайте использовать Debian для соленой матер. Как и в случае с миньонами, единственное, что нам нужно сделать, чтобы получить соль и работать с по умолчанию по умолчанию,-это установить пакет соляного мастера. Таким образом, это будет простое изображение Docker, которое нам нужно (мы сделаем магию, которую нам нужно, чтобы сделать нашу систему соли, когда мы установим файлы конфигурации):
FROM debian:10-slim RUN apt-get update && \ apt-get install -y salt-master CMD salt-master
Давайте построим это изображение как Соленый Мастер
(Предполагая, что мы находимся в том же каталоге, что и соляный мастер Dockerfile):
docker build -t salt-master .
Теперь со всеми изображениями, которые нам нужны, давайте сделаем это в эксплуатации!
Конфигурация мастера соли
Во -первых, нам понадобится базовый файл конфигурации, который сообщит The Salt Master, где находятся наши файлы состояния.
Благодаря дефолте Salt’s Sane Defaults, файл конфигурации очень прост. Нам нужно только определить корень файла, где можно найти среду состояния. Можно управлять множеством различных солевых среды с различными состояниями, используя один и тот же магистр соли и файл конфигурации, но мы собираемся придерживаться по умолчанию база
Окружающая среда.
Файл конфигурации просто должен указывать на каталог с корнем из наших файлов состояния для база
Соляная среда. Мы создадим файл с именем Master.config
Только с тремя строками:
file_roots: base: - /srv/salt/
Наши файлы состояния (те, которые мы создали ранее) должны быть доступны в /srv/salt
И нам нужно установить наш Master.config
в нашем солевом мастере в качестве файла /и т. Д./Соль/Мастер
Анкет
Docker Compose Environment
Чтобы облегчить все это, мы будем использовать Docker Compose для настройки всех наших услуг. Прежде чем мы создадим файл Docker Compose, давайте сначала посмотрим, как должна смотреть наша локальная файловая система, когда мы создали наш файл Docker Compose (при условии, что DockerFiles, которые мы использовали ранее, хранятся в другом месте):
salt-example/ | |- docker-compose.yml |- master.config `- states/ | |- cow.sls |- locomotive.sls `- top.sls
Теперь мы можем создать наш файл Docker Compose.
Есть несколько вещей, которые мы должны убедиться, что мы делаем. Два Я уже упоминал: Один из них должен установить Master.config
как /и т. Д./Соль/Мастер
В службе соляного мастера, другой, чтобы установить наше Государства/
каталог как /srv/salt/
В службе соляного мастера.
Третье, что я не упомянул, но это очень важно. По умолчанию миньоны будут искать Мастер Соли на доменном имени соль
Анкет Это настраивается, но мы используем по умолчанию, поэтому мы должны убедиться, что сервис солевого мастера в файле Docker Compose называется соль
(Что делает его доступным как Соль
Нашим миньонам, которые делятся сетью Docker Compose).
Итак, Docker-compose.yml
Файл будет определять три службы, соль (с файлами и каталогами, установленными правильно), наш альпийский миньон и Ubuntu Minion:
version: "3" services: salt: image: salt-master volumes: - ./master.config:/etc/salt/master - ./states:/srv/salt alpine-minion: image: alpine-minion ubuntu-minion: image: ubuntu-minion
Вот и все. Мы готовы начать все. Просто тип:
docker-compose up -d
Поздравляю! Если не было никаких опечаток, теперь у вас есть первая среда управления конфигурацией соли. Но на самом деле это ничего не делает.
Принимая миньонов
Если соль просто начнет раздавать состояния на любую машину, которая контактирует с мастером соли и вписывается в конкретный идентификационный рисунок миньонов, у нас будет проблема в наших руках. Чтобы избежать этого, нам нужно принять, с какими миньонами мы хотим, чтобы Мастер Соли управлял.
Когда миньон связывается с Солью Мастером, он отправляет свой общедоступный ключ. Если мы раньше не приняли миньона, нам нужно принять его (то есть, если мы доверяем ему), используя инструмент, установленный на солевом мастере, называемом соляный ключ
Анкет
Прежде чем продолжить, давайте откроем оболочку на контейнере Docker Docker соль:
docker-compose exec salt bash
Теперь в оболочке соль Master Bash вы можете перечислить все клавиши Minion, которые принимаются, отклонены, отвергнуты и неприемлемы, используя соляный ключ
с -l все
вариант:
salt-key -l all
Вы должны увидеть выход, похожий на этот:
Accepted Keys: Denied Keys: Unaccepted Keys: cow-7d7f4faf9802 locomotive-1fbb4f5c409d Rejected Keys:
Как видите, должно быть два неприемлемых клавиша (один с префиксом коровьи, а другой с локомотивом префиксом).
Если мы не примем их, мы не сможем управлять их конфигурациями, поэтому давайте продолжим и примем все ключи, которые мы получили, используя -A
флаг:
salt-key -A
Вам будет предложено подтвердить, хотите ли вы принять два перечисленных ключа. Просто введите У
Если все выглядит хорошо (или просто нажмите Enter, потому что принятие — по умолчанию). Теперь вы должны увидеть что -то вроде:
Key for minion cow-7d7f4faf9802 accepted. Key for minion locomotive-1fbb4f5c409d accepted.
Теперь мы можем контролировать наши миньоны. Возможно, они остались, потому что потребовалось некоторое время, чтобы принять их ключи (они не хотят ждать вечно). Давайте просто будем уверены, что они выйдут из Мастера Соли:
exit
Затем мы запускаем Docker снова накапливаться:
docker-compose up -d
Тогда мы можем снова прикрепить к мастеру соли:
docker-compose exec salt bash
Если вы хотите быть уверенным, что мы приняли наши ключи, и они все еще там просто тип:
salt-key -l all
Вы должны увидеть что -то вроде:
Accepted Keys: cow-7d7f4faf9802 locomotive-1fbb4f5c409d Denied Keys: Unaccepted Keys: Rejected Keys:
Применение состояния
Штаты до сих пор не применялись к нашим миньонам. Они не знают, какие пакеты им следует установить, поэтому они ничего не установили. Чтобы запустить конфигурацию, нам придется выполнить state.apply
На миньонах мы хотим применить государство.
Для этого мы нацелены на наши миньоны, и мы можем безопасно нацелиться на всех наших миньонов, используя глобус (звездочка) и сказать ему применение штатов. Для этого мы набираем следующую команду:
salt '*' state.apply
Обратите внимание на цитаты по всему миру. Это необходимо, потому что мы передаем строку с шаблоном таргетинга.
Вы должны увидеть много вещей на своем экране, но ближе к концу всего вы увидите резюме, подобно:
Summary for locomotive-1fbb4f5c409d ------------ Succeeded: 1 (changed=1) Failed: 0 ------------ Total states run: 1 Total run time: 5.633 s
Это говорит вам, что все штаты были успешно запускаются, и было сделано одно изменение (оно установило пакеты) на локомотивной машине (альпийский). Вы увидите аналогичный отчет для коровьей машины (Ubuntu)
Вы можете запустить state.apply
функционируйте так часто, как вам нравится. Поскольку это состояние, оно определяет Как Ваш миньон должен выглядеть так, что на самом деле делает перед установкой пакетов в нашем случае, это проверить, установлены ли все пакеты. Если они нет или некоторые отсутствуют, он идет вперед и устанавливает пропущенные.
Государство применяется, делает магию, чтобы убедиться, что государство выполнено. Бег state.apply
Опять же, должен привести к отчету (один для альпийской машины и другой для машины Ubuntu), как этот:
locomotive-1fbb4f5c409d: ---------- ID: install locomotive tools Function: pkg.installed Result: True Comment: All specified packages are already installed Started: 23:53:42.277146 Duration: 723.556 ms Changes: Summary for locomotive-03f0f2574592 ------------ Succeeded: 1 Failed: 0 ------------ Total states run: 1 Total run time: 723.556 ms
Это круто. Соль говорит нам, что все отлично, но это? Давайте проверим. Сначала выйти из соли Мастера
exit
Хорошо, теперь мы готовы проверить, сделала ли соль то, что мы хотели.
Это работает?
Пакет Cowsay в Ubuntu установлен в /usr/games/cowsay
Итак, чтобы увидеть это в действии, мы запустим это:
docker-compose exec ubuntu-minion /usr/games/cowsay I think I need some Salt
Вы увидите искусство бычьего ASCII, которое говорит вам, что ему нужна соль. Давайте посмотрим, установлена ли у нас удача (также в/usr/games/):
docker-compose exec ubuntu-minion /usr/games/fortune
Наслаждайтесь мудростью!
Alpine также должен иметь несколько пакетов (в этом случае нам не нужно получать к нему доступ к /usr/games/
Потому что это уже на пути):
docker-compose exec alpine-minion fortune
Что! Больше мудрости! Подождите, может быть, мы также установили корову на альпийском языке:
docker-compose exec alpine-minion cowsay Salt told me not to
Неа. Вы должны получить ошибку, сообщая вам, что Cowsay не найден на пути. Но SL:
docker-compose exec alpine-minion sl
Вот шутка, потому что вы ушли так далеко: какой звук издает больной поезд? — Ах-а-а-ах Чу Чу!
Так что это были основы соли. В будущих постах я хочу глубже погрузиться в соль, но мне нужно было убрать основы.
Эта работа лицензирована в соответствии с Creative Commons Attribution-Sharealike 4.0 Международная лицензия Анкет
Изображение обложки Хорхе Рояна: Четыре солевых шейкера на столе с солью пролились из одного из них
Автоматизация вашей ИТ -среды с помощью соли (серия 3 частей)
Оригинал: «https://dev.to/trickvi/let-s-get-started-with-salt-55hb»