Как установить и настроить Ansible в Ubuntu 18.04

Вступление

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

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

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

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

Ansible работает путем настройки клиентских компьютеров с компьютера, на котором установлены и настроены компоненты Ansible.

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

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

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

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

Предпосылки

Чтобы следовать этому уроку, вам понадобится:

  • Два или более серверов Ubuntu 18.04. Один из них будет использоваться как вашAnsible server, а оставшийся - как вашAnsible hosts. У каждого должен быть пользователь, отличный отroot, с привилегиямиsudo и настроенным базовым брандмауэром. Вы можете настроить это, следуя нашимInitial Server Setup Guide for Ubuntu 18.04. Обратите внимание, что в примерах, приведенных в этом руководстве, указаны три хоста Ansible, но показанные команды и конфигурации можно настроить для любого количества клиентов.

  • Ключи SSH, сгенерированные для пользователя, отличного отroot, на вашем сервере Ansible. Для этого следуйте шагу 1 нашего руководства поHow to Set Up SSH Keys on Ubuntu 18.04. В рамках этого руководства вы можете сохранить пару ключей в папке по умолчанию (~/.ssh/id_rsa), и вам не нужно защищать ее паролем.

[[step-1 -—- install-ansible]] == Шаг 1. Установка Ansible

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

Чтобы получить последнюю версию Ansible для Ubuntu, вы можете добавить PPA проекта (личный архив пакетов) в вашу систему. Однако перед этим вы должны сначала убедиться, что у вас установлен пакетsoftware-properties-common. Это программное обеспечение облегчит управление этим и другими независимыми хранилищами программного обеспечения:

sudo apt update
sudo apt install software-properties-common

Затем добавьте Ansible PPA, введя следующую команду:

sudo apt-add-repository ppa:ansible/ansible

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

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

sudo apt update

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

sudo apt install ansible

Ваш Ansible сервер теперь имеет все программное обеспечение, необходимое для администрирования ваших хостов.

[[step-2 -—- configuring-ssh-access-to-the-ansible-hosts]] == Шаг 2. Настройка доступа SSH к Ansible Hosts

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

На своем сервере Ansible используйте командуcat, чтобы вывести содержимое файла открытого ключа SSH вашего пользователя без полномочий root на вывод терминала:

cat ~/.ssh/id_rsa.pub

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

ssh sammy@ansible_host_ip

Переключитесь на пользователяroot клиентского компьютера:

su -

Как пользовательroot откройтеauthorized_keys в каталоге~/.ssh:

nano ~/.ssh/authorized_keys

Вставьте в файл SSH-ключ пользователя сервера Ansible, затем сохраните файл и закройте редактор (нажмитеCTRL + X,Y, затемENTER). Затем выполните командуexit, чтобы вернуться к пользователю хоста, отличному отroot:

exit

Наконец, поскольку Ansible использует интерпретатор Python, расположенный в/usr/bin/python, для запуска своих модулей, вам необходимо установить Python 2 на хост, чтобы Ansible мог с ним взаимодействовать. Выполните следующие команды, чтобы обновить индекс пакета хоста и установить пакетpython:

sudo apt update
sudo apt install python

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

exit

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

[[step-3 -—- setting-up-ansible-hosts]] == Шаг 3. Настройка Ansible Hosts

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

Откройте файл с правамиsudo, например:

sudo nano /etc/ansible/hosts

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

Файлhosts довольно гибкий и может быть настроен несколькими способами. Синтаксис, который мы собираемся использовать, выглядит следующим образом:

[group_name]
alias ansible_host=your_server_ip

[.note] #Note: С выпуском Ansible версии 2.0 переменная конфигурацииansible_host заменила исходную переменнуюansible_ssh_host. Если вы используете старую версию Ansible, вам следует использовать более старую, более длинную переменную.
#

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

Итак, в нашем сценарии мы представляем, что у нас есть три сервера, которыми мы будем управлять с помощью Ansible. На данный момент эти серверы доступны с сервера Ansible, набрав:

ssh root@ansible_host_ip

Вам не нужно запрашивать пароль, если вы правильно его настроили. В целях демонстрации предположим, что IP-адреса наших хостов:203.0.113.1,203.0.113.2 и203.0.113.3. Мы настроим это так, чтобы мы могли обращаться к ним по отдельности какhost1,host2 иhost3, или как к группе с именемservers.

Это блок, который мы должны добавить в наш файлhosts для этого:

/etc/ansible/hosts

[servers]
host1 ansible_host=203.0.113.1
host2 ansible_host=203.0.113.2
host3 ansible_host=203.0.113.3

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

С нашими текущими настройками, если мы попытаемся подключиться к любому из этих хостов с помощью Ansible, команда потерпит неудачу (при условии, что вы не работаете как пользователь root). Это связано с тем, что ваш SSH-ключ встроен для пользователяroot в удаленных системах, и Ansible по умолчанию будет пытаться подключиться как ваш текущий пользователь. Попытка подключения получит эту ошибку:

Outputhost1 | UNREACHABLE! => {
    "changed": false,
    "msg": "Failed to connect to the host via ssh.",
    "unreachable": true
}

На сервере Ansible мы используем пользователяsammy. Ansible попытается подключиться к каждому хосту сssh sammy@server. Это не сработает, если пользовательsammy также не находится в удаленной системе.

Мы можем создать файл, который сообщает всем серверам в группе «серверы» подключиться как пользовательroot.

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

sudo mkdir /etc/ansible/group_vars
sudo nano /etc/ansible/group_vars/servers

Файлы YAML начинаются с «-», поэтому убедитесь, что вы не забыли эту часть.

/etc/ansible/group_vars/servers

---
ansible_user: root

[.note] #Note: Подобно переменнойansible_host,ansible_user заменил переменнуюansible_ssh_user в версии 2.0. Если вы используете более старую версию Ansible, чем 2.0, обязательно используйте более старую, более длинную переменную.
#

Сохраните и закройте этот файл, когда вы закончите.

Если вы хотите указать детали конфигурации для каждого сервера, независимо от групповой ассоциации, вы можете поместить эти детали в файл по адресу/etc/ansible/group_vars/all. Отдельные хосты можно настроить, создав файлы с именами по их псевдонимам в каталоге/etc/ansible/host_vars.

[[step-4 -—- using-simple-ansible-commands]] == Шаг 4. Использование простых команд Ansible

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

Пропингуйте все серверы, которые вы настроили, набрав:

ansible -m ping all

Вывод пинга

host1 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

host3 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

host2 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

Это основной тест, чтобы убедиться, что Ansible имеет соединение со всеми своими хостами.

all означает все хосты. Мы могли бы так же легко указать группу:

ansible -m ping servers

Мы также можем указать отдельный хост:

ansible -m ping host1

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

ansible -m ping host1:host2

Часть команды-m ping - это инструкция для Ansible использовать модуль «ping». Это в основном команды, которые вы можете запускать на своих удаленных хостах. Модуль ping работает во многом подобно обычной утилитеping в Linux, но вместо этого он проверяет возможность подключения Ansible.

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

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

ansible -m shell -a 'free -m' host1

Выход оболочки

host1 | SUCCESS | rc=0 >>
             total       used       free     shared    buffers     cached
Mem:          3954        227       3726          0         14         93
-/+ buffers/cache:        119       3834
Swap:            0          0          0

После этого ваш Ansible сервер настроен, и вы можете успешно общаться и контролировать свои хосты.

Заключение

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

Хотя это полезно, мы не рассмотрели самую мощную функцию Ansible в этой статье: Playbooks. Ansible Playbooks - это мощный и простой способ управления конфигурациями серверов и развертыванием на нескольких машинах. Для введения в Playbooks см.this guide. Кроме того, мы рекомендуем вам проверитьofficial Ansible documentation, чтобы узнать больше об этом инструменте.

Related