Введение
В этом лабораторном занятии вы узнаете, как установить и настроить Ansible на системе Ubuntu. Ansible - это мощный открытый инструмент автоматизации, который упрощает управление конфигурацией, развертывание приложений и автоматизацию задач. К концу этого лабораторного занятия у вас будет установлен и настроен Ansible, готовый к эффективному управлению удаленными системами.
Обновление пакетов системы
Перед установкой любого нового программного обеспечения важно убедиться, что ваша система имеет последние обновления. Это помогает предотвратить возможные конфликты и гарантирует, что у вас есть последние патчи безопасности.
Сначала обновите списки пакетов:
sudo apt update

Эта команда подключается к программным репозиториям Ubuntu и загружает информацию о последних доступных пакетах. Вы можете увидеть такой вывод:
Hit:1 http://mirrors.cloud.aliyuncs.com/ubuntu jammy InRelease
Hit:2 http://mirrors.cloud.aliyuncs.com/ubuntu jammy-updates InRelease
Hit:3 http://mirrors.cloud.aliyuncs.com/ubuntu jammy-backports InRelease
Hit:4 http://mirrors.cloud.aliyuncs.com/ubuntu jammy-security InRelease
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
All packages are up to date.
Не беспокойтесь, если вы увидите строки с "Hit" или "Get" - это нормально и показывает, какая информация о репозитории обновляется.
Установка Ansible
Теперь, когда ваша система обновлена, вы можете приступить к установке Ansible. В стандартных репозиториях Ubuntu уже есть Ansible, что делает процесс установки простым.
Установите Ansible с помощью следующей команды:
sudo apt install ansible -y
Разберем эту команду по частям:
sudo: Эта команда запускает команду с административными привилегиями, что необходимо для установки программного обеспечения.apt install: Это указывает менеджеру пакетов установить новый пакет.ansible: Это имя пакета, который мы хотим установить.-y: Этот флаг автоматически отвечает "да" на любые запросы во время установки.
Вы увидите вывод, показывающий ход установки:
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
...
Processing triggers for man-db (2.10.2-1)...
Не пугайтесь большого количества текста - это просто показывает все зависимости, которые устанавливаются вместе с Ansible.
После завершения установки хорошей практикой будет проверить, что Ansible был установлен правильно. Вы можете сделать это, проверив его версию:
ansible --version
Эта команда должна отобразить информацию о установленной версии Ansible:
ansible 2.10.8
config file = None
configured module search path = ['/home/labex/.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.10.12 (main, Jul 29 2024, 16:56:48) [GCC 11.4.0]
Если вы видите вывод, похожий на этот, поздравляем! Теперь Ansible установлен на вашей системе.
Настройка SSH для Ansible
Ansible использует SSH для связи с управляемыми узлами. Чтобы упростить этот процесс и повысить безопасность, мы настроим аутентификацию на основе SSH-ключей. Это позволит Ansible подключаться к другим машинам без необходимости каждый раз вводить пароль.
Сначала сгенерируйте пару SSH-ключей:
ssh-keygen -t rsa -b 4096 -C "labex@example.com"
Разберем эту команду:
ssh-keygen: Это программа, которая генерирует пару ключей.-t rsa: Это указывает, что мы хотим ключ типа RSA.-b 4096: Это устанавливает размер ключа в 4096 бит, что очень безопасно.-C "labex@example.com": Это добавляет комментарий к ключу, обычно адрес электронной почты.
При выполнении этой команды вы увидите запросы:
Generating public/private rsa key pair.
Enter file in which to save the key (/home/labex/.ssh/id_rsa):
Нажмите Enter, чтобы принять местоположение по умолчанию.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Для этой лабораторной работы вы можете оставить парольную фразу пустой, дважды нажав Enter. В производственной среде вам следует использовать надежную парольную фразу (passphrase).
Вы увидите вывод, подтверждающий создание ключа:
Your identification has been saved in /home/labex/.ssh/id_rsa
Your public key has been saved in /home/labex/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:abcdefghijklmnopqrstuvwxyz1234567890ABCDEFG labex@example.com
The key's randomart image is:
+---[RSA 4096]----+
| . |
| . . |
| o |
| . o |
| + = S |
| + * + |
| . = o . |
| . + = |
| +.+. |
+----[SHA256]-----+
Далее нам нужно скопировать этот ключ на локальную машину. В реальном сценарии вы бы скопировали его на удаленные хосты, но для этой лабораторной работы мы будем использовать локальную машину:
ssh-copy-id labex@localhost
Введите yes для продолжения.

Вам будет предложено ввести пароль пользователя labex.
Для этой лабораторной среды вы можете найти пароль, открыв VNC-терминал и выполнив:
Не закрывайте текущий сеанс терминала и откройте новый терминал Xfce, чтобы выполнить следующую команду:
echo $PASSWORD
Примечание: Вы должны выполнить эту команду в VNC-терминале. Пароль доступен только в VNC-терминале и недоступен через SSH или веб-терминал.

Введите пароль, когда будет предложено командой ssh-copy-id. Вы должны увидеть вывод, подобный следующему:
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
labex@localhost's password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'labex@localhost'"
and check to make sure that only the key(s) you wanted were added.
Чтобы убедиться, что настройка SSH-ключа прошла успешно, попробуйте подключиться по SSH к локальной машине:
ssh labex@localhost
Если ключ был настроен правильно, вы сможете войти в систему без запроса пароля. Вы увидите новую командную строку. Введите exit, чтобы вернуться к исходному сеансу.
Создание и настройка инвентаря Ansible
Инвентарь Ansible - это файл, который определяет хосты и группы хостов, на которых выполняются команды, модули и задачи из плейбука. Это как адресная книга для Ansible, которая сообщает ему, к каким машинам он может подключаться.
Сначала создайте каталог для конфигурации Ansible:
sudo mkdir -p /etc/ansible
Эта команда создает каталог /etc/ansible, если он еще не существует. Флаг -p гарантирует, что не будет ошибки, если каталог уже есть.
Теперь создайте и откройте для редактирования файл инвентаря:
sudo nano /etc/ansible/hosts
Это откроет текстовый редактор nano. Если вы не знакомы с nano, не беспокойтесь - это простой и удобный в использовании редактор.
В этом файле добавьте следующее содержимое:
[local]
localhost ansible_connection=local
[webservers]
web1 ansible_host=localhost ansible_connection=ssh ansible_user=labex
Разберем, что это значит:
[local]и[webservers]- это имена групп. Вы можете использовать их для организации своих хостов.localhost ansible_connection=localсообщает Ansible подключаться к локальной машине напрямую, без использования SSH.web1 ansible_host=localhost ansible_connection=ssh ansible_user=labexнастраивает хост с именемweb1. В рамках этого лабораторного занятия он также подключается к localhost, но использует SSH и входит под пользователемlabex.
Чтобы сохранить файл в nano, нажмите Ctrl+X, затем Y, а затем Enter.
Чтобы проверить содержимое файла инвентаря, используйте команду cat:
cat /etc/ansible/hosts
Вы должны увидеть содержимое, которое вы только что добавили в файл.
Тестирование подключения Ansible
Теперь, когда мы установили и настроили Ansible, давайте проверим подключение, чтобы убедиться, что все работает правильно.
Сначала отправим ping-запрос всем хостам в нашем инвентаре:
ansible all -m ping
Разберем эту команду по частям:
ansible: Это основная команда для запуска Ansible.all: Это сообщает Ansible запустить операцию на всех хостах из инвентаря.-m ping: Это указывает модуль Ansible, который нужно использовать. Модульpingпроверяет, отвечают ли хосты.
Вы должны увидеть вывод, похожий на следующий:
localhost | SUCCESS => {
"changed": false,
"ping": "pong"
}
web1 | SUCCESS => {
"changed": false,
"ping": "pong"
}
Если вы видите "SUCCESS" для обоих хостов, это означает, что Ansible может успешно подключиться к этим хостам и общаться с ними.
Далее попробуем выполнить простую команду на всех хостах:
ansible all -a "uptime"
Эта команда использует модуль command Ansible (по умолчанию используется, если не указан другой модуль с помощью -m) для выполнения команды uptime на всех хостах. Команда uptime показывает, как долго система работает.
Вы должны увидеть вывод, похожий на следующий:
localhost | CHANGED | rc=0 >>
14:30:15 up 1 day, 3:24, 1 user, load average: 0.00, 0.00, 0.00
web1 | CHANGED | rc=0 >>
14:30:15 up 1 day, 3:24, 1 user, load average: 0.00, 0.00, 0.00
Этот вывод показывает, что Ansible успешно выполнил команду uptime на обоих хостах. Статус "CHANGED" указывает, что команда была успешно выполнена и дала результат.
Совет: Вы можете увидеть предупреждение об устаревании "Distribution ubuntu 22.04 on host localhost should use /usr/bin/python3", которое появляется из-за изменения интерпретатора Python по умолчанию в новых версиях Ubuntu.
Если вы хотите скрыть это предупреждение, вы можете добавить следующую строку в файл /etc/ansible/hosts:
[all:vars]
ansible_python_interpreter=/usr/bin/python3
Эта строка сообщает Ansible явно использовать Python 3 для всех хостов. После добавления этой строки вы можете снова запустить команду ansible all -m ping, чтобы убедиться, что предупреждение больше не появляется.
Резюме
Поздравляем! В рамках этого лабораторного занятия вы успешно установили и настроили Ansible на системе Ubuntu. Вы научились:
- Обновлять пакеты системы, чтобы обеспечить стабильную среду для Ansible.
- Устанавливать Ansible с помощью менеджера пакетов.
- Настраивать аутентификацию на основе SSH-ключей для безопасных и безпарольных подключений.
- Создавать и настраивать файл инвентаря Ansible для определения управляемых хостов.
- Тестировать подключение Ansible и выполнять базовые команды на управляемых хостах.
Эти основные шаги предоставляют прочный стартовый пункт для использования Ansible для автоматизации различных IT-задач, от простого выполнения команд до сложного управления конфигурацией и развертывания приложений.
Помните, что в этом лабораторном занятии для демонстрации использовался localhost, но в реальных сценариях вы обычно будете управлять несколькими удаленными хостами. Принципы и команды, которые вы здесь узнали, можно легко применить для управления удаленными серверами в своей инфраструктуре.
По мере продолжения изучения Ansible вы откроете его мощь в упрощении операций и повышении производительности в системном администрировании и практиках DevOps. Рекомендуем далее изучить плейбуки Ansible, которые позволяют автоматизировать более сложные задачи и рабочие процессы.


