Как установить и настроить Ansible на Ubuntu 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.

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

  1. sudo apt-add-repository ppa:ansible/ansible

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

Затем обновите индекс пакетов вашей системы, чтобы он знал о доступных пакетах в только что включенном PPA:

  1. sudo apt update

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

  1. sudo apt install ansible

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

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

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

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

  1. 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, чтобы подтвердить изменения.

В любое время, когда вы хотите проверить свой инвентарь, вы можете выполнить:

  1. 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.

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

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

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

  1. 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 — Выполнение Ad-Hoc Команд (По желанию)

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

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

  1. 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 через ad-hoc команды, аналогично тому, что мы делали ранее с модулем ping для тестирования соединения. Например, вот как мы можем использовать модуль apt для установки последней версии vim на всех серверах в вашем инвентаризационном файле:

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

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

  1. ansible servers -a "uptime" -u root

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

  1. ansible server1:server2 -m ping -u root

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

Заключение

В этом руководстве вы установили Ansible и настроили файл инвентаря для выполнения команд на лету с контрольного узла Ansible.

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

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

Source:
https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-ansible-on-ubuntu-20-04