Рубрики
Uncategorized

Начнем с соли

Управление конфигурацией является важной частью любой компьютерной системы, состоящей из нескольких компонентов … Tagged с солью, соленой, DevOps, IAC.

Автоматизация вашей ИТ -среды с помощью соли (серия 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»