Ansible установка и настройка ubuntu

Обновлено: 03.07.2024

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Данный мануал поможет установить Ansible на Ubuntu 18.04 и разобраться в базовых понятиях.

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

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

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

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

Конфигурационные файлы в основном записываются в формате YAML. Ansible может взаимодействовать с клиентами через инструменты командной строки или с помощью сценариев (которые также называются Playbooks).

Требования

  • Сервер Ubuntu 18.04 (инструкции по начальной настройке можно найти здесь).
  • SSH-ключи (настроить их вам поможет мануал Установка SSH-ключей в Ubuntu 18.04).

1: Установка Ansible

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

Используйте для установки PPA-репозиторий. Сначала обновите индекс пакетов и установите software-properties-common, пакет, который упрощает управление независимыми программными репозиториями.

sudo apt update
sudo apt install software-properties-common

Теперь можно добавить репозиторий PPA Ansible:

sudo apt-add-repository ppa:ansible/ansible

Нажмите Enter, чтобы принять PPA.

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

sudo apt update
sudo apt install ansible

2: Настройка SSH-доступа к хостам Ansible

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

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

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

Перейдите в сессию пользователя root:

Откройте файл authorized_keys:

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

Поскольку для запуска модулей Ansible использует интерпретатор python, который находится в /usr/bin/python, вам нужно установить на хост Python 2 (иначе Ansible не сможет взаимодействовать с ним). Запустите следующие команды:

sudo apt update
sudo apt install python

Закройте подключение к клиенту:

Повторите этот процесс для каждого клиента Ansible.

3: Настройка хостов Ansible

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

sudo nano /etc/ansible/hosts

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

Закомментировав все настройки, добавьте в файл свои хосты.

Файл hosts довольно гибкий. В данном случае используйте такой синтаксис:

[group_name] alias ansible_ssh_host=your_server_ip

Тег group_name позволяет ссылаться сразу на несколько серверов; alias задаёт имя сервера.

Предположим, в данной настройке есть три сервера, которые нужно добавить в Ansible. Чтобы получить доступ к этим серверам с сервера Ansible, введите:

При этом система не должна запрашивать паролей. Предположим, серверы называются host1, host2 и host3 и имеют следующие IP-адреса: 203.0.113.1, 203.0.113.2 и 203.0.113.3 соответственно. Группа будет называться servers.

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

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

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

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

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

На компьютере Ansible в данном случае используется пользователь 8host. Потому Ansible попытается подключиться к серверам как ssh 8host@server. Это не сработает, если пользователя 8host не существует в удалённой системе.

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

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

Сюда можно поместить настройки.

Сохраните и закройте файл.

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

4: Простые команды Ansible

Теперь хосты настроены и готовы к работе. Попробуйте запустить первую команду, например, ping.

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 в большинстве случаев работает как обычная утилита Linux, но в системе Ansible он проверяет взаимодействие между серверами.

Модуль ping не требует никаких аргументов. Попробуйте запустить другую команду с аргументом –а.

Модуль 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 в CentOS/RedHat

Чтобы установить ansible для начала, стоит подключить репозиторий EPEL, вот статья как это сделать:

После чего, обновим ОС:

Устанавливаем ansible из пакета:

Установка Ansible в Fedora

После чего, обновим ОС:

Устанавливаем ansible из пакета:

Или можно установить ansible как описывалось для Centos.

Установка Ansible в Debian/Ubuntu

Для Ubuntu 14.04 LTS

Для установки, на управляющем сервере введите:

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

И собственно, выполняем установку:

Установка Ansible на Mac OS X

Нашел пакет ansible в репозитории homebrew, попробовал установить:

Установку можно выполнить и через python:

Чтобы обновить, используйте:

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

Если инструменты не установлены, вы увидите этот вывод:

Установка ansible через GIT

Так же, вы можете установить ансибл из github.

Клонируем ansible с github-а:

Проверяем, загрузились ли модули:

Установить некоторые необходимые модули:

Собираем и устанавливаем:

Установим environment для ансибл:

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

Проверка версии ansible

Проверяем версию ansible:

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

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

Настройка Ansible в Unix/Linux

Сам конфигурационный файл описывается в формате INI. Так же, имеется возможность переопределения части конфигурации( можно даже всего конфига) в параметрах playbook или в переменных окружения.
При выполнении команд, Ansible выполняет проверку и ищет наличия файла с конфигурациями в следующих расположениях:
Параметр ANSIBLE_CONFIG проверяется переменная окружения, который может быть указывать на файл конфигурации.

Настройка через переменные окружения

Много опций, можно задать с помощью переменного окружения, для этого стоит использовать префикс ANSIBLE_ перед названием самого параметра с конфигурацией (большими буквами). Например:

После чего переменная ANSIBLE_SUDO_USER может быть использована в playbook.

Настройка в ansible.cfg

Самих параметров в Ansible конфигурации много, но основные я перечислю:

  • hostfile: Данная опция указывает на путь к inventory file. В нем хранится список ваших хостов, к которым Ansible сможет выполнить подключение.
    Например: hostfile = /etc/ansible/hosts
  • library: Путь к папке. В ней сохранены все модули Ansible.
    Например: library = /usr/share/ansible
  • forks: Задается количество процессов, которые может породить Ansible. По-умолчанию параметр установлен в 5.
    Например: forks = 5
  • sudo_user: Пользователь который будет использоватся по умолчанию и от которого Ansible собственно будет выполнять запуск команд на удаленных нодах.
    Например: sudo_user = root
  • remote_port: Порт для соединения по SSH к нодам (по умолчанию использует стандартный 22-й порт).
    Например: remote_port = 22
  • host_key_checking: Данная опция дает возможность выключить проверку SSH–ключа на хосте, но по-умолчанию даная проверка включена.
    Например: host_key_checking = False
  • timeout: Данная опция задает таймаут ( время попытки подключения по SSH).
    Например: timeout = 60
  • log_path: Путь для сохранения лог-файлов. По-умолчанию Ansible не сохранит их вообще.
    Например: log_path = /var/log/ansible.log

Пишем первый файл конфигурации Ansible

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

Также создаем директорию для сохранения всех модулей для Ansible и так же, директорию для сохранения всех логов (куда же без них):

Подошло время к созданию файл ansible.cfg:

В него прописываем:

Указываем обслуживаемые сервера в host inventory

Как я описывал раньше, данный файл, служит для внесения IP адресов всех имеющихся нод ( те, которые будут обслуживаться) и так же, сгруппирую их. Для этого создаем файл inventory:

И добавляем IP всех удаленных хостов:

Возьму для примера, один сервер на локальной машине с 192.168.1.216.

Генерация ключа для ansible

Как я говорил ранее, ansible использует подключение SSH по ключу (для доступа к настраиваемым серверам), по этому, нужно сгенерировать его:

Или более расширенный вариант:

Заблокирую доступ к SSH каталогу, что только вы cмогли читать или писать в данную папку:

Нужно изменить разрешения, чтобы сохранить этоти файлы в безопасности:

Создаем простой ключ, все пропускаем (нажимаем enter на все вопросы). После того как ключ сгенерировали, нужно его передать на все имеющийся ноды, для этого есть команда:

PS: И так для каждой управляемой ноды!

Выставим правильные права:

Чтобы проверить работает ли все хорошо, можно подключится на сервер по SSH и если не спросит пароль, то все работает хорошо ( можно и выполнить ПИНГ на удаленный хост с сервера ансибл).

Можно попинговать обслуживаемые сервера:

Можно пингануть и проверить все сервера:

Можно так же, выполнить пинг по группированной группе:

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

We can specify multiple hosts by separating them with colons:

Проверка аптайма на серверах:

Проверить hostname и архитектуру на всех нодах:

Если нам нужен выход в файл, то можно и это сделать:

Управление ansible конфигурациями

Работаем с playbook-ами

На playbook-ах основан собственно весь ansible, так как они служат ( содержат) для выполнения разных задач. Каждая написанная задача внутри самого Ansible использует кусок кода-модуля. Плейбуки, используют формат YAML, но собственно, любые другие ваши модули могут быть написаны на любом языке программирования.

YAML

Каждый плейбук пишется на языке YAML и для ансибл, почти каждый YAML файл начинается с некоторого списка, а этот элемент данного списка — список пар «ключ-значение»(иногда зовут словарем).

Словарь представлен в виде «ключ:» (двоеточие и пробел) «значение»:

При необходимости словари могут быть представлены в сокращенной форме:

Можно указать логические значение (истина/ложь) так:

Целиком наш пример YAML–файла будет выглядеть так:

Этого достаточно для начала написания playbooks.

Пишем наш первый playbook

Playbooks может состоять из списка обслуживаемых серверов, переменных пользователя, задач, обработчиков (хендлеров) и т.д. Большинство настроек конфигурации можно переопределить в playbook. Каждый playbook состоит из одного или более действия (игры) в списке.

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

В качестве примера давайте рассмотрим процесс установки nginx.
Создадим директорию, где будут хранится playbooks:

Создадим файл setup_nginx.yml в директории playbooks:

со следующим содержанием:

Давайте рассмотрим содержимое:

Команды

playbook для ansible
Выполнение плейбука с названием test_job.yml для определенного хоста или группы хостов (прописано в файле):

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

Примеры

Теперь, если хотите скопирывать ТОЛЬКО MY_FILE_HERE_1, выполните:

Если хотите наоборот, скопировать все, НО КРОМЕ MY_FILE_HERE_1, запустите:

Пример хэш-цикла в ансибль:

Копируем файл на удаленный сервер:

Мы же создадим чистую роль:

PS: У меня запускается с текущей директории ( где находится проект с ансиблом).

2 thoughts on “ Установка и настройка Ansible в Unix/Linux ”

Приветствую тебя. Сперва хочу поблагодарить тебя за проделанный труд. От души! Ну а теперь к делу. Скажи пожалуйста, как установить определенную версия ansible? Возможно ли это? Или всегда будет устанавливаться последняя? И еще, может ли быть какое-либо противоречие, если например писал playbook в одной версии, а пытаешься выполнить в другой?

Спасибо за статью! Но для чайников можно было подробней расписать использование утилиты ssh-copy-id. Как минимум то, что при ее использовании надо перейти в каталог .ssh затем уже ее использовать с опцией -i [ ssh-copy-id -i *.pub root@root@ip_адрес_настраиваемого_сервера ]

Добавить комментарий Отменить ответ

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

Инструкция по установке Ansible на виртуальный сервер под управлением Ubuntu 18.04.

Что такое Ansible?

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

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

Установка

Обновите локальную базу пакетов:

sudo apt update

Для начала установите пакет software-properties-common, который позволяет легко управлять дистрибутивами и источниками программного обеспечения от независимых поставщиков:

sudo apt install software-properties-common

С помощью этого инструмента можно управлять персональными архивами пакетов (PPA), которые позволяют распространять собственные пакеты и утилиты без лишних сложностей.

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

sudo apt-add-repository ppa:ansible/ansible

В процессе присоединения потребуется нажать клавишу Enter.

Еще раз обновите базу пакетов и выполните установку Ansible:

sudo apt update sudo apt install ansible

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

Настройка доступа к хостам по SSH

Ansible в основном связывается с клиентскими компьютерами через SSH.

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

Подробнее о том, что такое SSH-ключи и как с ними работать, можно прочитать в нашей инструкции.

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

ssh-keygen -t rsa -b 4096

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

Например: ssh-copy-id root@123.122.123.122

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

Используя следующий синтаксис, где group_name - удобное название группы серверов, а your_server_ip_1 и your_server_ip_2 - IP-адреса обслуживаемых серверов, добавьте строки в открытый файл hosts:

[group_name]
your_server_ip_1
your_server_ip_2

[servers_ubuntu]
123.122.123.122
46.122.123.20

Сохраните изменения и закройте файл.

Важно: на каждом хосте должен быть установлен язык python и пакет python-apt:

apt-get install python python-apt

Проверка подключения

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

sudo mkdir /etc/ansible/group_vars

Создайте подкаталог с названием вашей группы:

sudo nano /etc/ansible/group_vars/group_name

sudo nano /etc/ansible/group_vars/servers_ubuntu

Вставьте следующую строку, вместо user_name указав имя вашего пользователя:

Примечание: отдельные хосты можно настроить, создав алиасы и файлы с именами в соответствии с их псевдонимом в каталоге /etc/ansible/host_vars


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

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

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

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

Ansible работает путем настройки клиентских компьютеров, называемых хосты Ansible (Ansible hosts), с компьютера, на котором установлены и настроены компоненты Ansible, который называется узлом управления Ansible (Ansible control node).

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

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

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

Конфигурационные файлы в основном написаны в формате YAML. Ansible может взаимодействовать с хостами либо с помощью инструментов командной строки, либо с помощью сценариев конфигурации, известных как Playbook (плейбук).

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

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

На узле управления выполните следующую команду, чтобы включить PPA (personal package archive) официального проекта в список источников системы sources.list:

$ sudo apt-add-repository ppa:ansible/ansible
Press ENTER when prompted to accept the PPA addition.

Нажмем ENTER. Затем обновите индекс пакетов системы, чтобы он знал о пакетах, доступных в недавно включенном 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] с тремя различными серверами в ней, каждый из которых идентифицируется пользовательским псевдонимом: server1, server2 и server3. Обязательно замените IP-адреса на IP-адреса ваших узлов Ansible.

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

Сохраните и закройте файл.

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

$ ansible-inventory --list -y

Вы увидите вывод, подобный этому, но содержащий вашу собственную серверную инфраструктуру, как определено в файле инвентаря:

all:
children:
servers:
hosts:
server1:
ansible_host: 192.168.1.111
ansible_python_interpreter: /usr/bin/python3
server2:
ansible_host: 192.168.1.112
ansible_python_interpreter: /usr/bin/python3
server3:
ansible_host: 192.168.1.113
ansible_python_interpreter: /usr/bin/python3
ungrouped: <>

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

Шаг 3 — Тестирование соединения

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

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

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

На главном хосте управления Ansible выполните команду:

$ ansible all -m ping -u root

Эта команда будет использовать встроенный модуль ping для запуска теста подключения на всех узлах из вашего инвентаря по-умолчанию, подключаясь как root. Модуль ping будет выполнен успешно:

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

Вы должны получить результат, подобный этому:

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

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

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

Step 4 — Отправка команд (опционально)

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

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

$ ansible all -a "df -h" -u root

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

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

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

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

Так можно проверить время безотказной работы каждого узла в группе серверов:

$ ansible servers -a "uptime" -u root

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

$ ansible server1:server2 -m ping -u root

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

Заключение

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

После того, как вы убедились, что можете подключаться и управлять своей инфраструктурой с центрального сервера-контроллера Ansible, вы можете выполнить любую команду или плейбук, которую хотите, на этих удаленных хостах. Для новых серверов будет полезен плейбук Initial Server Setup. Вы также можете научиться писать свои собственные плейбуки с помощью руководства Configuration Management 101: Writing Ansible Playbooks.

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

Читайте также: