Введение
Системы управления конфигурацией предназначены для упрощения процесса управления большим количеством серверов для администраторов и операционных групп. Они позволяют управлять многими различными системами автоматизированным способом из центрального места.
Существует много популярных инструментов управления конфигурацией, доступных для систем Linux, таких как Chef и Puppet, они часто более сложны, чем многие люди хотят или нуждаются. Ansible — отличная альтернатива этим вариантам, поскольку он предлагает архитектуру, которая не требует установки специального программного обеспечения на узлах, использует SSH для запуска задач автоматизации и файлы YAML для определения деталей подготовки.
В этом руководстве мы обсудим, как установить Ansible на сервер Ubuntu 20.04 LTS Focal Fossa.
Предпосылки
Чтобы следовать этому руководству, вам понадобятся:
Ansible Control Node: Ansible Control Node — это машина, которую мы будем использовать для подключения и управления хостами Ansible через SSH. Узлом управления Ansible может быть ваш локальный компьютер или сервер, предназначенный для запуска Ansible, хотя в этом руководстве предполагается, что вашим узлом управления является система Ubuntu 20.04 LTS. Убедитесь, что управляющий узел имеет:
- Пользователь без полномочий root с привилегиями sudo.
- Пара ключей SSH, связанная с этим пользователем.
Один или несколько хостов Ansible: Хост Ansible — это любая машина, настроенная для автоматизации узла управления Ansible. В этом руководстве предполагается, что ваши хосты Ansible являются удаленными серверами Ubuntu 20.04 LTS. Убедитесь, что на каждом хосте Ansible есть:
- Пара ключей SSH, связанная с этим пользователем.
- Этот пользователь может быть root или обычным пользователем с привилегиями sudo.
Установить Ansible
Чтобы начать использовать Ansible в качестве средства управления серверной инфраструктурой, вам необходимо установить программное обеспечение Ansible на машину, которая будет действовать как узел управления Ansible. Для этого мы будем использовать репозитории Ubuntu по умолчанию.
Сначала обновите индекс пакетов вашей системы:
sudo apt update
После этого обновления вы можете установить программное обеспечение Ansible с помощью:
sudo apt install ansible
Нажмите Y
, когда будет предложено подтвердить установку.
На вашем узле управления Ansible теперь есть все программное обеспечение, необходимое для администрирования хостов. Далее мы рассмотрим, как настроить файл инвентаризации, чтобы Ansible мог взаимодействовать с вашими управляемыми узлами.
Настроить файл инвентаризации
Файл инвентаризации содержит информацию о хостах, которыми вы будете управлять с помощью Ansible. В файл инвентаризации можно включить от одного до нескольких сотен серверов, а хосты можно организовать в группы и подгруппы. Файл инвентаризации также часто используется для установки переменных, которые будут действительны только для определенных хостов или групп, чтобы их можно было использовать в плейбуках и моделях. Некоторые переменные также могут влиять на работу плейбука, например, переменная ansible_python_interpreter
, которую мы скоро увидим.
Чтобы изменить содержимое инвентаря Ansible по умолчанию, откройте файл /etc/ansible/hosts
с помощью предпочитаемого вами текстового редактора на узле управления Ansible:
sudo nano /etc/ansible/hosts
Примечаниеetc/ansible/hosts-i
Файл инвентаризации по умолчанию, предоставляемый при установке Ansible, содержит ряд примеров, которые можно использовать в качестве справочных материалов для настройки инвентаризации. В следующем примере определяется группа с именем [servers]
с тремя разными серверами, каждый из которых определяется пользовательским псевдонимом: server1, server2 и server3. Обязательно замените выделенные IP-адреса IP-адресами ваших хостов Ansible.
Подгруппа all:vars
устанавливает параметр хоста ansible_python_interpreter
, который будет действительным для всех хостов, включенных в этот список. Этот параметр гарантирует, что удаленный сервер использует исполняемый файл /usr/bin/python3
Python 3 вместо /usr/bin/python
(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: {}
Теперь, когда вы настроили файл инвентаризации, у вас есть все необходимое для проверки подключения к хостам Ansible.
Тест подключения
После того, как вы настроили файл инвентаризации для включения серверов, пришло время проверить, может ли Ansible подключаться к этим серверам и выполнять команды через SSH.
В этом руководстве мы будем использовать корневую учетную запись Ubuntu, поскольку обычно это единственная учетная запись, доступная по умолчанию на вновь созданных серверах. Если ваши хосты 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 может взаимодействовать с вашими хостами, вы можете начать выполнять специальные команды и плейбуки на своих серверах.
Любая команда, которую вы обычно запускаете на удаленном сервере через 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. Например, чтобы использовать команду uptime
работы каждого хоста в группе servers
, выполните следующую команду:
ansible servers -a "uptime" -u root
Мы можем указать несколько хостов, разделив их двоеточием:
ansible server1:server2 -m ping -u root
Вывод
В этом руководстве вы установили Ansible и настроили файл инвентаризации для запуска специальных команд с управляющего узла Ansible.
После того, как вы убедились, что можете подключаться и управлять своей инфраструктурой с центрального компьютера с контроллером Ansible, вы можете запускать любую желаемую команду или сценарий на этих хостах.