Установка и настройка 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

$ 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]_x000D_srvubunt1 ansible_host=192.168.14.144 ansible_user=sysops_x000D_srvubunt2 ansible_host=192.168.14.142 ansible_user=sysops_x000D_srv-db01 ansible_host=192.168.14.151 ansible_user=sysops_x000D_ 

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

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

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

$ ansible-inventory --graph

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

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

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

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

$ ansible all -m ping --ask-pass

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

Чтобы 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 аутентификация по ключам:

# nano /etc/ssh/sshd_config

PubkeyAuthentication yes_x000D_AuthorizedKeysFile .ssh/authorized_keys

# service sshd restart

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

$ ansible servers_all -a 'uptime'

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

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

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

С помощью модуля 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_x000D_ become: yes_x000D_ become_method: sudo_x000D_ tasks:_x000D__x000D_ - name: update_x000D_ apt: update_cache=yes_x000D__x000D_ - name: Install mc_x000D_ apt: name=mc state=latest_x000D_

Если управляемые хосты работают на 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 Tower (платная от RedHat) и Ansible AWX (бесплатная). С помощью Ansible вы можете управлять не только серверами Linux, но и Windows системами (потребует настроенный WinRM ). Особенности управления Windows через Ansible мы рассмотрим в следующей статье.

admin

Share
Published by
admin

Recent Posts

Консоль удаленного рабочего стола(rdp console)

Клиент удаленного рабочего стола (rdp) предоставляет нам возможность войти на сервер терминалов через консоль. Что…

1 неделя ago

Настройка сети в VMware Workstation

В VMware Workstation есть несколько способов настройки сети гостевой машины: 1) Bridged networking 2) Network…

1 неделя ago

Логи брандмауэра Windows

Встроенный брандмауэр Windows может не только остановить нежелательный трафик на вашем пороге, но и может…

1 неделя ago

Правильный способ отключения IPv6

Вопреки распространенному мнению, отключить IPv6 в Windows Vista и Server 2008 это не просто снять…

1 неделя ago

Ключи реестра Windows, отвечающие за параметры экранной заставки

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

1 неделя ago

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

В этой статье расскажу про возможность просмотра журналов событий из командной строки. Эти возможности можно…

1 неделя ago