Поиск по сайту:

Как установить и настроить Ansible на Rocky Linux 9


Введение

Системы управления конфигурацией предназначены для того, чтобы сделать управление большим количеством серверов доступным для администраторов и операционных групп. Они позволяют управлять многими различными системами в автоматическом режиме из одного центрального места. Хотя для систем Linux доступно множество популярных систем управления конфигурацией, таких как Chef и Puppet, они зачастую сложнее, чем многие люди хотят или нуждаются. Ansible — отличная альтернатива этим вариантам, так как она требует гораздо меньших затрат для начала работы.

Ansible работает путем настройки клиентских машин с компьютера с установленными и настроенными компонентами Ansible. Он обменивается данными по обычным каналам SSH для получения информации с удаленных компьютеров, выдачи команд и копирования файлов. Благодаря этому система Ansible не требует установки дополнительного программного обеспечения на клиентские компьютеры. Это один из способов, которым Ansible упрощает администрирование серверов. Любой сервер с открытым SSH-портом может быть помещен под зонтик конфигурации Ansible, независимо от того, на каком этапе своего жизненного цикла он находится.

Ansible использует модульный подход, что позволяет использовать функциональные возможности основной системы для работы с конкретными сценариями. Модули могут быть написаны на любом языке и передаваться в стандартном формате JSON. Файлы конфигурации в основном записываются в формате сериализации данных YAML из-за его выразительного характера и сходства с популярными языками разметки. Ansible может взаимодействовать с клиентами либо с помощью инструментов командной строки, либо с помощью сценариев конфигурации, называемых Playbooks.

В этом руководстве вы установите Ansible на сервер Rocky Linux 9 и узнаете некоторые основы использования программного обеспечения.

Предпосылки

Чтобы следовать этому руководству, вам понадобятся:

  • Один узел управления Ansible: Узел управления Ansible — это машина, которую вы будете использовать для подключения и управления хостами Ansible через SSH. Узлом управления Ansible может быть либо ваш локальный компьютер, либо сервер, предназначенный для запуска Ansible, хотя в этом руководстве предполагается, что вашим узлом управления является система Rocky Linux 9. Убедитесь, что управляющий узел имеет:
    • Пользователь без полномочий root с правами sudo. Чтобы настроить это, вы можете выполнить шаги 2 и 3 нашего руководства Initial Server Setup with Rocky Linux 9. Однако обратите внимание, что если вы используете удаленный сервер в качестве узла Ansible Control, вам следует следовать каждому шагу этого руководства.
    • Пара ключей SSH, связанная с этим пользователем. Чтобы настроить это, вы можете выполнить шаг 1 нашего руководства «Как настроить ключи SSH в Rocky Linux 9».

    Один или несколько хостов Ansible: Хост Ansible — это любой компьютер, для автоматизации которого настроен ваш управляющий узел Ansible. В этом руководстве предполагается, что ваши хосты Ansible являются удаленными серверами Rocky Linux 9. Убедитесь, что на каждом хосте Ansible есть:

    • Открытый ключ SSH узла управления Ansible добавлен к authorized_keys системного пользователя. Этот пользователь может быть либо root, либо обычным пользователем с привилегиями sudo. Чтобы настроить это, вы можете выполнить шаг 2 инструкции Как настроить ключи SSH в Rocky Linux 9.

    Когда вы закончите настройку, вы готовы начать первый шаг.

    Шаг 1 — Установка Ansible

    Чтобы начать изучать Ansible как средство управления различными серверами, вам сначала необходимо установить программное обеспечение Ansible хотя бы на одну машину.

    Чтобы получить Ansible для Rocky Linux 9, сначала убедитесь, что репозиторий Rocky Linux 9 EPEL установлен с помощью dnf:

    1. sudo dnf install epel-release

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

    1. sudo dnf install ansible

    Теперь у вас есть все программное обеспечение, необходимое для администрирования ваших серверов через Ansible.

    Шаг 2 — Настройка хостов Ansible

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

    Откройте файл с привилегиями root, как показано ниже. Имейте в виду, что текстовым редактором по умолчанию для Rocky Linux 9 является vi:

    1. sudo vi /etc/ansible/hosts

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

    Файл hosts довольно гибкий и может быть настроен несколькими различными способами. Синтаксис, который вы собираетесь использовать, имеет следующую структуру:

    [group_name]
    alias ansible_ssh_host=your_server_ip
    

    group_name – это организационный тег, который позволяет вам обращаться к любым серверам, перечисленным под ним, одним словом. Псевдоним — это имя для ссылки на этот сервер.

    Например, представьте, что у вас есть три сервера, которыми вы хотите управлять с помощью Ansible. Ansible взаимодействует с клиентскими компьютерами через SSH, поэтому каждый сервер, которым вы хотите управлять, будет доступен с сервера Ansible. Если вы выбрали вариант «Один или несколько хостов Ansible» в предварительных требованиях, на ваших хостах будут настроены и доступны ключи SSH, выполнив следующее:

    1. ssh root@your_server_ip

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

    Поскольку ваш файл уже открыт, вы будете использовать IP-адреса следующих серверов в качестве примера: 203.0.113.111, 203.0.113.112 и 203.0.113.113. Не забудьте заменить IP-адреса на свои. Затем настройте это так, чтобы вы могли обращаться к каждому серверу по отдельности как host1, host2 и host3 или к группе как серверы. Чтобы настроить это, вам нужно добавить следующий блок в ваш файл hosts. Вы можете сделать это, нажав i, чтобы вставить текст, а когда закончите, нажмите ESC:

    [servers]
    host1 ansible_ssh_host=203.0.113.111
    host2 ansible_ssh_host=203.0.113.112
    host3 ansible_ssh_host=203.0.113.113
    

    Когда вы закончите добавлять блок, сохраните и закройте файл. Вы можете сделать это, написав :wq, а затем ENTER.

    Хосты могут входить в несколько групп, а группы могут настраивать параметры для всех своих членов. Вы можете попробовать это, выполнив следующую команду:

    1. ansible -m ping host1
    Ansible connection error
    host1 | UNREACHABLE! => { "changed": false, "msg": "Failed to connect to the host via ssh: sammy@203.0.113.111: Permission denied (publickey).", "unreachable": true }

    Ansible по умолчанию попытается подключиться к удаленным хостам, используя ваше текущее имя пользователя. Эта ошибка показывает, что если пользователь не существует в удаленной системе, соединение не будет установлено.

    Поэтому давайте специально укажем Ansible подключаться к серверам в группе servers с пользователем sammy. Начните с создания каталога в структуре конфигурации Ansible с именем group_vars:

    1. sudo mkdir /etc/ansible/group_vars

    В этой папке вы можете создавать файлы в формате YAML для каждой группы, которую хотите настроить. Ранее вы редактировали файл с помощью текстового редактора vi. Кроме того, вы можете отредактировать файл с помощью nano, но вам необходимо установить его с помощью следующей команды:

    1. sudo dnf -y install nano

    Если вы предпочитаете использовать nano, после его установки вы откроете файл /etc/ansible/group_vars/servers для редактирования конфигурации:

    1. sudo nano /etc/ansible/group_vars/servers

    Добавьте в файл следующий код. Файлы YAML начинаются с ---, поэтому не забудьте эту часть:

    ---
    ansible_ssh_user: sammy
    

    Когда вы закончите, сохраните и выйдите из файла. В nano это можно сделать, нажав CTRL + X, а затем Y и ENTER.

    Теперь Ansible всегда будет использовать пользователя sammy для группы servers, независимо от текущего пользователя.

    Если вы хотите указать детали конфигурации для каждого сервера, независимо от групповой связи, вы можете поместить эти детали в файл по адресу /etc/ansible/group_vars/all. Отдельные хосты можно настроить, создав файлы в каталоге /etc/ansible/host_vars.

    Шаг 3 — Использование основных команд Ansible

    Теперь, когда вы настроили свои хосты и у вас достаточно сведений о конфигурации, чтобы вы могли успешно подключаться к своим хостам, вы можете попробовать несколько команд.

    Сначала пропингуйте все серверы, которые вы настроили. Часть команды -m ping является указанием для Ansible использовать модуль ping. Это общие команды, которые вы можете запускать на своих удаленных хостах. Модуль ping во многом похож на обычную утилиту ping в Linux, но вместо этого он проверяет возможность подключения Ansible:

    1. ansible -m ping all

    Ansible вернет вывод, подобный следующему:

    Output
    host3 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python3" }, "changed": false, "ping": "pong" } host1 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python3" }, "changed": false, "ping": "pong" } host2 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python3" }, "changed": false, "ping": "pong" }

    Эти выходные данные являются базовым тестом для подтверждения того, что Ansible имеет соединение со всеми своими хостами.

    Помимо команды all, существуют и другие команды для работы с разными наборами серверов. Вы также можете указать группу:

    1. ansible -m ping servers

    Вы также можете указать отдельный хост:

    1. ansible -m ping host1

    Кроме того, вы можете указать несколько хостов, разделив их двоеточиями:

    1. ansible -m ping host1:host2

    Модуль shell позволяет отправить команду терминала на удаленный хост и получить результаты. Например, чтобы узнать использование памяти на вашем компьютере host1, вы можете использовать следующее:

    1. ansible -m shell -a 'free -m' host1

    Как вы могли заметить, вы передаете аргументы в скрипт с помощью переключателя -a. Вот что может вернуть вывод:

    Output
    host1 | CHANGED | rc=0 >> total used free shared buff/cache available Mem: 7951 234 6768 0 948 7461 Swap: 0 0 0

    Теперь вы успешно запустили несколько основных команд Ansible на разных хостах.

    Заключение

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

    Вы настроили отличную основу для работы с вашими серверами с помощью Ansible, поэтому ваш следующий шаг — научиться использовать Playbooks, чтобы делать всю тяжелую работу за вас. Вы можете узнать больше в нашем руководстве по управлению конфигурацией 101: Написание Ansible Playbooks.