Установка и настройка Ansible: пошаговая инструкция

Сергій Бондаренко

Ansible — это система управления конфигурациями с сервера. Мы можем развертывать и конфигурировать приложения, управляя ими с Ansible-сервера.

Содержание статьи:

1. Установка Ansible для управления конфигурациями с сервера

2. Настройка хостов и групп

3. Модули Ansible и их использование

4. Что еще почитать по Ansible

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

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

Установка Ansible для управления конфигурациями с сервера

Чтобы установить Ansible на Ubuntu, откройте терминал и для начала проверьте, установлен ли Python и Ansible:

root@serge.Virtualbox:~# python3 --version
Python 3.9.5
root@serge.Virtualbox:~# ansible --version

Если ничего из перечисленного не установлено, давайте начнем с Python:

root@serge.Virtualbox:~# apt install python3-pip

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

root@serge-VirtualBox:~# ansible --version

Если команда ansible не найдена, ее можно установить с помощью:

apt install ansible-base
root@serge-VirtualBox:~# apt install ansible-base

После установки мы видим:

root@serge-VirtualBox:~# ansible --version
ansible 2.10.5
  config file = None
  configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3/dist-packages/ansible
  executable location = /usr/bin/ansible
  python version = 3.9.5 (default, May 11 2021, 08:20:37) [GCC 10.3.0]
root@serge-VirtualBox:~#

Строчка config file = None говорит о том, что наш конфигурационный файл пока отсутствует. В принципе, создавать конфигурационный файл не нужно. Но следует помнить, что при каждом запуске ansible-плейбуков настройки будут автоматически активированы и такой файл будет создан. Чтобы создать конфигурационный файл, переходим в домашнюю директорию и создаем его с помощью vi:

root@serge-VirtualBox:~# pwd
/root
root@serge-VirtualBox:~# vi ansible.cfg

Далее прописываем настройки по умолчанию:

[defaults]
inventory =  /root/ansible/hosts/   
host_key_checking = false

:wq

В /root/ansible/hosts/ будет лежать файл, в котором будет записана информация о наших клиентах. Проверим ключи при подключении по SSH. Если указать в конфигурационном файле host_key_checking = false, проверка будет отключена.

Теперь сделаем в окне терминала такой запрос:

root@serge-VirtualBox:~# ansible --version
ansible 2.10.5
  config file = /root/ansible.cfg

Мы указали расположение файла inventory в папке ansible. Создадим ее:

root@serge-VirtualBox:~# mkdir ansible
root@serge-VirtualBox:~# cd ansible/
root@serge-VirtualBox:~/ansible# touch hosts
root@serge-VirtualBox:~/ansible# ll
итого 8
drwxr-xr-x 2 root root 4096 сен  6 10:41 ./
drwx------ 6 root root 4096 сен  6 10:40 ../
-rw-r--r-- 1 root root    0 сен  6 10:41 hosts

Настройка хостов и групп

Предположим, мы имеем дело с сервером и тремя клиентами. IP-адреса этих клиентов:

  • 192.168.178.109;
  • 192.168.178.110;
  • 192.168.178.111.

Зайдем в этот файл:

root@serge-VirtualBox:~/ansible# vi hosts

Пишем следующее:

client01 ansible_host=192.168.172.109
client02 ansible_host=192.168.172.110
192.168.172.111

Параметр ansible_host указывать необязательно, если у вас работают DNS. Далее необходимо указать пользователей и пароли, доступ к которым возможен по SSH. Добавим пароль:

client01 ansible_host=192.168.172.109 ansible_user=root ansible_password=ptest
client02 ansible_host=192.168.172.110 ansible_user=utest ansible_password=ptest 
192.168.172.111 ansible_user=root 

Для третьего хоста сделаем доступ по ключу SSH:

client01 ansible_host=192.168.172.109 ansible_user=root ansible_password=ptest
client02 ansible_host=192.168.172.110 ansible_user=utest ansible_password=ptest 
192.168.172.111 ansible_user=root ansible_ssh_private_key_file=

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

root@serge-VirtualBox:~/ansible# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa
Your public key has been saved in /root/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:5p921mHEIN9xR9cnD9WN9yKy4ixzJxXmZ2/wrTjQhk0 root@serge-VirtualBox
The key's randomart image is:
+---[RSA 3072]----+
|               +B|
|          . . = X|
|           o + B+|
|          + E = o|
|        So O o . |
|       o. * B o  |
|       o.o = * o |
|      o =.o.+.= .|
|       + +oo.o.. |
+----[SHA256]-----+
root@serge-VirtualBox:~/ansible#

Если мы перейдем в папку .ssh мы увидим наши два ключа – публичный и частный:

root@serge-VirtualBox:~/ansible# cd
root@serge-VirtualBox:~# cd .ssh/
root@serge-VirtualBox:~/.ssh# ll
итого 16
drwx------ 2 root root 4096 сен  6 11:15 ./
drwx------ 7 root root 4096 сен  6 11:14 ../
-rw------- 1 root root 2610 сен  6 11:15 id_rsa
-rw-r--r-- 1 root root  575 сен  6 11:15 id_rsa.pub
root@serge-VirtualBox:~/.ssh#

Прочитаем его и скопируем, чтобы занести в файл:

root@serge-VirtualBox:~/.ssh# cat id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDDTwp+rR2W0ZPR+1mzXFfHbAISw0nIv+aW0Jg7R+kLM9lIVRFHcV+D58XUGl+NnJL6vvv1JsfIvyBSd2gOWT/pKlxnii/ufOU+HF8TgHbBHVOC4c97mb3qrLxqXbdSFxTGmxGYH44KSzYzrv7YSakhnttqoAM1J3XdxRRsTWS7GfUMGGGhYBjLM1/ddR4QQkJshFGKQ3WnXwMS16o+E/qwUppyov4RhxITm7YMRS3Yep56qEF/+z0zTXxJredGckK7kXOj7vXWXW5Bik+svD1Aadwoz9Fojbkz/Q7n9bF4wxDNzL0rfX9LkCnkaofoIaRuIFqkiBmPPEU/hk8Tx7zBXm5wYin1yFhTVuUUGE6R/542BAv+YcKerYXOqsa11jnKjH70bEh9CQ8Nc/MX9MR/vjIevqVPaaP/6hY6U9yoCLYb+INMHEHl+NfUFSksEGGHUQRBCUxGFvZsu6s9zpXCBdv0EMBMg6tApyNN9BnpLGGJPNpmZ/w0apjdRqHD450=

Скопируем значение ключа и вставим на третий хост, открыв файл:

root@client03:~/.ssh# vi authorized_keys

Сохраним его. Переименуем имя ключа командой mv id_rsa client03и внесем соответствующие изменения в файл:

client01 ansible_host=192.168.172.109 ansible_user=root ansible_password=ptest
client02 ansible_host=192.168.172.110 ansible_user=utest ansible_password=ptest 
192.168.172.111 ansible_user=root ansible_ssh_private_key_file=/root/.shh/client03

Сохраним его (команда :wq) и проверим, все ли работает:

root@serge-VirtualBox:~/# ansible all -m ping

Нам выдается сообщение, что третий хост прошел нормально, а для первых двух необходимо установить дополнительный пакет sshpass. Установим его с помощью команды apt install ssh. Снова запустим пинг:

192.168.178.111 | SUCCESS => {
"ansible_facts": {
    "discovered_interpreter_python": "/usr/bin/python3"
},
    "changed": false,
    "ping": "pong"
}
client01 | SUCCESS => {
    "ansible facts": {
    "discovered_interpreter_python": "/usr/bin/python3"
},
    "changed": false, 
    "ping": "pong"
}
client02 | SUCCESS => { 
     "ansible facts": {
     "discovered_interpreter_python": "/usr/bin/python3"
},
      "changed": false,
      "ping": "pong"
}

Что ж, как видим, клиенты все работают.

Модули Ansible и их использование

Ansible позволяет использовать модули, которые расширяют стандартные функции программы. Вот основные из них:

  • Cloud: подерживает облачные технологии, в частности Amazon EC2/ECS/S3, Azure, Cloudstack, Digital Ocean, Docker, LXC, OpenStack, Rackspace, VMware и другие.
  • Clustering: поддерживает автоматизацию, развертывание, масштабирование и координацию в условиях кластера. Совместим с Consul, ZooKeeper, Kubernetes.
  • Command: предназначен для выполнения консольных команд и скриптов.
  • Database: модуль для работы с базами данных. Поддерживает MySQL, PostgreSQL, Vertica, MongoDB, Redis, Riak.
  • File: модуль для выполнения различных операций с файлами, такими как копирование, синхронизация, изменение, проверка, архивирование.
  • Inventory: модуль для работы с именами хостов или их ip-адресами.
  • Messaging: поддержка RabbitMQ.
  • Monitoring: совместимость с различными системами мониторинга — DataDog, Nagios, Zabbix и прочими.
  • Network: поддержка сетевого аппаратного обеспечения, Cisco IOS/NXOS, Juniper JunOS, OpenSwitch, Cumulus Linux, Mikrotik RouterOS.
  • Notification: с помощью данного модуля можно отсылать сообщения в Campfire, HipChat, Jabber, Pushbullet, Slack, через email/sms.
  • Packaging: работа с менеджерами пакетов apt, FreeBSD Ports, Gentoo, homebrew, pacman, opkg, Red Hat software channels, yum, xbps, zypper.
  • Source Control: модуль, обеспечивающий работу с системами контроля версий git, mercurial, subversion.
  • System: работа с компонентами Linux/Unix систем — cron, iptables, LVM, SELinux, sshd, zfs.
  • Utilities: реализуют внутреннюю логику плейбуков.
  • Web Infrastructure: работа с Apache, Django, JBoss, JIRA.
  • Windows: работа с некоторыми компонентами Windows, в частности с IIS, Windows Firewall, системным реестром.

Что еще почитать по Ansible

Останні статті

Обучение Power BI – какие онлайн курсы аналитики выбрать

Сегодня мы поговорим о том, как выбрать лучшие курсы Power BI в Украине, особенно для…

13.01.2024

Work.ua назвал самые конкурентные вакансии в IТ за 2023 год

В 2023 году во всех крупнейших регионах конкуренция за вакансию выросла на 5–12%. Не исключением…

08.12.2023

Украинская IT-рекрутерка создала бесплатный трекер поиска работы

Unicorn Hunter/Talent Manager Лина Калиш создала бесплатный трекер поиска работы в Notion, систематизирующий все этапы…

07.12.2023

Mate academy отправит работников в 10-дневный оплачиваемый отпуск

Edtech-стартап Mate academy принял решение отправить своих работников в десятидневный отпуск – с 25 декабря…

07.12.2023

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

Служба безопасности Украины задержала в Киеве 46-летнего программиста, который за деньги устанавливал шпионские программы и…

07.12.2023

Как вырасти до сеньйора? Девелопер создал популярную подборку на Github

IT-специалист Джордан Катлер создал и выложил на Github подборку разнообразных ресурсов, которые помогут достичь уровня…

07.12.2023