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

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

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

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

Для работы Ansible нужно установить на управляющем и управляемых хостах ssh и python. Сам Ansible нужно установить только на управляющем сервере.

OpenSSH сервер обычно установлен по умолчанию во всех версиях Linux, поэтому осталось установить Python 3+ и сам Ansible.

Команды для Ubuntu/Debian:

Установить python:

$ sudo apt install python3

Проверить версию:

$ python3 --version

Python 3.8.10

Установить ansible:

$ sudo apt install ansible

sudo apt install ansible в Linux Ubuntu

$ ansible --version

ansible 2.9.6
Установка в CentOS, Rocky Linux, RHEL, Oracle:

$ dnf install epel-release
$ dnf makecache
$ dnf install python3
$ dnf install ansible

Начало работы с Ansible

При установке пакет будет создан каталог /etc/ansible со следующими конфигурационными файлами:

  • /etc/ansible/hosts
    – здесь можно указано список хостов, которыми вы будет управлять через ansible;
  • /etc/ansible/ansible.cfg
    — файл с настройками ansible.

В файле /etc/ansible/hosts можно создать несколько отдельных групп хостов. Например, все хосты с nginx, с базами mariadb и т.д. В этом примере мы создадим одну группу с именем servers_all.

$ sudo nano /etc/ansible/hosts

[servers_all]
srvubunt1 ansible_host=192.168.14.144 ansible_user=sysops
srvubunt2 ansible_host=192.168.14.142 ansible_user=sysops
srv-db01 ansible_host=192.168.14.151 ansible_user=sysops
 

Можно указать хосты по DNS имени или IP. В ansible_user указан пользователь, который будет использоваться для подключения по SSH.

/etc/ansible/hosts создать файл инвентаризации в ansible

Одинаковые параметры группы хостов можно вынести в секцию с добавлением :vars, например:
[servers]
srvubunt1 ansible_host=192.168.14.144
srvubunt2 ansible_host=192.168.14.142
[servers_all:vars]
ansible_port=22
ansible_user=sysops

Чтобы вывести содержимое файла инвентаризации в виде дерева, выполните:

$ ansible-inventory --graph

ansible-inventory вывести список

По умолчанию для подключения к удаленным хостам используется SSH. Чтобы автоматически принимать ssh fingerprint и не вводить yes при первоначальном доступе к хосту, нужно добавить параметр в файл /etc/ansible/ansible.cfg:
"host_key_checking = false"

Теперь с помощью встроенного модуля ping можно протестировать подключение. Модуль ping проверяет:

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

Проверим доступность всех хостов в файле инвентаризации:

$ ansible all -m ping --ask-pass

Все хосты доступны.

ansible команда ping

Чтобы ansible мог аутентифицироваться по SSH с помощью пароля, нужно установить пакет sshpass:

$ sudo apt install sshpass

Иначе при использовании параметра
--ask-pass
будет появляться ошибка:

to use the 'ssh' connection type with passwords, you must install the sshpass program.

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

Сгенерируйте RSA ключи на управляющем сервере:

$ ssh-keygen -t rsa

Не указывайте пароль для защиты SSH ключа.

Теперь нужно скопировать ключ на каждую ноду с помощью ssh-copy-id:

$ ssh-copy-id [email protected]

установить ssh ключ для доступа через ansible

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

# nano /etc/ssh/sshd_config

PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

# service sshd restart

Теперь вы можете выполнить команду через ansible без ввода пароля. Проверим uptime на всех серверах в группе servers_all:

$ ansible servers_all -a 'uptime'

ansible команда

Приведем несколько примеров интерактивного выполнения команд на хостах в файле инвентаризации.

Выполним инвентаризацию состояния хостов. В этом примере нам нужна только информацию о RAM на серверах:

$ ansible -m setup -a 'filter=ansible_memtotal_mb' all

ansible -m setup выполнить команду на всех хостах

С помощью модуля shell проверим uptime на всех хостах:

$ ansible -m shell -a 'uptime' all

Плейбуки в Ansible

Вы можете отправлять команды на управляемые сервера через консоль (ad-hoc) или с помощью специального файла playbook в формате YAML. В плейбуке можно описать требуемое состояние системы. Ansible при запуске будет проверять, соответствует ли конфигурация управляемого хоста описанию в плейбуке.

Рассмотрим пример простого плейбука, который должен установить на хостах файловый менеджер Midnight Commander (mc).

Создайте каталог для плейбуков:

$ sudo mkdir -p /etc/ansible/playbooks

Теперь создайте YML файл:

$ sudo nano /etc/ansible/playbooks/mc-deploy.yml

- hosts: servers_all
  become: yes
  become_method: sudo
  tasks:

    - name: update
      apt: update_cache=yes

    - name: Install mc
      apt: name=mc state=latest

Если управляемые хосты работают на CentOS-подобной версии Linux, нужно заменить последнюю строку на
yum: name=mc state=latest
.

В синтаксисе YAML-файлов используется строгая система отступов, как в Python. Используйте пробелы, а не табуляцию.

Чтобы выполнить плейбук на хостах в группе:

$ ansible-playbook /etc/ansible/playbooks/mc-deploy.yml --ask-become-pass

В данном случае для выполнения apt вам нужно ввести пароль для повышения привилегий через sudo.

Чтобы отключить пароля при использовании sudo в Ubuntu нужно на управляемых хостах выполнить команду:

$ echo "sysops ALL=(ALL) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/sysops

После этого можно запускать плейбук без параметра
--ask-become-pass
.

ansible-playbook выполнить yml файл

В результатах плейбука видно, на каких серверах он отработал успешно.

В качестве графической оболочки можно использовать Ansible Tower (платная от RedHat) и Ansible AWX (бесплатная). С помощью Ansible вы можете управлять не только серверами Linux, но и Windows системами (потребует настроенный WinRM). Особенности управления Windows через Ansible мы рассмотрим в следующей статье.

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