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
$ 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.
[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
"host_key_checking = false"
Теперь с помощью встроенного модуля ping можно протестировать подключение. Модуль ping проверяет:
- доступность хостов;
- учетные данные SSH;
- возможность запускать модули Ansible на хостах с помощью Python.
Проверим доступность всех хостов в файле инвентаризации:
$ ansible all -m ping --ask-pass
Все хосты доступны.
$ 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-copy-id:
$ ssh-copy-id [email protected]
# 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
.
Чтобы выполнить плейбук на хостах в группе:
$ ansible-playbook /etc/ansible/playbooks/mc-deploy.yml --ask-become-pass
Чтобы отключить пароля при использовании 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 мы рассмотрим в следующей статье.