Системы управления конфигурациями предназначены для контроля настроек и операций большого количества серверов. Они позволяют централизованно управлять различными системами в автоматическом режиме.
Существует множество систем управления конфигурациями, предназначенных для Linux (например, Chef и Puppet), но они довольно сложные – обычно пользователям нужно более простое средство. Ansible – как раз такое альтернативное решение, не требующее большого количества ресурсов. Архитектура Ansible не нуждается в установке программы на каждую ноду кластера, а автоматизация задач выполняется по SSH на основе файлов оркестровки в формате YAML.
Данный мануал поможет установить Ansible на Ubuntu 20.04 и разобраться в базовых понятиях.
Читайте также: Основы управления конфигурацией с помощью Ansible
Требования
- Главная нода Ansible – это машина, которую мы будем использовать для подключения и управления хостами Ansible. Главная нода Ansible может быть вашим локальным компьютером или сервером, специально предназначенным для запуска Ansible. В этом мануале для этого используется сервер Ubuntu 20.04.
- Убедитесь, что на главной ноде есть пользователь sudo. Если в качестве главной ноды вы используете удаленный сервер, вам обязательно нужно включить брандмауэр. Подготовить главную ноду вам поможет этот мануал.
- Также здесь нужна пара SSH-ключей. Чтобы создать их, обратитесь к мануалу Установка SSH-ключей в Ubuntu 20.04.
- Один или несколько хостов Ansible. Хост – это любая машина, чью конфигурацию и оркестровку может контролировать главная нода Ansible. В данном мануале мы используем удаленные серверы Ubuntu 20.04.
- Открытый SSH ключ главной ноды Ansible нужно добавить в authorized_keys системного пользователя хоста. Этот пользователь может быть пользователем root или sudo. Инструкции вы найдете в мануале Установка SSH-ключей в Ubuntu 20.04.
1: Установка Ansible
Установите пакет Ansible на машину, которая будет использоваться как главная нода. Пакеты мы установим из стандартного репозитория Ubuntu.
Сначала обновите индекс пакетов:
sudo apt update
Теперь установите пакет Ansible:
sudo apt install ansible
Чтобы подтвердить действие, нажмите Y.
Главная нода Ansible теперь имеет все программное обеспечение, необходимое для управления вашими хостами. Далее мы рассмотрим, как настроить файл инвентаря, чтобы Ansible мог связываться с вашими управляемыми хостами.
2: Создание файла инвентаря
Файл инвентаря содержит информацию о хостах, которыми вы будете управлять с помощью главной ноды Ansible. В этот файл можно включить до нескольких сотен серверов, хосты в нем можно организовать в группы и подгруппы. Файл инвентаря также часто используется для установки переменных, которые будут действительны только для определенных хостов или групп, что будет использоваться в плейбуках и шаблонах. Некоторые переменные также могут влиять на способ запуска плейбуков, например, переменная ansible_python_interpreter, которую мы рассмотрим немного позже.
Чтобы отредактировать содержимое инвентаря Ansible по умолчанию, откройте файл /etc/ansible/hosts в редакторе на главной ноде:
sudo nano /etc/ansible/hosts
Примечание: Обычно Ansible создает файл инвентаря по умолчанию в etc/ansible/hosts, но вы можете создавать такие файлы в любом месте, которое лучше соответствует вашим потребностям. В этом случае вам нужно будет указать путь к пользовательскому файлу инвентаря в параметре -i при запуске команд Ansible иплейбуков. Использование индивидуальных файлов инвентаря для каждого проекта позволяет минимизировать ошибки.
Файл инвентаря по умолчанию, который идет вместе с установкой Ansible, содержит несколько примеров, которые вы можете использовать в качестве шаблонов для настройки вашего инвентаря. В следующем примере определяется группа [servers] с тремя различными серверами, каждый из которых имеет свой псевдоним: server1, server2 и server3. Обязательно замените выделенные IP-адреса IP-адресами ваших Ansible хостов.
[servers]
server1 ansible_host=203.0.113.111
server2 ansible_host=203.0.113.112
server3 ansible_host=203.0.113.113
[all:vars]
ansible_python_interpreter=/usr/bin/python3
Подгруппа all:vars устанавливает параметр ansible_python_interpreter, который будет действителен для всех хостов, включенных в этот список. Этот параметр гарантирует, что удаленный сервер использует исполняемый файл Python 3 /usr/bin/python3, а не файл /usr/bin/python3 (Python 2.7), которого нет в последних версиях Ubuntu.
Когда вы закончите работу, сохраните и закройте файл, нажав CTRL+X, затем Y и Enter.
Если вы захотите проверить свой инвентарь, вы можете запустить:
ansible-inventory --list -y
Вы увидите вашу серверную инфраструктуру, определенную в вашем файле инвентаря:
all:
children:
servers:
hosts:
server1:
ansible_host: 203.0.113.111
ansible_python_interpreter: /usr/bin/python3
server2:
ansible_host: 203.0.113.112
ansible_python_interpreter: /usr/bin/python3
server3:
ansible_host: 203.0.113.113
ansible_python_interpreter: /usr/bin/python3
ungrouped: {}
3: Тестирование соединений
После добавления ваших серверов в файл инвентаря нужно проверить, может ли Ansible подключиться к этим серверам и запускать команды через SSH.
В этом мануале мы будем использовать учетную запись root, потому что это обычно единственная учетная запись, доступная на свежих серверах по умолчанию. Если на ваших хостах Ansible уже создан обычный пользователь sudo, рекомендуем использовать его.
Аргумент -u позволяет задать пользователя удаленной системы. Если этого аргумента нет, Ansible попытается подключиться как текущий пользователь системы на главной ноде.
С вашего локального компьютера или главной ноды Ansible запустите:
ansible all -m ping -u root
Эта команда будет использовать встроенный модуль Ansible ping для проверки подключения на всех нодах из вашего инвентаря (подключение будет установлено от имени пользователя root). Модуль ping проверит:
- Доступны ли хосты;
- Есть ли у вас действительные учетные данные SSH;
- Могут ли хосты запускать модули Ansible с помощью Python.
Вы должны получить такой вывод:
server1 | SUCCESS => {
"changed": false,
"ping": "pong"
}
server2 | SUCCESS => {
"changed": false,
"ping": "pong"
}
server3 | SUCCESS => {
"changed": false,
"ping": "pong"
}
Если вы впервые подключаетесь к этим серверам по SSH, вас попросят подтвердить подлинность хостов, к которым вы подключаетесь через Ansible. При появлении запроса введите yes, а затем нажмите Enter для подтверждения.
Если вы получили ответ “pong” от хоста, это означает, что вы можете запускать на этом сервере команды Ansible и плейбуки.
Примечание: Если ваши серверы почему-то не отвечают вам, ознакомьтесь с нашим мануалом по Ansible Как работать с Ansible: простая и удобная шпаргалка.
4: Выполнение специальных команд (опционально)
Убедившись, что ваша главная нода Ansible может обмениваться данными с вашими хостами, попробуйте запустить специальные команды и плейбуки на своих серверах.
Любая команда, которую вы обычно выполняете на удаленном сервере через SSH, может быть запущена через Ansible на серверах, перечисленных в вашем файле инвентаря. Например, вы можете проверить использование диска на всех серверах:
ansible all -a "df -h" -u root
server1 | CHANGED | rc=0 >>
Filesystem Size Used Avail Use% Mounted on
udev 3.9G 0 3.9G 0% /dev
tmpfs 798M 624K 798M 1% /run
/dev/vda1 155G 2.3G 153G 2% /
tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/vda15 105M 3.6M 101M 4% /boot/efi
tmpfs 798M 0 798M 0% /run/user/0
server2 | CHANGED | rc=0 >>
Filesystem Size Used Avail Use% Mounted on
udev 2.0G 0 2.0G 0% /dev
tmpfs 395M 608K 394M 1% /run
/dev/vda1 78G 2.2G 76G 3% /
tmpfs 2.0G 0 2.0G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup
/dev/vda15 105M 3.6M 101M 4% /boot/efi
tmpfs 395M 0 395M 0% /run/user/0
...
Точно так же вместо команды df –h вы можете использовать любую другую команду.
Вы также можете запускать модули Ansible с помощью специальных команд (так же, как мы ранее запускали ping для тестирования соединения). Например, вот так мы можем использовать модуль apt для установки последней версии vim на все серверы в вашем инвентаре:
ansible all -m apt -a "name=vim state=latest" -u root
При запуске команд Ansible вы также можете ориентироваться на отдельные хосты или на группы и подгруппы. Например, так вы можете проверить время работы каждого хоста в группе servers:
ansible servers -a "uptime" -u root
Мы можем указать несколько хостов, разделив их двоеточиями:
ansible server1:server2 -m ping -u root
За дополнительной информацией о том, как использовать Ansible и запускать плейбуки для автоматизации настройки сервера, вы можете обратиться к нашему мануалу Как работать с Ansible: простая и удобная шпаргалка.
Заключение
В этом мануале вы узнали, как устанавливать Ansible и настраивать файл инвентаря.
Убедившись, что вы можете подключиться и управлять своей инфраструктурой с главной ноды Ansible, вы можете выполнить любую команду или плейбук на этих хостах.
Читайте также: