Что такое Ansible и как применяется в DWH-проектах? Сравнение Ansible с Puppet, Chef, SaltStack

Сегодня бизнес-данные стали основой для принятия управленческих решений, а системы бизнес-аналитики и корпоративные хранилища данных (DWH) — ключевыми компонентами инфраструктуры по работе с данными.

Чем масштабнее система, тем выше требования к стабильности, скорости развёртывания и производительности, которые не могут обеспечить ручное управление. Для автоматизации процессов управления инфраструктуры в ИТ-проектах, включая DWH, используется инструмент Ansible.

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

Сравним Ansible с другими инструментами для автоматизации управления инфраструктурой: Puppet, Chef, SaltStack.

Что такое Ansible?

Ansible— это open-source инструмент для автоматизации развертывания приложений, управления конфигурациями машин и оркестрации инфраструктуры.

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

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

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

Что такое Ansible и как применяется в DWH-проектах? Сравнение Ansible с Puppet, Chef, SaltStack

IaС - «инфраструктура как код»

Инфраструктура как код (Infrastructure as Code, IaC)— современный стандарт для управления ИТ-ландшафтом, который подразумевает предварительное создание декларативных конфигураций и автоматизацию развертывания приложений.

Идея проста: процессы и взаимодействия серверов, сетей, баз данных и прочих элементов инфраструктуры описываются в виде читаемых, версионируемых файлов YAML, JSON, HCL и других декларативных форматов. Эти файлы можно тестировать и автоматически применять как код.IaС обеспечивает:

  • Простоту развертывания

Развернуть приложение можно нажатием кнопки или запуском скрипта

  • Отсутствие ошибок

Исключено ручное вмешательство девопсов и администраторов вне зависимости от количества серверов

  • Версионирование

Все изменения можно отследить в Git, при необходимости легко откатиться назад

  • Стабильность и легкое обслуживание

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

  • Масштабируемость

Инфраструктура быстро масштабируется скриптами, а не руками

Компоненты Ansible

IaС - «инфраструктура как код»

Inventory (инвентарь)

Файл, содержащий список серверов (хостов), которыми будет управлять Ansible. Может быть в форматах INI, YAML, JSON или скрипта (динамический инвентарь).

Что такое Ansible и как применяется в DWH-проектах? Сравнение Ansible с Puppet, Chef, SaltStack

Playbook (плейбук)

Файл в декларативном формате YAML, где описываются шаги (tasks), которые нужно выполнить на целевых машинах.

Плейбук – это «сценарий» автоматизации, который позволяет структурированно и повторяемо описывать процессы — от установки ПО до настройки параметров. Один плейбук может управлять сотнями серверов.

Например, плейбук в примере ниже устанавливает Docker и Docker compose на группы виртуальных машин orchestrators и support.

Что такое Ansible и как применяется в DWH-проектах? Сравнение Ansible с Puppet, Chef, SaltStack

Modules (модули)

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

Что такое Ansible и как применяется в DWH-проектах? Сравнение Ansible с Puppet, Chef, SaltStack

Tasks (таски, задачи)

Отдельные шаги внутри playbook — действия, которые Ansible должен выполнить, например, установить пакет, скопировать файл, изменить конфигурацию. Задачи запускают нужные модули в нужное время.

Таск на примере ниже устанавливает необходимые зависимости (linux-пакеты), которые являются обязательными для дальнейшей установки Docker и Docker Compose

Variables (переменные)

Значения, к которым можно обращаться неоднократно.

Переменные можно задавать в отдельных файлах и потом использовать в плейбуках:

Что такое Ansible и как применяется в DWH-проектах? Сравнение Ansible с Puppet, Chef, SaltStack

Содержимое файла openmetadata_vars.yml:

Что такое Ansible и как применяется в DWH-проектах? Сравнение Ansible с Puppet, Chef, SaltStack

Или можно задавать переменные прямо в плейбуках:

Что такое Ansible и как применяется в DWH-проектах? Сравнение Ansible с Puppet, Chef, SaltStack

Templates (шаблоны)

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

Что такое Ansible и как применяется в DWH-проектах? Сравнение Ansible с Puppet, Chef, SaltStack

Handlers (обработчики)

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

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

Инструкция notify указывает, какой обработчик запустить.

Roles (роли)

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

Различные преднастроенные роли можно найти в open-source хранилище ролей Ansible Galaxy, которое регулярно пополняется членами сообщества Ansible.

Параметры для ролей можно задавать в переменных или в отдельном файле, а также в самих плейбуках:

Что такое Ansible и как применяется в DWH-проектах? Сравнение Ansible с Puppet, Chef, SaltStack

Ansible устроен достаточно просто и логично, именно это делает его таким популярным инструментом автоматизации.

Как Ansible может применяться в проектах DWH

В проектах разработки и внедрения корпоративных хранилищ данных стабильность и предсказуемость инфраструктуры имеют первостепенное значение.

Ansible помогает достичь этого за счёт автоматизации типовых задач и управления сложными конфигурациями:

  • Установка и настройка компонентов

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

В проектах DWH с помощью Ansible мы разворачиваем:

Что такое Ansible и как применяется в DWH-проектах? Сравнение Ansible с Puppet, Chef, SaltStack
  • Автоматическое развертывание через пользовательский интерфейс

К Ansible можно подключить утилиты Ansible Semaphore, Ansible AWX или Ansible Tower, которые обеспечат графический интерфейс для более интуитивного использования инструмента, позволят управлять пользовательскими ролями, легко отслеживать логи и историю изменений.

В наших проектах мы используем Semaphore для небольших проектов и AWX для проектов, в которых требуется более продвинутый и гибкий функционал интерфейса.

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

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

  • Восстановление после сбоев, автоматизация DRP (Disaster Recovery Plan)

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

Автоматизированные плейбуки обеспечивают быстрое переключение на резервные узлы или восстановление среды из бэкапа. Для этого достаточно указать резервные узлы в hosts и запустить плейбуки.

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

  • Хранение чувствительных данных

Встроенный инструмент Ansible Vault позволяет шифровать и дешифровать файлы или отдельные переменные с логинами, паролями, токенами для безопасной работы с Git.

В примере, указанном в разделе "1. Inventory (Инвентарь)" пароли сохраняются в переменных окружения и подставляются в этот файл в момент выполнения скрипта Ansible.

Если использовать Ansible Vault, то данный файл будет выглядеть так:

Что такое Ansible и как применяется в DWH-проектах? Сравнение Ansible с Puppet, Chef, SaltStack

Переменные vault_serv1_password и vault_serv2_password хранятся в файле inventory/group_vars/all/vault.yml. Файл зашифрован с помощью следующей команды (требуется указать пароль или сохранить пароль в файл password_file).

Что такое Ansible и как применяется в DWH-проектах? Сравнение Ansible с Puppet, Chef, SaltStack

После шифрования файл выглядит таким образом:

Что такое Ansible и как применяется в DWH-проектах? Сравнение Ansible с Puppet, Chef, SaltStack

Для его расшифровки при запуске ansible-playbook потребуется указать пароль, которым он был зашифрован, или сохранить пароль в файле password_file.

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

  • Мониторинг и поддержка

С помощью ansible можно настроить системы мониторинга, например, Prometheus, Grafana. Или проверять состояния сервисов без дополнительных систем мониторинга с помощью ролей ansible.builtin.wait_for, ansible.builtin.service, ansible.builtin.shell.

***

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

Чем Ansible лучше других инструментов управления инфраструктурой

Кроме Ansible существует еще несколько довольно популярных решений для автоматизации управления инфраструктурой:

  • Terraform – инструмент по модели управление инфраструктурой как кодом (IaC), используется для поднятия виртуальных машин в облаке, настройка виртуальных сетей, развертывание кластеров kubernetes (как сервис облака). Поддерживает AWS, GCP, Azure.
  • Chef - инструмент автоматизации развертывания и настройки многоуровневых приложений, использующий Ruby DSL для описания конфигураций и работающий по модели «агент-мастер».
  • Puppet - система управления конфигурацией инфраструктуры, основанная на архитектуре «агент-мастер» и собственном DSL-языке.
  • SaltStack - инструмент управления конфигурациями и оркестрации массовых операций, поддерживающий как модель «мастер-агент», так и безагентный режим (через SSH), с использованием YAML и шаблонов Jinja2 для описания состояний.

Кроме перечисленных инструментов CM (Configuration Management) для автоматизации используют python-библиотеку Fabric, Bash-скрипты, Make.

Они позволяют выполнять команды на удалённых серверах (обычно через SSH), но не предоставляют полноценного управления конфигурациями, идемпотентности и масштабируемости как Ansible или другие CM-инструменты.

Некоторые вендоры используют Ansible под капотом для автоматизации установки, обновления и настройки компонентов кластерных продуктов. Например, таким инструментом является оркестратор Arenadata Cluster Manager, который работает внутри экосистемы Arenadata. ACM используется при разработке DWH на базе платформы Arenadata с инструментами Arenadata DB, Arenadata Hadoop и др.

Приводим детальную таблицу сравнения инструментов:

Что такое Ansible и как применяется в DWH-проектах? Сравнение Ansible с Puppet, Chef, SaltStack

Почему именно Ansible: преимущества для DWH-проектов

  • Простота и читаемость

Декларативный YAML-синтаксис позволяет быстро писать и понимать playbook'и, что удобно как для админов, так и для DWH-инженеров, даже без опыта в DevOps

  • Agentless (архитектура без агентов)

Для работы не нужно устанавливать дополнительное PKI-окружение, достаточно SSH-доступа, что упрощает администрирование и безопаснее для корпоративной среды

  • Гибкость и универсальность для проектов DWH

Ansible можно использовать и для настройки окружения (кластеры баз данных, ETL-инструменты), и для управления конфигурацией, и для оркестрации запуска процессов, при этом инструмент обеспечит единую точку управления всей инфраструктурой

  • Интеграция с Git и CI/CD

Инструмент прекрасно работает в связке с GitLab CI, Jenkins и др., что позволяет проще тестировать, откатывать версии и масштабировать системы

  • Активное сообщество, готовые модули и роли для любых задач

Роли и модули для PostgreSQL, Hadoop, Kafka, Airflow, Spark и другие DWH-компоненты можно найти в библиотеке Ansible GalaxyAnsible, как правило, выигрывает другим инструментам для автоматизации развертывания и обслуживания компонентов DWH за счёт простоты и универсальности. Он особенно хорош, если инфраструктура гибридная (часть в облаке, часть on-premise), и нужно автоматизировать как развёртывание, так и управление конфигурациями.

Проекты DWH любой сложности

Начать дискуссию