Найти в Дзене
Qlever Solutions

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

Сегодня бизнес-данные стали основой для принятия управленческих решений, а системы бизнес-аналитики и корпоративные хранилища данных (DWH) — ключевыми компонентами инфраструктуры по работе с данными.
Чем масштабнее система, тем выше требования к стабильности, скорости развёртывания и производительности, которые не могут обеспечить ручное управление. Для автоматизации процессов управления инфраструктуры в ИТ-проектах, включая DWH, используется инструмент Ansible.
В статье рассказываем, как Ansible может применяться в проектах: от автоматического развертывания и настройки компонентов до восстановления после сбоев и централизованного управления параметрами.
Сравним Ansible с другими инструментами для автоматизации управления инфраструктурой: Puppet, Chef, SaltStack. Ansible — это open-source инструмент для автоматизации развертывания приложений, управления конфигурациями машин и оркестрации инфраструктуры. Ansible помогает системным администраторам, DevOps-инженерам, разработчикам упрос
Оглавление

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

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

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

Что такое Ansible?

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

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

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

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

Ansible поддерживает подход «инфраструктура как код» или IaC.

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

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

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

-2

IaС обеспечивает:

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

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

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

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

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

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

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

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

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

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

Компоненты Ansible

Ansible представляет собой CLI (интерфейс командной строки).

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

Ansible состоит из компонентов:

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

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

-3

Playbook (плейбук)

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

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

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

-4

Modules (модули)

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

-5

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

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

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

-6

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

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

-7

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

-8

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

-9

Templates (шаблоны)

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

-10

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

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

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

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

-11
-12

Roles (роли)

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

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

-13

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

-14

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

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

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


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

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

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

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

-15

  • Автоматическое развертывание через пользовательский интерфейс

К 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, то данный файл будет выглядеть так:

-16

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

-17

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

-18

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

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

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

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

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

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

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

  1. Terraform – инструмент по модели управление инфраструктурой как кодом (IaC), используется для поднятия виртуальных машин в облаке, настройка виртуальных сетей, развертывание кластеров kubernetes (как сервис облака). Поддерживает AWS, GCP, Azure.
  2. Chef - инструмент автоматизации развертывания и настройки многоуровневых приложений, использующий Ruby DSL для описания конфигураций и работающий по модели «агент-мастер».
  3. Puppet - система управления конфигурацией инфраструктуры, основанная на архитектуре «агент-мастер» и собственном DSL-языке.
  4. 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 и др.

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

-19

Почему именно 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 Galaxy

***

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

В следующих статьях опишем конкретные кейсы использования Ansible командой Qlever.

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

Команда Qlever разработает архитектуру DWH, подходящую под уникальные задачи бизнеса. Подберем, развернем и настроим Tech Stack в соответствии с вашими запросами и возможностями.