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

Published by Leave your thoughts

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

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

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

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

Данное руководство поможет установить Ansible на сервер CentOS 7 и разобраться в базовых настройках.

Требования

  • Сервер CentOS 7 (инструкции по начальной настройке можно найти здесь).
  • Пользователь с доступом к sudo.

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

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

Используйте для установки репозиторий EPEL. Чтобы добавить EPEL в CentOS 7, введите:

sudo yum install epel-release

Затем установите Ansible:

sudo yum install ansible

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

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

Откройте его в текстовом редакторе:

sudo vi /etc/ansible/hosts

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

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

[group_name]
alias ansible_ssh_host=your_server_ip

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

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

ssh root@your_server_ip

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

Предположим, серверы называются host1, host2 и host3 и имеют следующие IP-адреса: 192.0.2.1, 192.0.2.2 и 192.0.2.3 соответственно. Группа будет называться servers.

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

[servers]
host1 ansible_ssh_host=192.0.2.1
host2 ansible_ssh_host=192.0.2.2
host3 ansible_ssh_host=192.0.2.3

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

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

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

Настройте Ansible для подключения к группе servers с помощью пользователя demo. Создайте в структуре Ansible каталог group_vars:

sudo mkdir /etc/ansible/group_vars

В нем нужно создать YAML-файлы для каждой группы хостов.

sudo nano /etc/ansible/group_vars/servers

Добавьте в файл такой код:

---
ansible_ssh_user: demo

Примечание: Файлы YAML начинаются с —.

Сохраните и закройте файл. Теперь Ansible будет подключаться к группе servers как пользователь demo.

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

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

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

ansible -m ping all

Ansible ответит:

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

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

Параметры команды -m ping указывают, что система Ansible должна использовать модуль ping. Эти команды можно запускать на удалённых хостах. Модуль ping в большинстве случаев работает как обычная утилита Linux, но в системе Ansible он проверяет взаимодействие между серверами.

Параметр all значит «все хосты». Вместо него можно задать группу:

ansible -m ping servers

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

ansible -m ping host1

или несколько хостов (разделите их с помощью двоеточий).

ansible -m ping host1:host2

Модуль shell позволяет отправлять команды на удалённый хост и получать вывод. К примеру, чтобы узнать уровень использования памяти на машине host1, нужно ввести. Чтобы задать аргумент, используется флаг –a:

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 – использования сценариев Playbooks. Информацию об этом можно найти в таких статьях:

Tags: ,

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *


*

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>