Введение
Системы управления конфигурацией разработаны для оптимизации процесса управления большим количеством серверов для администраторов и операционных команд. Они позволяют автоматизированно управлять множеством различных систем из одного центрального места.
Хотя существует много популярных инструментов управления конфигурацией для систем Linux, таких как Chef и Puppet, они часто бывают более сложными, чем нужно многим пользователям. Ansible – отличная альтернатива, поскольку он предлагает архитектуру, не требующую установки специального программного обеспечения на узлах, используя SSH для выполнения автоматизированных задач и файлы YAML для определения деталей предоставления ресурсов.
В данном руководстве мы рассмотрим, как установить Ansible на сервере Ubuntu 20.04, а также расскажем об основах использования этого программного обеспечения. Если вам нужен более общий обзор Ansible в качестве инструмента управления конфигурацией, обратитесь к ресурсу Введение в управление конфигурацией с помощью Ansible.
Предварительные требования
Для выполнения этого учебного пособия вам понадобятся:
-
Один контрольный узел Ansible: Контрольный узел Ansible – это машина, которую мы будем использовать для подключения к и управления хостами Ansible по SSH. Ваш контрольный узел Ansible может быть как локальной машиной, так и сервером, предназначенным для запуска Ansible, хотя в этом руководстве предполагается, что ваш контрольный узел – это система Ubuntu 20.04. Убедитесь, что на контрольном узле установлено следующее:
- Не-root пользователь с привилегиями sudo. Чтобы настроить это, вы можете следовать Шагам 2 и 3 нашего Руководства по начальной настройке сервера для Ubuntu 20.04. Однако обратите внимание, что если вы используете удаленный сервер в качестве контрольного узла Ansible, вы должны выполнить каждый шаг этого руководства. Это настроит брандмауэр на сервере с помощью
ufw
и включит внешний доступ к вашему профилю не-root пользователя, что обеспечит безопасность удаленного сервера. - Пара ключей SSH, связанных с этим пользователем. Чтобы настроить это, вы можете следовать Шагу 1 нашего руководства по Настройке ключей SSH на Ubuntu 20.04.
- Не-root пользователь с привилегиями sudo. Чтобы настроить это, вы можете следовать Шагам 2 и 3 нашего Руководства по начальной настройке сервера для Ubuntu 20.04. Однако обратите внимание, что если вы используете удаленный сервер в качестве контрольного узла Ansible, вы должны выполнить каждый шаг этого руководства. Это настроит брандмауэр на сервере с помощью
-
Один или несколько хостов Ansible: Хост Ansible – это любая машина, которую ваш контролирующий узел Ansible настроен автоматизировать. В этом руководстве предполагается, что ваши хосты Ansible – удаленные серверы Ubuntu 20.04. Убедитесь, что каждый хост Ansible имеет:
- Открытый SSH-ключ контролирующего узла Ansible добавлен в
authorized_keys
учетной записи системного пользователя. Этот пользователь может быть как root, так и обычный пользователь с привилегиями sudo. Чтобы настроить это, вы можете следовать Шагу 2 руководства по Как настроить ключи SSH в Ubuntu 20.04.
- Открытый SSH-ключ контролирующего узла Ansible добавлен в
Шаг 1 — Установка Ansible
Для начала использования Ansible в качестве средства управления вашей серверной инфраструктурой необходимо установить программное обеспечение Ansible на машину, которая будет служить управляющим узлом Ansible.
С вашего управляющего узла выполните следующую команду, чтобы включить официальный PPA (личный архив пакетов) проекта в список источников вашей системы:
- sudo apt-add-repository ppa:ansible/ansible
Нажмите ENTER
, когда будет предложено принять добавление PPA.
Затем обновите индекс пакетов вашей системы, чтобы он знал о доступных пакетах в только что включенном PPA:
- sudo apt update
После этого обновления можно установить программное обеспечение Ansible с помощью:
- sudo apt install ansible
Теперь ваш управляющий узел Ansible имеет всё необходимое программное обеспечение для управления вашими хостами. Далее мы рассмотрим, как добавить ваши хосты в файл инвентаря управляющего узла, чтобы он мог управлять ими.
Шаг 2 — Настройка файла инвентаря
Файл инвентаря содержит информацию о хостах, которые вы будете управлять с помощью Ansible. Вы можете включить в файл инвентаря от одного до нескольких сотен серверов, а хосты могут быть организованы в группы и подгруппы. Файл инвентаря также часто используется для установки переменных, которые будут действовать только для определенных хостов или групп, чтобы использовать их в плейбуках и шаблонах. Некоторые переменные также могут влиять на способ выполнения плейбука, например переменная ansible_python_interpreter
, которую мы увидим сейчас.
Для редактирования содержимого вашего инвентаря Ansible по умолчанию откройте файл /etc/ansible/hosts
с помощью выбранного вами текстового редактора на вашем управляющем узле Ansible:
- 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/python
(Python 2.7), который отсутствует в последних версиях Ubuntu.
Когда закончите, сохраните и закройте файл, нажав CTRL+X
, затем Y
и ENTER
, чтобы подтвердить изменения.
В любое время, когда вы хотите проверить свой инвентарь, вы можете выполнить:
- ansible-inventory --list -y
Вы увидите вывод, подобный этому, но содержащий вашу собственную инфраструктуру сервера, как определено в вашем файле инвентаря:
Outputall:
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: {}
Теперь, когда вы настроили свой файл инвентаря, у вас есть все необходимое для тестирования подключения к вашим хостам Ansible.
Шаг 3 — Проверка подключения
После настройки файла инвентаря для включения ваших серверов пришло время проверить, может ли Ansible подключаться к этим серверам и выполнять команды через SSH.
Для этого руководства мы будем использовать учетную запись Ubuntu root, потому что это обычно единственная учетная запись, доступная по умолчанию на вновь созданных серверах. Если у ваших хостов Ansible уже есть созданная обычная учетная запись sudo, рекомендуется использовать эту учетную запись.
Вы можете использовать аргумент -u
, чтобы указать удаленного пользователя системы. Если не указано, Ansible попытается подключиться как текущий пользователь системы на управляющем узле.
С вашего локального компьютера или узла управления Ansible выполните следующее:
- ansible all -m ping -u root
Эта команда будет использовать встроенный модуль ping
Ansible для запуска теста на соединение со всеми узлами из вашего стандартного инвентаря, подключаясь как root. Модуль ping
проверит:
- доступность хостов;
- наличие действительных учетных данных SSH;
- способность хостов запускать модули Ansible с использованием Python.
Вы должны получить вывод, аналогичный этому:
Outputserver1 | 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 — Выполнение Ad-Hoc Команд (По желанию)
После подтверждения того, что ваш управляющий узел Ansible способен взаимодействовать с вашими хостами, вы можете начать выполнение ad-hoc команд и playbooks на ваших серверах.
Любая команда, которую вы обычно выполняете на удаленном сервере по SSH, может быть выполнена с помощью Ansible на серверах, указанных в вашем файле инвентаризации. В качестве примера, вы можете проверить использование дисков на всех серверах с помощью:
- ansible all -a "df -h" -u root
Output
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 через ad-hoc команды, аналогично тому, что мы делали ранее с модулем ping
для тестирования соединения. Например, вот как мы можем использовать модуль apt
для установки последней версии vim
на всех серверах в вашем инвентаризационном файле:
- ansible all -m apt -a "name=vim state=latest" -u root
Вы также можете указывать отдельные хосты, а также группы и подгруппы при выполнении команд Ansible. Например, вот как вы можете проверить uptime
каждого хоста в группе servers
:
- ansible servers -a "uptime" -u root
Мы можем указывать несколько хостов, разделяя их двоеточием:
- ansible server1:server2 -m ping -u root
Для получения дополнительной информации о том, как использовать Ansible, включая выполнение плейбуков для автоматизации настройки сервера, вы можете ознакомиться с нашим Руководством по Ansible.
Заключение
В этом руководстве вы установили Ansible и настроили файл инвентаря для выполнения команд на лету с контрольного узла Ansible.
После того как вы подтвердите, что можете подключиться и контролировать вашу инфраструктуру с центральной машины-контроллера Ansible, вы можете выполнить любую команду или плейбук на этих хостах.
Для получения дополнительной информации о том, как использовать Ansible, ознакомьтесь с нашим Руководством по шпаргалке Ansible.