Привет, Хабр! Продолжу серию статей об эффективном использовании Ansible для развертывания больших инфраструктур компаний.
В предыдущей статье я показывал, как мы формируем сети и располагаем в них хосты, используя Ansible inventory. Напомню на примере двух сетей — subnet_srv и dmz:
subnet_dmz: hosts: bind-vm: servicename: bind subnet_srv: hosts: gitlab-vm: servicename: gitlab serviceversion: "16.11.10" dc-vm: servicename: dc serviceversion: "2.4"
Теперь расскажу, как мы конфигурируем установку отдельных развертываемых хостов и их сервисов, а также как связываются сервисы между собой.
Конфигурация хоста
Хост конфигурируем переменными Ansible. Для удобства вся конфигурация разделена на три пула переменных:
-
Полученные из основного Ansible inventory file. Отличительные особенности:
-
Основные переменные, с помощью которых мы конфигурируем информационные системы.
-
Все переменные жестко регламентированные.
-
Их можно использовать как контракты для внешних систем конфигурации.
-
-
Сформированные на основе переменных Ansible inventory file. Отличительная особенность:
-
Мы их не изменяем, но можем использовать для конфигурации Ansible-service (А-service)* при разработке. К примеру, FQDN любого хоста можно автоматически получать из hostname и домена (поддомена), которые мы задаем в основном файле inventory.
-
-
Заданные в Ansible-service (А-service). Отличительные особенности:
-
Применяется для настройки ролей и коллекций, используемых в нашем плейбуке A-service.
-
Может формироваться из двух других пулов переменных, описанных выше.
-
Не используется в динамической конфигурации.
-
Ansible-service (A-service)
Что такое A-service и как мы его формируем достойна отдельной статьи, поэтому, будет рассказано позже. В приближении, это playbook разворачивания хоста и его сервиса с заложенной конфигурацией. К примеру: развернуть Ubuntu 22 и GitLab 16.11.10 только указав для хоста имя A-service и версию вложенного приложения, в данном случае Gitlab.
Заложенная конфигурация, это и есть третий пул переменных конфигурирования.
В рамках статьи рассмотрим только первый и второй пул переменных.
Пример настройки хоста:
all: vars: domain: 'zu.stf' children: subnet_srv: vars: external_router: router1 cidrip: 10.125.0.225/27 hosts: gitlab: number_in_subnet: 6 # dns: 'bind' # dc: 'dc' servicename: gitlab serviceversion: "16.11.10"
-
Основное: смотрим, какой A-service нужно запустить, по названию переменной servicename. Это gitlab.
-
Для развертывания виртуальной машины и подключения нужны IP-адрес и учетные данные:
-
IP-адрес получаем из переменных cidrip (подсеть) и number_in_subnet (номер по порядку в допсети).
-
Учетные данные заложены во втором пуле переменных. Они соответствуют шаблону ОС на платформе, с помощью которых развертывается виртуальная машина.
-
-
A-service проверяет переменную версии приложения — serviceversion. Будет развернута именно указанная версия.
-
В качестве имени машины будет использовано имя хоста inventory.
Получили: развернута машина на Ubuntu 22 (шаблон по умолчанию) с IP-адресом 10.125.0.231 и установленным GitLab версии 16.11.10.
Конфигурация хоста со ссылками на другие хосты
Как вы заметили, в YAML-коде выше были закомментированы строки:
# dns: 'bind' # dc: 'dc'
В этих параметрах указано, какой хост является DNS-сервером (куда ходить за резолвом), а какой — контроллером домена (где будет выполняться аутентификация пользователей для GitLab). Полный файл YAML будет выглядеть следующим образом:
all: vars: domain: 'zu.stf' children: subnet_dmz: vars: external_router: router1 cidrip: 10.12.0.1/27 hosts: bind: number_in_subnet: 3 servicename: bind subnet_srv: vars: external_router: router1 cidrip: 10.125.0.225/27 hosts: gitlab: number_in_subnet: 6 # dns: 'bind' # dc: 'dc' servicename: gitlab serviceversion: "16.11.10" dc: number_in_subnet: 7 dns: 'bind' servicename: dc
Рассмотрим настройку DNS:
-
A-service, который запускал установку GitLab, проверяет наличие переменной dns.
-
Из переменной dns получаем имя хоста — bind.
-
Через стандартный словарь Ansible — hostvars[‘bind’] — получаем IP-адрес.
-
При настройке сети машины с GitLab указываем полученный IP-адрес.
Рассмотрим настройку контроллера домена:
-
A-service, который запускал установку GitLab, проверяет наличие переменной dc.
-
Из переменной dc получаем имя хоста — dc.
-
Через стандартный словарь Ansible — hostvars[‘dc’] — получаем IP-адрес и учетные данные.
-
Для подключения GitLab к контроллеру домена заходим в контроллер через делегирование и создаем учетную запись для аутентификации.
-
Добавляем созданную учетную запись на GitLab.
Конфигурация хоста с помощью параметров других хостов
Мы уже использовали переменные других хостов inventory для настройки целевого хоста через переменную hostvars[].
К примеру, можно было не создавать в A-service GitLab учетную запись для контроллера домена, а получать все хосты, для которых нужно создать учетные данные, в A-service dc. Но нам это не подошло, так как сервис GitLab мы устанавливаем после контроллера домена. У вас может быть своя приоритизация установки A-service.
Введем новую сущность — артефактные переменные.
Артефактные переменные
При развертывании сервисов могут оставаться артефакты: переменные, учетные данные, ключи и т. п. Все данные, которые можно в дальнейшем использовать, мы сохраняем в качестве переменных Ansible inventory хоста в ./host_vars установленного хоста. Их мы и называем артефактными переменными.
Рассмотрим пример установки workstation и iTop.
Для работы workstation нам нужно:
-
Добавить рабочую станцию в домен.
-
Создать учетную запись на контроллере домена.
Для работы iTop нужны:
-
Учетная запись на контроллере домена.
-
Учетная запись от workstation.
YAML-конфигурация будет выглядеть следующим образом:
all: vars: domain: 'zu.stf' children: subnet_dmz: vars: external_router: router1 cidrip: 10.12.0.1/27 hosts: bind: number_in_subnet: 3 servicename: bind subnet_srv: vars: external_router: router1 cidrip: 10.125.0.225/27 hosts: ws1: number_in_subnet: 4 dns: 'dc' dc: 'dc' itop: 'itop' servicename: workstation itop: number_in_subnet: 8 dns: 'dc' dc: 'dc' servicename: itop dc: number_in_subnet: 7 dns: 'bind' servicename: dc
Настройка workstation:
-
Настройка DNS (как для GitLab).
-
Добавление доменного пользователя (как для GitLab).
-
Сохранение учетных данных, сгенерированных на контроллере домена, в ./host_vars/aduser.yml в переменной aduser_list.
Настройка iTop:
-
Настройка DNS (как для GitLab).
-
Добавление доменного пользователя (как для GitLab).
-
Поиск хостов, у которых значение параметра hostvars[‘item’].itop совпадает с именем хоста iTop.
-
Добавление найденных пользователей в базу iTop для аутентификации.
-
Настройка iTop на контроллере домена.
-
Проверка того, что все пользователи, которых нужно указать в iTop, добавлены.
Итог
-
Определили формат конфигурирования хоста:
-
внутренних параметров (версия приложения, IP-адрес);
-
статических параметров, зависящих от других хостов (DNS, контроллера домена);
-
динамических параметров (доменных пользователей для iTop), зависящих от других хостов.
-
-
Рассмотрели сценарии конфигурирования хоста.
-
Определили расположение переменных конфигурирования (это необходимо не только для настройки, но и для разработки).
-
Описали важность такой переменной, как hostvars[].
ссылка на оригинал статьи https://habr.com/ru/articles/884526/
Добавить комментарий