Установка и инвентаризация

AnsibleBeginner
Практиковаться сейчас

Введение

В этой лабораторной работе вы сделаете первые шаги в мире Ansible — мощного инструмента автоматизации с открытым исходным кодом.

Представьте, что вам нужно управлять 100 серверами. Вход на каждый сервер для установки программ или изменения настроек был бы утомительным и приводил бы к ошибкам. Ansible позволяет управлять этими серверами, которые называются управляемыми узлами, с одного управляющего узла без установки агентов на целевых машинах.

Именно отсутствие агентов — одна из главных причин популярности Ansible среди операционных команд. Вам не нужно поддерживать дополнительное программное обеспечение на каждом хосте, а Ansible использует инструменты, которым администраторы уже доверяют, особенно SSH.

Ansible работает следующим образом:

  1. Подключается к серверам по SSH — тому же инструменту, который используется для удалённого входа.
  2. Читает инструкции из простых текстовых файлов, написанных в YAML.
  3. Передаёт на серверы небольшие программы, называемые модулями, которые выполняют работу.

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

В этой лабораторной работе вы будете одновременно управляющим и управляемым узлом. Вы установите Ansible в своей среде и настроите его для управления самой собой (localhost). Это безопасный способ изучить основы.

Вы научитесь:

  • Устанавливать Ansible с помощью менеджера пакетов.
  • Настраивать ключи SSH, чтобы Ansible мог входить без пароля.
  • Создавать файл инвентаризации, в котором перечислены компьютеры для управления.
  • Проверять подключение с помощью модуля ping.

Установите Ansible

Сначала установите Ansible на свой компьютер. Поскольку используется Ubuntu, примените менеджер пакетов apt — своего рода «магазин приложений» для инструментов командной строки Linux.

Сначала убедитесь, что список пакетов обновлён. Хотя скрипт настройки уже выполнил обновление, проверка считается хорошей практикой:

sudo apt update

Теперь установите Ansible:

sudo apt install ansible -y

Разбор команды:

  • sudo: Запускает команду с правами администратора (root).
  • apt install: Указывает менеджеру пакетов установить программу.
  • ansible: Имя нужного пакета.
  • -y: Автоматически отвечает «да» на запросы подтверждения, например «Продолжить?».

После завершения установки проверьте версию:

ansible --version

Вы должны увидеть строку, начинающуюся с ansible [core 2.x.x]. Это подтверждает, что Ansible установлен и готов к работе.

Создайте ключи SSH

Ansible использует SSH (Secure Shell) для связи с серверами. Это стандартный способ удалённого доступа к серверам Linux.

Поэтому инвентаризация так важна. Ansible должен знать, какие машины существуют, как они сгруппированы и как к ним подключаться. Фактически инвентарь — это адресная книга вашей системы автоматизации.

По умолчанию SSH требует пароль. Но для инструментов автоматизации, таких как Ansible, вводить пароль при каждом подключении к серверу невозможно. Вместо этого используются ключи SSH.

Представьте ключи SSH как замок и ключ:

  • Открытый ключ (замок): его размещают на каждом сервере, к которому вы хотите получить доступ.
  • Закрытый ключ (ключ): его нужно хранить в безопасности на управляющем компьютере.

При подключении Ansible сервер проверяет, соответствует ли ваш «ключ» его «замку». Если соответствует, вход выполняется без пароля.

Создайте пару ключей:

ssh-keygen -t rsa -b 2048 -N "" -f ~/.ssh/id_rsa

Разбор команды:

  • ssh-keygen: Инструмент для создания ключей.
  • -t rsa: Создаёт ключ типа RSA — стандартный тип ключа.
  • -b 2048: Задаёт длину ключа 2048 бит, чего достаточно для этой задачи.
  • -N "": Задаёт пустую парольную фразу. Это важно: при использовании ключа пароль запрашиваться не будет, поэтому Ansible сможет работать полностью автоматически.
  • -f ~/.ssh/id_rsa: Сохраняет ключ в стандартном расположении.

Проверьте, что файлы созданы:

ls -l ~/.ssh/

Вы должны увидеть id_rsa — секретный закрытый ключ — и id_rsa.pub — открытый ключ.

Разрешите доступ по ключу

Теперь, когда ключ создан, разместите открытый ключ на сервере, которым хотите управлять. В этой лабораторной работе используется localhost — тот же компьютер, за которым вы сейчас работаете.

Этот шаг показывает различие между аутентификацией и логикой автоматизации. Прежде чем Ansible сможет что-либо автоматизировать, ему нужен надёжный способ подключаться к целевому узлу без участия пользователя.

Добавьте содержимое id_rsa.pub в файл authorized_keys, расположенный в каталоге .ssh.

Обычно для этого используют команду ssh-copy-id. Однако она обычно сначала запрашивает пароль, чтобы подтвердить вашу личность. Поскольку в этой лабораторной среде пароль не используется, скопируйте ключ вручную.

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

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

Разбор команды:

  • cat ...: Читает ваш открытый ключ.
  • >>: Добавляет вывод в конец целевого файла, не перезаписывая его.
  • .../authorized_keys: Файл, который SSH проверяет, чтобы определить, кому разрешён вход.

Теперь установите правильные права доступа, чтобы SSH доверял этому файлу:

chmod 600 ~/.ssh/authorized_keys

Проверьте подключение. Попробуйте войти по SSH на собственный компьютер:

ssh localhost "echo Hello from SSH"

Если появится вопрос «Are you sure you want to continue connecting?», введите yes и нажмите клавишу Enter.

Вы должны сразу увидеть строку «Hello from SSH», и пароль запрошен не будет. Это означает, что Ansible также сможет подключаться без пароля.

Создайте файл инвентаризации

Ansible нужен список серверов, которыми он будет управлять. Этот список называется инвентаризацией.

Инвентарь может быть обычным текстовым файлом. Создайте каталог проекта и файл инвентаризации с именем hosts.ini.

Создайте пустой файл hosts.ini:

touch hosts.ini

Сейчас Ansible ещё не знает ни об одном сервере. Вы добавите их на следующем шаге.

Добавьте хост в инвентарь

Теперь отредактируйте файл hosts.ini и добавьте в него сервер. В инвентарях Ansible часто используется формат INI, который выглядит так:

[group_name]
server_address

Группировка серверов, например [webservers] или [databases], позволяет одновременно выполнять команды на всех серверах одного типа.

Добавьте localhost в группу [webservers]. Выполните команду, чтобы записать данные в файл:

echo -e "[webservers]\nlocalhost" > hosts.ini

Разбор команды:

  • echo -e: Выводит текст и обрабатывает специальные символы, например \n — перевод строки.
  • "[webservers]\nlocalhost": Записываемый текст. [webservers] будет находиться в первой строке, а localhost — во второй.
  • > hosts.ini: Перезаписывает файл этим содержимым.

Проверьте содержимое файла:

cat hosts.ini

Оно должно выглядеть точно так:

[webservers]
localhost

Проверьте подключение

Теперь проверим результат. Попросите Ansible подключиться ко всем серверам из инвентаря и убедиться, что они доступны.

Для выполнения разовых задач используется команда ansible вместе с модулем ping.

Выполните команду:

ansible all -m ping -i hosts.ini

Разбор команды:

  • all: Выбирает все хосты из инвентаря.
  • -m ping: Указывает Ansible использовать модуль с именем ping.
    • Примечание: это не то же самое, что сетевой ping. Модуль ping Ansible действительно входит на сервер, проверяет наличие Python и возвращает значение "pong". Это подтверждает, что настройка работает.
  • -i hosts.ini: Указывает Ansible использовать созданный нами файл инвентаризации вместо системного файла по умолчанию.

Вы должны увидеть сообщение «SUCCESS» зелёного цвета:

localhost | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": false,
    "ping": "pong"
}

Если вы видите "ping": "pong", поздравляем! Вы успешно настроили Ansible для управления своим сервером.

Итоги

В этой лабораторной работе вы заложили основу автоматизации с помощью Ansible. Вы научились:

  1. Устанавливать Ansible и подготавливать его к работе в своей системе.
  2. Настраивать ключи SSH, чтобы Ansible мог безопасно входить без паролей.
  3. Создавать инвентарь — список (hosts.ini) серверов для управления.
  4. Проверять подключение с помощью модуля ping.

Эти этапы — установка, доступ, инвентарь и проверка — выполняются в начале любого проекта Ansible, независимо от того, управляете ли вы одним сервером или тысячей.