Баннер мобильный (1) Пройти тест

Ansible

Глоссарий

20 октября 2023

Поделиться

Скопировано

Содержание

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

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

    Название «ансибл» взято из фантастических книг писательницы Урсулы Ле Гуин: там так назывались устройства для связи в космосе.

    Система опенсорсная и бесплатная, любой разработчик может посмотреть ее исходный код и адаптировать под свои нужды.

    Что такое Ansible и зачем он нужен

    Ansible — система, которая работает по принципу infrastructure as a code, или «инфраструктура как код». Это подход, при котором инфраструктуру серверов описывают с помощью кода и конфигурационных файлов. Информация о настройках, разрешениях, установленных программных средствах сервера хранится в специальных файлах.

    • Разработчик может написать конфигурационные файлы сам и настроить сервер вручную. Но если серверов много, процесс получится довольно долгим и трудоемким. 
    • Можно написать скрипты, которые настраивают серверы, но это тоже не лучшее решение — придется писать много разных скриптов, ведь на серверах разные системы и мощности.

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

    Особенности Ansible

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

    Push вместо pull. Сеть из нескольких серверов часто выглядит так: есть главные управляющие машины, а есть зависимые. Стандартный подход систем управления конфигурациями называется pull: зависимые сервера «тянут» информацию с главного. В Ansible все наоборот, по умолчанию используется push-подход: главный сервер сам «проталкивает» информацию в зависимые. На практике разница в том, что открытым для доступа должен быть не главный сервер, а зависимые. Но при необходимости Ansible тоже можно настроить на работу в режиме pull.

    Использование SSH-инфраструктуры. Обычно системы управления конфигурациями требуют установки специального окружения, в котором они смогут работать. Ansible, в отличие от них, работает с существующим SSH-окружением: стандартным безопасным протоколом для удаленного управления сервером. Поэтому Ansible универсальнее: не нужно устанавливать дополнительное ПО, чтобы система могла работать. Нужен только Python.

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

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

    Как устроен Ansible

    Архитектура Ansible сама по себе довольно простая. Система состоит:

    • из главного управляющего сервера — там установлен Ansible, и оттуда отдаются команды. К серверу подключаются пользователи, база данных и облачные системы, ему можно отдавать команды с помощью плейбуков — о них поговорим ниже;
    • зависимых серверов, или хостов — их можно настраивать и конфигурировать с главного.

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

    Набор модулей для работы с серверным ПО

    У Ansible довольно обширный набор модулей для взаимодействия с разными программными компонентами. То есть, он «из коробки» умеет работать с огромным количеством ПО, которое обычно используется на серверах. Например:

    • с базами данных и СУБД;
    • облачными системами и хранилищами;
    • шаблонизаторами и популярными форматами файлов;
    • пакетными менеджерами вроде apt, pip или npm;
    • программами для оповещений и мониторинга;
    • ядром и другими компонентами Linux.

    Для всего этого у Ansible есть свои наборы модулей, доступные сразу после установки. Поэтому, чтобы работать с каким-то популярным серверным ПО с помощью Ansible, обычно не нужно скачивать дополнительные библиотеки и инструменты. Он умеет работать с компонентами сразу.

    Hosts: хранение списка серверов

    Один из компонентов Ansible — инвентарь. Так называется особое хранилище, в котором Ansible держит информацию о хостах. По умолчанию это хранилище находится по адресу /etc/ansible/hosts в системе Linux: в файле hosts находится перечень зависимых серверов. Их можно объединить в группы и дать группам имена: серверы базы данных, DNS-серверы и так далее. А еще можно назначать «родительские» и «дочерние» группы.

    Для каждого хоста можно указать свои параметры и переменные. Но описывать их в hosts считается не очень хорошей практикой, потому что так файл станет слишком большим и непонятным для разработчиков. Поэтому в Ansible есть еще несколько хранилищ для переменных:

    • group_vars хранит переменные, специфичные для каких-то групп;
    • hosts_vars содержит переменные хостов;
    • <роль>/vars описывает переменные для какой-то роли. Про роли расскажем чуть позже.

    Ansible Playbook: hosts, tasks и другое

    Плейбуки в Ansible — это файлы сценариев. Они создаются в человекопонятном формате YAML и содержат информацию о том, какого результата и на каких машинах нужно достичь. Для решения простых задач можно обойтись и без них, но вообще-то плейбуки считаются основой работы с Ansible. Примеры playbook-скриптов в самом простом виде выглядят приблизительно так:

    — (начало документа)

    — hosts: <имя сервера, к которому надо применить изменения>

    — tasks: <состояние, к которому нужно привести сервер>

    Это базовые параметры Ansible playbook, но есть и другие — их указывают перед выполнением задач, чтобы уточнить команды или дать инструкции по работе. Например:

    • vars: <переменные, которые нужно использовать при выполнении скрипта>;
    • user / remote_user: <имя пользователя для авторизации в системе на сервере; в новых версиях используется параметр remote_user, в старых — просто user>;
    • sudo: <выполнение команды от лица другого пользователя, как правило суперпользователя root, параметр принимает значения yes и no>;
    • gather_facts: <сбор или отказ от сбора информации о хостах, значение по умолчанию — yes: Ansible собирает данные о серверах, если не указать обратное>.

    Роли: автоматизация рутины

    Роли — инструмент Ansible, чтобы быстрее решать типовые задачи. Вместо блока tasks в плейбуке можно указать роль: шаблонный набор задач и переменных. Полезно, если нужно, например, отдать одну и ту же задачу разным серверам и не хочется писать несколько блоков tasks.

    Возможности работы с Ansible

    Благодаря удобной структуре с Ansible довольно легко работать. Процесс выглядит примерно так:

    1. Заполнить файл hosts, указать там список зависимых серверов, их доменные имена или IP-адреса.
    2. Указать переменные, которые нужны для подключения. Например, какому-то серверу может понадобиться имя пользователя. По умолчанию связь между серверами идет через SSH по ключу.
    3. Написать плейбук, в нем указать, с какими хостами сейчас нужно работать и что сделать. Сохранить плейбук в файл.
    4. Отдать Ansible команду на запуск плейбука.

    А для некоторых действий плейбуки и вовсе не нужны. Например, узнать информацию о каком-то хосте можно просто командой в консоли. Ну а если в разных плейбуках нужно выполнять одни и те же действия — помогут роли.

    Получается удобная и простая, но вместе с тем функциональная система. Разработчик может:

    • отдать команду одному хосту, группе хостов или всем узлам одновременно;
    • задать типовой набор переменных, чтобы применять их повторно;
    • писать роли и переиспользовать наборы команд;
    • использовать плейбуки, чтобы отдавать сложные команды и уточнять их.

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

    Преимущества Ansible

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

    Понятные языки. Сам Ansible написан на языке программирования Python, а еще использует формат YAML. Оба этих языка с понятным для человека синтаксисом, в них легко сориентироваться, а поддержка Python по умолчанию есть во многих Linux-системах. А еще Python — один из самых популярных языков в мире, то есть, его многие знают. Дополнительные модули для Ansible можно писать на любом языке.

    Широкий набор компонентов. Благодаря большому количеству модулей и плагинов Ansible умеет работать с популярным серверным ПО сразу — не нужно скачивать множество сложных вспомогательных программ.

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

    Гибкие настройки. Возможность работать в режимах pull и push, поддержка параллельных обращений, многообразные настройки команд и переменных — в Ansible много возможностей. Так что работать с ним комфортно, для многих часто встречающихся задач в системе уже есть решения.

    Недостатки Ansible

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

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

    Плохая совместимость с Windows. Ansible сначала поддерживал только Unix-подобные ОС, в том числе Linux. Начиная с версии 1.7 в него добавили поддержку WIndows, но она до сих пор неполная. Работать приходится с оболочкой PowerShell, и в Windows все равно понадобится установить Linux-модуль.

    Как начать работать с Ansible

    Чтобы установить Ansible, на компьютере должен быть Python. Во многих дистрибутивах Linux Python вшит по умолчанию, но если в вашей системе его нет — понадобится сначала установить этот язык. Начинать работать с Ansible в Windows не рекомендуем: это сложнее и не так удобно.

    Потом можно скачать и установить Ansible одной командой в консоли: 

    sudo apt install ansible

    Затем можно начать описывать файл hosts и осваивать плейбуки. Чтобы успешно работать с Ansible, понадобится изучить YAML — впрочем, это довольно простой формат, который можно базово освоить за день. А синтаксис команд и возможности Ansible подробно описаны в его документации.

    Поделиться

    Скопировано

    0 комментариев

    Комментарии