Tutorial

Установка и настройка Ansible в Ubuntu 20.04

UbuntuConfiguration ManagementAnsibleUbuntu 20.04

Введение

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

Хотя для систем Linux выпущено много популярных инструментов управления конфигурациями, в том числе Chef и Puppet, эти инструменты сложнее, чем требуется большинству людей. Система Ansible — отличная альтернатива этим инструментам, поскольку имеет простую архитектуру, не требует установки на узлы специального программного обеспечения, использует SSH для выполнения задач автоматизации и файлы YAML для определения деталей выделения ресурсов.

Это руководство поможет научиться устанавливать Ansible на сервер Ubuntu 20.04 и покажет основы использования этого программного обеспечения. Более широкий обзор Ansible как инструмента управления конфигурацией представлен в документе Введение в управление конфигурацией с Ansible.

Предварительные требования

Для данного обучающего руководства вам потребуется следующее:

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

    • Пользователь без привилегий root с привилегиями sudo. Для начала вы можете выполнить шаги 2 и 3, указанные в документе Руководство по начальной настройке сервера с Ubuntu 20.04. Если вы используете в качестве узла управления Ansible удаленный сервер, вы должны выполнить все шаги, перечисленные в этом руководстве. Это позволит настроить на сервере брандмауэр с помощью ufw и активировать внешний доступ для профиля пользователя без привилегий root, что повысит безопасность удаленного сервера.
    • Пара ключей SSH, ассоциированная с этим пользователем. Для настройки выполните шаг 1 руководства Настройка ключей SSH в Ubuntu 20.04.
  • Один или несколько хостов Ansible: хост Ansible — это любой компьютер, для автоматизации которого настроен узел управления Ansible. В настоящем руководстве предполагается, что ваши хосты Ansible представляют собой удаленные серверы под управлением Ubuntu 20.04. Убедитесь, что каждый хост Ansible соответствует следующим требованиям:

    • Открытый ключ SSH узла управления Ansible добавлен в файл authorized_keys пользователя системы. Это может быть пользователь root или обычный пользователь с привилегиями sudo. Для настройки вы можете выполнить шаг 2 руководства Настройка ключей SSH в Ubuntu 20.04.

Шаг 1 — Установка Ansible

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

Сначала обновите индекс пакетов системы с помощью следующей команды:

  • sudo apt update

После этого обновления вы можете установить программное обеспечение Ansible следующим образом:

  • sudo apt install ansible

Нажмите Y при запросе для подтверждения установки.

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

Шаг 2 — Настройка файла инвентаризации

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

Чтобы изменить заданное по умолчанию содержание файла инвентаризации Ansible, откройте файл /etc/ansible/hosts в предпочитаемом редакторе на узле управления Ansible:

  • sudo nano /etc/ansible/hosts

Примечание. Хотя Ansible обычно создает файл инвентаризации по умолчанию в etc/ansible/hosts​​, вы можете создавать файлы инвентаризации в любом месте, которое соответствует вашим потребностям. В нашем случае вам нужно будет предоставить путь к вашему настраиваемому файлу инвентаризации с помощью параметра -i при запуске команд Ansible и плейбуков. Использование файлов инвентаризации на каждом проекте поможет минимизировать риск запуска плейбука на несоответствующей группе серверов.

Файл инвентаризации, используемый Ansible по умолчанию, содержит ряд примеров, которые вы можете использовать как образец при настройке инвентаризации. В следующем примере определяется группа [servers] с тремя разными серверами, каждый из которых имеет собственный индентификатор: server1, server2 и server3. Обязательно замените выделенные IP-адреса IP-адресами ваших хостов Ansible.

/etc/ansible/hosts
[servers]
server1 ansible_host=203.0.113.111
server2 ansible_host=203.0.113.112
server3 ansible_host=203.0.113.113

[all:vars]
ansible_python_interpreter=/usr/bin/python3

Подгруппа all:vars задает параметр хоста ansible_python_interpreter, который будет действовать для всех хостов, включенных в этот инвентарный список. С этим значением параметра удаленный сервер использует исполняемый файл Python 3 /usr/bin/python3, а не /usr/bin/python (Python 2.7), отсутствующий в последних версиях Ubuntu.

Когда вы закончите, сохраните и закройте файл, нажав CTRL+X, затем Y и ENTER для подтверждения изменений.

Если вы захотите проверить файл инвентаризации, вы можете запустить команду:

  • ansible-inventory --list -y

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

Output
all: children: servers: hosts: server1: ansible_host: 203.0.113.111 ansible_python_interpreter: /usr/bin/python3 server2: ansible_host: 203.0.113.112 ansible_python_interpreter: /usr/bin/python3 server3: ansible_host: 203.0.113.113 ansible_python_interpreter: /usr/bin/python3 ungrouped: {}

После настройки файла инвентаризации у вас появится все необходимое для тестирования подключения к хостам Ansible.

Шаг 3 — Тестирование подключения

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

Для этого руководства мы будем использовать учетную запись root в Ubuntu, поскольку обычно это единственная учетная запись, которая доступна по умолчанию на новых серверах. Если на ваших хостах Ansible уже имеются учетные записи sudo, вам рекомендуется использовать эту учетную запись.

Вы можете использовать аргумент -u, чтобы задать пользователя удаленной системы. Если не указано иное, Ansible попытается подключиться от имени текущего пользователя системы на узле управления.

Запустите на локальном компьютере или узле управления Ansible следующую команду:

  • ansible all -m ping -u root

Эта команда будет использовать встроенный модуль ping хоста Ansible'для тестирования подключения на всех узлах из файла инвентаризации по умолчанию. При этом выполняется подключение от имени пользователя root. Модуль ping тестирует следующее:

  • доступность хостов;
  • наличие действующих учетных данных SSH;
  • способность хостов запускать модули Ansible с помощью Python.

Результаты должны выглядеть примерно следующим образом:

Output
server1 | SUCCESS => { "changed": false, "ping": "pong" } server2 | SUCCESS => { "changed": false, "ping": "pong" } server3 | SUCCESS => { "changed": false, "ping": "pong" }

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

Когда вы получите от хоста ответ "pong", это будет означать, что вы готовы запускать команды и плейбуки Ansible на этом сервере.

Примечание. Если вам не удается успешно получить ответ от ваших серверов, ознакомьтесь в нашем «Руководстве с полезными советами по Ansible» вы найдете подробную информацию о запуске команд Ansible с разными параметрами подключения.

Шаг 4 — Запуск ситуативных команд (опционально)

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

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

  • ansible all -a "df -h" -u root
Output
server1 | CHANGED | rc=0 >> Filesystem Size Used Avail Use% Mounted on udev 3.9G 0 3.9G 0% /dev tmpfs 798M 624K 798M 1% /run /dev/vda1 155G 2.3G 153G 2% / tmpfs 3.9G 0 3.9G 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup /dev/vda15 105M 3.6M 101M 4% /boot/efi tmpfs 798M 0 798M 0% /run/user/0 server2 | CHANGED | rc=0 >> Filesystem Size Used Avail Use% Mounted on udev 2.0G 0 2.0G 0% /dev tmpfs 395M 608K 394M 1% /run /dev/vda1 78G 2.2G 76G 3% / tmpfs 2.0G 0 2.0G 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup /dev/vda15 105M 3.6M 101M 4% /boot/efi tmpfs 395M 0 395M 0% /run/user/0 ...

При желании вы можете заменить выделенную команду df -h любой другой командой.

Также вы можете запускать модули Ansible с помощью ситуативных команд, как мы это делали с модулем ping при тестировании подключения. Например, мы можем использовать модуль apt для установки последней версии vim на все серверы из файла инвентаризации:

  • ansible all -m apt -a "name=vim state=latest" -u root

Вы можете использовать команды Ansible как для отдельных хостов, так и для групп и подгрупп хостов. Например, вы можете проверить время uptime каждого хоста в группе servers с помощью следующей команды:

  • ansible servers -a "uptime" -u root

Можно указать несколько хостов, разделив их имена двоеточиями:

  • ansible server1:server2 -m ping -u root

Дополнительную информацию по использованию Ansible, в том числе по применению плейбуков для автоматизации настройки сервера, можно найти в документе «Справочное руководство по Ansible».

Заключение

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

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

Дополнительную информацию по использованию Ansible можно найти в руководстве с полезными советами по Ansible.

Creative Commons License