Как управлять распределенной инфраструктурой из единой точки с помощью ManageIQ. Часть 2

Логотип компании КРОК

В статье рассказали, как работать с ManageIQ на примерах: создали диалог, сервис и бандл типа PaaS.

В предыдущей статье мы обсудили, что такое ManageIQ и какие функции можно выполнять с его помощью. А также посмотрели на процесс установки и интерфейс.

Сегодня расскажем, как можно управлять развернутой виртуальной машиной и как создать диалог, сервис и бандл типа PaaS. В качестве примера будем использовать настройку PostgreSQL.

Подробнее про работу с ManageIQ советуем посмотреть в записи. Ниже прилагаем скриншоты из трансляции:

Создаем диалог

Итак, чтобы вы, администратор системы или любой человек с доступом к ManageIQ могли создать сервис, нужен диалог. То есть форма, которую видит пользователь, когда нажимает кнопку «заказать». Как ее сделать?

  • Переходим во вкладку Automation —> Embadded automate —> Customization. Здесь есть два окна. Первое — Provisioning Dialogs — примеры диалогов, созданные разработчиками ManageIQ (они будут доступны, после того как вы развернете платформу). И Service Dialogs — которое нам и нужно.
  • Переходим во вкладку Service Dialogs. Через Configuration выбираем поле «Добавить диалог». Попадаем во вкладку «Создание диалога».
  • Указываем имя диалога.
  • В Dialog Descriptions указываем описание — по желанию.
  • В появившейся внизу форме настраиваем поля. Это могут быть текстовые поля, чек-боксы, Dropdown —  выкидное меню — и так далее. И типы, и количество полей зависят только от ваших потребностей.
Как управлять распределенной инфраструктурой из единой точки с помощью ManageIQ. Часть 2 1
Таймкод в источнике 10:01

Поля диалога также можно настраивать. Покажу на примере. Нажимаем на карандаш поля Text Box и переходим в окно настройки.

Как управлять распределенной инфраструктурой из единой точки с помощью ManageIQ. Часть 2 2
Таймкод в источнике 11:51

Здесь нужно заполнить параметры. В Field Information:

  • Label — название, которое будет отображаться слева от поля.
  • Name — имя, по которому ManageIQ поймет, значение какой переменной переопределяется в сервисе. Значение можно посмотреть в Provisioning Dialogs — там есть примеры всех переменных для тех или иных диалогов.
Как управлять распределенной инфраструктурой из единой точки с помощью ManageIQ. Часть 2 3
Таймкод в источнике 14:50
Если указать переменную неверно, то значение не перезапишется, и вы получите либо ошибку, либо примерно то же значение, что было указано при создании сервиса в виде шаблона.

В Options:

  • Default Value показывает дефолтное значение. Оно всегда будет всплывать при обращении к диалогу. И к сервису, который будет использовать этот диалог.
  • Protected скрывает точками параметры, которые вводит пользователь. Хорошая опция, когда нужно переопределить какой-то пароль.
  • Required делает поле обязательным. То есть, если его не заполнить, кнопка «заказать» не будет доступна.
  • Read only задает полю тип «Только чтение».
  • Visiable отвечает за то, будет ли пользователь видеть поле или нет.
  • Value type определяет, какое значение будет передаваться: string или integer.
  • Validation задает ограничения: например, имя виртуальной машины не должно быть больше определенного количества символов, или должно обязательно содержать буквы, цифры и так далее.

Во вкладке Advanced есть только кнопка Reconfigurable.

Параметры полей отличаются. Например, в поле Dropdown,, в Options, есть Entries — значения двух типов: в левом поле указывается значение, которое пользователь должен видеть, в правом — значение, которое ManageIQ на самом деле будет передавать провайдеру.

Создаем сервис

Переходим к созданию сервиса:

  • Открываем Service Catalogs —> Catalog Item —> Configuration.
  • Выбираем папку, в которой будем создавать каталог, через Configuration добавляем в нее New Catalog Item или New Catalog Bundle.
  • Переходим в шаблонизатор, вводим имя сервиса и описание (его по желанию).
Как управлять распределенной инфраструктурой из единой точки с помощью ManageIQ. Часть 2 4
Таймкод в источнике 22:04
  • Нажимаем (или нет — по желанию) Display in Catalog. Эта галочка отвечает за то, будет сервис отображаться в каталоге заказов.
  • В Catalog выбираем, где будет размещен сервис.
  • В Dialog выбираем, какой диалог будет использоваться при заказе сервиса.
Остальные значения в вкладке Basic Info можно не менять.
  • Во вкладке Details можем добавить более длинное описание сервиса, которое будет доступно пользователю.

Вкладка Request Info — главная. Она отвечает за то, какие параметры будут использоваться при запуске сервиса.

Как управлять распределенной инфраструктурой из единой точки с помощью ManageIQ. Часть 2 5
Таймкод в источнике 24:01

В Catalog:

  • Загружаем шаблоны в zVirt и выбираем нужный. Сами шаблоны виртуальных машин в ManageIQ не загружаются и не создаются — система подгружает информацию об имеющихся образах, виртуальных машинах, шаблонах и других сущностях из целевого провайдера.
  • Выбираем Provisioning Type.
  • Указываем, какое количество виртуальных машин будет разворачиваться в данном сервисе по умолчанию.

В Environment:

  • Ставим (или нет — по желанию) галочку Automate. Она определяет, как будет выбираться целевая инфраструктура: автоматически или вручную.
  • Если выбрали «вручную», то указываем в каком дата-центре, на каком кластере zVirt и на каком хосте создать сервис, и какую data store использовать.
  • В Hardware указываем, какое значение будет использоваться по умолчанию в сервисе.
Если бы мы создали диалог с галочкой Check Box и не указывали VM name, Hostname, количество ядер, объем памяти и прочее — и создали бы сервис, который ссылается на этот диалог, система бы тоже заработала. Но параметры виртуальной машины взялись бы именно из этого самого сервиса.
  • В Network указываем, какую сеть будем использовать.
  • В Customization указываем дополнительные параметры, например, пароль от root, тип IP-адреса, который используют DHCP, статику, DNS.
  • В Schedule указываем, когда запустить виртуальную машину и какие действия совершить, когда она будет создана.

Как управлять виртуальной машиной

Когда мы разворачиваем машину, во вкладке My Services появляется заказанный сервис. В ней же можно посмотреть информацию о самом сервисе и виртуальной машине, например, имя и IP-адрес.

Как управлять распределенной инфраструктурой из единой точки с помощью ManageIQ. Часть 2 6
Таймкод в источнике 29:10

Чтобы изменить конфигурацию текущей виртуальной машины, нам нужно:

  • выбрать ее;
  • выбрать Configuration;
  • выбрать параметр Reconfigure this VM.
Для некоторых провайдеров: openstack, zVirt, vSphere — есть доступ к консоли прямо из ManageIQ.

Здесь можно добавить память, изменить процессор, изменить объем диска или добавить новый диск и параметры сети.

Как управлять распределенной инфраструктурой из единой точки с помощью ManageIQ. Часть 2 7
Таймкод в источнике 30:34

Нажимаем Submit, видим, что появился запрос на изменение параметров. Дальше получаем сообщение о том, что машину нужно перезагрузить — иначе новые параметры не применятся. Проваливаемся в виртуальную машину и через power restart guest отправляем ее на перезагрузку.

В это время ManageIQ «идет» в zVirt, и «говорит», что эту виртуальную машину необходимо перезапустить. Виртуальная машина, соответственно, перезагружается, и получает новые параметры.

Так же можно управлять виртуальными машинами, которые развернуты в других поддерживаемых провайдерах: vSphere, openstack и так далее.

Создаем бандл

ManageIQ можно использовать его как портал самообслуживания — чтобы пользователи сами запускали скрипты, принимали плейбуки, настраивали ПО, получали сервисы типа PaaS и так далее. Покажу, как это работает, на примере бандла, связанного с PostgreSQL.

Создаем диалог для нашего бандла:

  • Идем во вкладку Automation —> Embadded automate —> Customization и создаем диалог.
  • В VM Params задаем VM name, Hostname, количество ядер и объем памяти.
  • В Config for PSQL указываем, виртуальной машине необходимо применить плейбук по установке PostgreSQL, какая версия PostgreSQL должна передаваться пользователям через переменную. А также добавляем привычные DB Name, user и password.
Чтобы передать имя переменной для Ansible необходимо перед именем переменной, которая используется в плейбуке, поставить слово param_.

Создаем бандл сервисов:

  • Переходим в Service Catalog;
  • Создаем сервис, который будет запускать плейбук;
Как управлять распределенной инфраструктурой из единой точки с помощью ManageIQ. Часть 2 8
Таймкод в источнике 40:48
  • Переходим в Configuration —> New Catalog Bundle;
  • Указываем имя и каталог бандла;
  • В ресурсах указываем, какие из уже имеющихся сервисов в него добавить. В данном случае мы берем сервис CentOS, который разворачивает виртуальную машину, и следом  — сервис, который запускает плейбук в AWX.
  • По желанию подгружаем логотип сервиса, который будет виден пользователю в каталоге.

Итак, нас есть сервис, который разворачивает виртуальную машину, сервис, который применяет плейбук по установке и настройке PostgreSQL, и бандл, который объединяет их в себе. Пришло время это запустить.

  • Переходим в сервис Service Catalog, нажимаем Order.
  • Указываем VM name, Hostname, количество ядер и объем памяти.
  • В Limit указываем имя или IP-адрес виртуальной машины, на которой необходимо применить плейбук.
  • Выбираем версию — пусть останется двенадцатая.
  • В DB name, DB User и DB User Password  указываем имя баз данных, которые хотим создать, пользователя, которого хотим создать, и пароль для этого пользователя.
Как управлять распределенной инфраструктурой из единой точки с помощью ManageIQ. Часть 2 9
Таймкод в источнике 43:03
  • Идем в zVirt и видим, что начала создаваться виртуальная машина.
  • Попадем в AWX, где ManageIQ запустит плейбук в AWX.
Как управлять распределенной инфраструктурой из единой точки с помощью ManageIQ. Часть 2 10
Таймкод в источнике 47:43

Бандл отработал, и мы можем к нему подключиться:

  • открываем сервис и видим нашу виртуальную машину;
  • в PgAdmin вводим ее адрес и DB Name, имя пользователя и пароль.

Та-дам! Мы подключились к PostgreSQL, который был развернут с помощью сервиса, заказанного через ManageIQ.

Небольшое уточнение по настройке AWX с zVirt и с ManageIQ

Я создал шаблон ManageIQ PSQL,который дергает этот плейбук. Указал имя этого шаблона и какой Inventory использовать, и выбрал плейбук из репозитория в GitLab. Подгрузил sash-ключ, поставил галочку «необходимо переопределять лимит, когда будет запускаться джоб из этого темплейта». Добавил галочку «необходима эскалация привилегий».

Как управлять распределенной инфраструктурой из единой точки с помощью ManageIQ. Часть 2 11
Таймкод в источнике 48:38

При этом при заказе бандла PostgreSQL через ManageIQ, мы указали, что плейбук необходимо применить конкретную. Но мы не знаем, как AWX сможет отрезолвить это имя, и как оно попадет в Inventory. Чтобы не потеряться, нужно сделать следующее:

  • Создать в Inventory miq-zvirt Inventory.
  • Указать что этот Inventory должен генерироваться AWX динамически, на основании Source, который называется zVirt.
  • Указать, что — это Red Hat Virtualization, то есть zVirt.
  • Передать Credentials, то есть логин и пароль для доступа к zVirt.
  • Указать, что Inventory необходимо обновлять до того, как запустится джоб из шаблона, который использует этот самый Inventory.

Виртуальная машина, на которой применяется плейбук, уже создана в zVirt создана, поэтому она попадет в хосты этого инвентаря. И в джобах AWX можно посмотреть, что сначала произошла синхронизация Inventory, и после запустился плейбук с установкой PostgreSQL.

Как управлять распределенной инфраструктурой из единой точки с помощью ManageIQ. Часть 2 12
Таймкод в источнике 55:14

Что в итоге

Таким образом можно создавать различного рода сервисы и использовать ManageIQ как портал самообслуживания. И тем самым предоставить пользователям заказывать готовые сервисы с установкой и настройкой ПО, например, в связке с теми же самыми Ansible-плейбуками.

Инструменты
Практика
DevOps
5279