береженого кольт бережет
береженого кольт бережет

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

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

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

Это руководство поможет научиться устанавливать Ansible на сервер Ubuntu 18.04 и покажет основы использования этого программного обеспечения.

Как работает Ansible?

Система управления Ansible настраивает хосты Ansible (клиентские компьютеры) с узла управления Ansible (компьютер, где установлены и настроены компоненты Ansible).

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

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

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

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

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

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

Чтобы добавить архив PPA (архив персональных пакетов) официального проекта в список источников вашей системы, запустите на узле управления следующую команду:

sudo apt-add-repository ppa:ansible/ansible

Нажмите ENTER в диалоговом окне, чтобы подтвердить добавление PPA.

Обновите указатель системного пакета еще раз, чтобы в нем отразились все пакеты, доступные в добавленном архиве PPA:

sudo apt update

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

sudo apt install ansible

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

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

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

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

sudo nano /etc/ansible/hosts

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

Файл инвентаризации, используемый Ansible по умолчанию, содержит ряд примеров, которые вы можете использовать как образец при настройке инвентаризации. В следующем примере определяется группа [servers] с тремя разными серверами, каждый из которых имеет собственный индентификатор: server1server2 и 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

[servers]
server1 ansible_host=203.0.113.111
server2 ansible_host=203.0.113.112
server3 ansible_host=203.0.113.113

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

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

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

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

ansible-inventory --list -y

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

Outputall:
  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.

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

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

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

Когда вы получите от хоста ответ «pong», это будет означать, что вы готовы запускать команды и плейбуки 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