Как настроить файл инвентаризации Ansible (пошаговое руководство)

Содержание статьи

Ansible, открытый механизм автоматизации ИТ, оптимизирует задачи в ИТ-средах, повышая масштабируемость, согласованность и надежность. Ansible является универсальным и выполняет три основных задачи: настройку серверов (провизининг), корректировку настроек и управление услугами (управление конфигурацией) и автоматизацию развертывания приложений. Он популярен для автоматизации задач на серверах, виртуальных машинах и облаках. Ansible может настраивать разные системы, включая базы данных, хранилища, сети и брандмауэры.

ЧТО ТАКОЕ ФАЙЛ ИНВЕНТАРИИ ANSIBLE?

У Ansible управление большим количеством удаленных серверов может быть сложной задачей. Чтобы облегчить этот процесс, вы можете группировать и нацеливать свои серверы с помощью специального файла под названием «файл инвентаря Ansible». Этот файл помогает организовать ваши серверы в логических группах, что облегчает применение конфигураций или выполнение команд на определенных наборах серверов.

Файл инвентаризации Ansible служит инструментом отслеживания системных администраторов для управления их удаленными системами. По умолчанию, Ansible использует файл хоста Ansible, расположенный в каталоге /etc/ansible, для перечисления всех управляемых удаленных узлов. Однако Ansible предлагает гибкость, позволяя пользователям создавать свои файлы инвентаризации, адаптированные к их потребностям. Это особенно полезно в сложных средах, где разделение управляемых узлов на отдельные файлы инвентаризации является предпочтительным вариантом, чем стандартная настройка файла Ansible.

В этом учебнике мы рассмотрим установку Ansible на Ubuntu 22.04 и настройку собственного файла инвентаризации Ansible на узле управления.

ПРЕДПОСЫЛКИ

Для настройки файла инвентаризации Ansible необходимы следующие предпосылки:

  • Узел управления Ansible: это должна быть машина с Ubuntu 22.04, на которой установлена Ansible и настроена для подключения к хостам Ansible с помощью ключей SSH. Важно иметь на этом узле стандартного пользователя с правами sudo и убедиться, что брандмауэр включен в соответствии со стандартными процедурами настройки сервера.
  • Управляемые узлы/хосты Ansible: это удаленные серверы под управлением Ubuntu 22.04, которые будут управляться Ansible. Вы должны иметь по крайней мере два таких сервера, настроенных и доступных из узла управления через SSH.

КАК УСТАНОВИТЬ ANSIBLE НА UBUNTU 22.04?

Сначала вы установите Ansible на контрольном узле. Чтобы установить Ansible на контрольном узле и настроить SSH-соединение без пароля с удаленными хостами, выполните следующие действия.

ШАГ 1: УСТАНОВИТЬ ANSIBLE

Войдите на контрольный узел через SSH или терминал и обновите списки системных пакетов с помощью такой команды:

$ sudo apt update

Чтобы установить Ansible и его зависимости, воспользуйтесь следующей командой:

$ sudo apt install -y ansible

ШАГ 2: ПРОВЕРКА УСТАНОВКИ ANSIBLE

Проверьте версию Ansible, чтобы убедиться в успешности установки:

$ansible --version

ШАГ 3: НАСТРОЙКА ФАЙЛА ИНВЕНТАРИИ

Откройте файл инвентаря по умолчанию с помощью текстового редактора:

$ sudo nano /etc/ansible/hosts

По умолчанию файл содержит комментарии и примеры. Вы можете указать имена хостов или IP-адреса и сгруппировать их при необходимости.

ШАГ 4: СОЗДАНИЕ ПАРЫ КЛЮЧЕЙ SSH

Создайте пару ключей SSH на узле управления:

$ssh-keygen

Вышеуказанная команда создает пару открытых и закрытых ключей, хранящихся в каталоге ~/.ssh/.

ШАГ 5: КОПИРОВАНИЕ ОТКРЫТОГО КЛЮЧА НА УДАЛЕНЫЕ ХОСТЫ

Используйте ssh-copy-id для копирования открытого ключа на каждый удаленный хост:

ssh-copy-id user@remote_host_ip

Замените user на свое имя пользователя, а remote_host_ip на IP-адрес удаленного хоста.

Введите пароль для удаленного хоста, когда появится запрос.

ШАГ 6: ПРОВЕРКА БЕЗПАРОЛЬНОГО SSH-СОЕДИНЕНИЯ

Проверьте SSH-соединение с удаленным хостом без ввода пароля:

$ssh user@remote_host_ip

Вы должны иметь возможность войти в систему без запроса пароля.

Если у вас есть дополнительные хосты, повторите процесс для дополнительных хостов. Повторите шаги 5 и 6 для каждого дополнительного удаленного хоста, убедившись, что можно подключиться к каждому из них через SSH без пароля.

Выполнив эти шаги, вы установите Ansible на свой контрольный узел и наладите беспарольное SSH-соединение с удаленными хостами, что обеспечит бесперебойную коммуникацию для задач автоматизации Ansible.

КАК СОЗДАТЬ СОБСТВЕННЫЙ ФАЙЛ ИНВЕНТАРИЗАЦИИ ANSIBLE?

Чтобы создать собственный файл инвентаризации для управления несколькими узлами в отдельных проектах в Ansible, выполните следующие действия.

ШАГ 1: СОЗДАЙТЕ КАТАЛОГ ПРОЕКТА

Откройте терминал и создайте каталог для вашего проекта. Например, допустим, вы хотите создать каталог проекта с названием «ansible»:

$ mkdir ansible && cd ansible

ШАГ 2: СОЗДАТЬ ФАЙЛ ИНВЕНТАРИИ

В каталоге проекта создайте простой текстовый файл для вашего инвентаря:

$ sudo nano inventory

Вы можете назвать файл произвольно.

ШАГ 3: ДОБАВИТЬ УПРАВЛЯЕМЫЕ УЗЛЫ

В файле инвентаризации Ansible перечислите IP-адреса ваших управляемых узлов, каждый в отдельной строке:

192.168.1.6

198.148.1.5

Добавьте больше узлов при необходимости. После добавления хостов сохраните изменения и закройте текстовый редактор.

ШАГ 4: ПРОВЕРКА УПРАВЛЯЕМЫХ ХОСТОВ

Убедитесь, что ваши управляемые хосты указаны правильно, используя команду инвентаризации.

$ ansible-inventory -i ansible/inventory --list

Укажите полный путь к файлу инвентаризации с помощью опции -i.

ШАГ 5: ВЫПОЛНЕНИЕ ЗАДАНИЙ С ИСПОЛЬЗОВАНИЕМ НАСТРОЕННОЙ ИНВЕНТАРИЗАЦИИ

После создания настроенного файла инвентаризации вы можете выполнять задачи Ansible или плейбуки, направленные на управляемые хосты:

$ sudo ansible -i ansible/inventory -m ping all

Замените -m ping любой другой модуль Ansible или укажите плейбук для выполнения на хостах, перечисленных в вашем файле инвентаризации.

Выполнив эти шаги, вы эффективно организуете и управляете инвентаризацией Ansible, создавая отдельные файлы инвентаризации для различных проектов, упрощая отслеживание ресурсов и сотрудничество между системными администраторами.

ОРГАНИЗАЦИЯ СЕРВЕРОВ В ГРУППЫ И ПОДГРУППЫ В ФАЙЛЕ ИНВЕНТАРИЗАЦИИ ANSIBLE

Чтобы организовать узлы в группы и подгруппы в Ansible для лучшего управления инвентаризацией, выполните следующие действия.

ШАГ 1: ГРУППИРОВКА СЕРВЕРОВ

В файле инвентаризации организуйте серверы в разные группы и подгруппы для лучшего управления. Эта практика не только позволяет организовать хосты, но позволяет использовать групповые переменные, что полезно для управления несколькими средами стадирования с помощью Ansible.

[webservers]

192.168.1.6

192.168.1.5

[dbservers]

192.168.1.7

server_hostname

[development]

192.168.1.5

192.168.1.7

[production]

192.168.1.5

server_hostname

ШАГ 2: ИСПОЛЬЗОВАНИЕ МЕТАГРУПП

Вы можете объединить несколько групп в качестве дочерних групп под «родительской» группой, создав метагруппу. Это позволяет организовать более подробную структуру.

ПРИМЕР:

[web_dev]

192.168.1.6

[web_prod]

192.168.1.5

[db_dev]

192.168.1.7

[db_prod]

server_hostname

[webservers:children]

web_dev

web_prod

[dbservers:children]

db_dev

db_prod

[development:children]

web_dev

db_dev

[production:children]

web_prod

db_prod

ШАГ 4: УЛУЧШЕНИЕ ТАРГЕТИРОВАНИЯ

Разбейте группы или создайте альтернативные схемы, чтобы при необходимости ориентироваться на меньшие группы серверов, особенно если количество серверов растет.

КАК НАСТРОИТЬ ПСЕВДОНИМЫХ ХОСТОВ В ИНВЕНТАРЕ ANSIBLE?

Используйте псевдонимы для наименования серверов, чтобы облегчить поиск во время выполнения команд и плейбуков.

Добавьте переменную с названием ansible_host после имени псевдонима, содержащей соответствующий IP-адрес или имя сервера.

ПРИМЕР:

server1 ansible_host=192.168.1.6

server2 ansible_host=192.168.1.5

server3 ansible_host=192.168.1.7

server4 ansible_host=server_hostname

При выполнении команд и сценариев используйте ссылки на серверы по их псевдонимам, а не по IP-адресам или именам хостов. Это упрощает таргетинг на отдельные серверы.

$ sudo ansible -i ansible/inventory -m ping server1

КАК НАСТРОИТЬ ИМЕНА ПЕРЕМЕННЫХ В ФАЙЛЕ ИНВЕНТАРЕ ANSIBLE?

В Ansible переменные играют немаловажную роль в управлении отличиями между управляемыми хостами. Они позволяют отображать различия между системами при выполнении плейбуков или специальных команд. Например, в предыдущем разделе мы использовали переменный ansible_host , чтобы указать IP-адрес управляемого узла.

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

Для каждой записи сервера мы определяем две переменные: ansible_host, указывающий IP-адрес хоста, и ansible_user, указывающий пользователя, используемого для удаленного соединения.

server01 ansible_host=192.168.1.6 ansible_user=root

server02 ansible_host=192.168.1.5 ansible_user=user

Кроме того, переменные можно также определять на уровне группы, что позволяет оптимизировать управление на нескольких хостах. В этом примере мы создаем две отдельные группы переменных – [webservers_a:vars] и [webservers_b:vars] – каждая из которых определяет пользователя для подключения к управляемым узлам.

[webservers_a]

server01 ansible_host=192.168.1.6

[webservers_b]

server02 ansible_host=192.168.1.5

[webservers_a:vars]

ansible_user=root

[webservers_b:vars]

ansible_user=user

Настроив переменные таким образом, вы можете эффективно управлять атрибутами, специфичными для хоста, и оптимизировать операции Ansible на нескольких хостах и нескольких группах.

ИСПОЛЬЗУЙТЕ ШАБЛОНЫ ДЛЯ ВЫПОЛНЕНИЯ КОМАНД И ПЛАНОВ ДЕЙСТВИЙ

При выполнении команд и планов действий с помощью Ansible очень важно указать цель. Шаблоны предлагают гибкий способ таргетинга на конкретные хосты, группы или подгруппы в вашем файле инвентаризации, поддерживая регулярные выражения и символы-заменители.

Рассмотрим следующий файл инвентаризации:

[webservers]

192.168.1.6

192.168.1.5

[dbservers]

192.168.1.7

server_hostname

[development]

192.168.1.6

192.168.1.7

[production]

192.168.1.5

server_hostname

Теперь допустим, что вам нужно выполнить команду, направленную только на серверы баз данных, работающих в производственной среде. Вы можете использовать следующий шаблон:

$ ansible dbservers:\&production -m ping

Здесь символ & обозначает логическую операцию AND, указывая, что действительные цели должны присутствовать в обеих группах. Поскольку это специальная команда в Bash, мы добавляем символ \escape, чтобы избежать ошибок командной строки.
В качестве альтернативы, чтобы выбрать только серверы в группе базы данных, но не в производстве, вы можете использовать:

$ ansible dbservers:\!production -m ping

Символ « означает, что цель не должна относиться к определенной группе. Опять же, для обработки специальных символов в Bash мы используем символ экранирования.

Более продвинутые параметры шаблонов, например позиционные шаблоны и регулярные выражения, можно найти в документации Ansible .

ЗАКЛЮЧЕНИЕ

Данное руководство содержит исчерпывающий обзор инвентаризации Ansible. Мы рассмотрели методы организации узлов в группах и подгруппах, настройку переменных инвентаризации и использование шаблонов для таргетинга на конкретные группы серверов во время выполнения команд и плейбуков.

Если вы используете сервер VPS Linux, вы можете также использовать Ansible и настраивать файлы инвентаризации.

 

 

Оставьте свои отзывы

Поделитесь своим мнением и помогите нам стать лучше! Ваши отзывы важны для нас.

Загрузите свою фотографию