Привет, Хабр!

Runbook Automation — это процесс использования специальных программных решений для автоматизации выполнения повторяющихся задач и процедур, которые в традиционных условиях выполняются вручную операторами IT-систем. RBA находит применение в автоматизации широкого спектра операций, от мониторинга и диагностики до управления инцидентами и восстановления после сбоев.

Основная цель автоматизации ранбуков — повышение надежности операционных процессов. В этой статье рассмотрим и сравним кратко три основных инструментв RBA: Ansible, Puppet, и Chef.

Ansible

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

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

С Ansible можно:

  • Автоматом развертывать приложения.

  • Управлять сервисами, устанавливать и обновлять пакеты.

  • Интегрировать с облачными платформами, как AWS, Microsoft Azure, и Google Cloud.

  • Оркестрировать виртуальные машины и контейнеры, включая Kubernetes и Docker.

  • Управлять юзерами и правами доступа.

  • Настраивать сетевые устройства от различных производителей.

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

Puppet

Puppet уже использует модель клиент-сервер, где управляющий сервер Puppet Master взаимодействует с агентами, установленными на управляемых узлах. Основная фича Puppet заключается в его способности декларативно описывать состояние ресурсов системы с использованием своего языка настройки — Puppet DSL.

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

file { '/etc/nginx/nginx.conf':
  ensure  => 'file',
  owner   => 'root',
  group   => 'root',
  mode    => '0644',
  content => template('nginx/nginx.conf.erb'),
  require => Package['nginx'],
}

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

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

Возможности Puppet:

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

  • Hiera: инструмент для управления конфигурационными данными, который позволяет отделить данные от кода.

  • Facter: утилита, которая собирает информацию о системе, такую как ОС, IP-адреса, оперативная память и другие факты, которые затем можно использовать в конфигурациях.

Chef

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

Основные компоненты Chef:

  • Chef Server: центральный сервер, где хранятся все рецепты, cookbooks, и политики, а также информация о состоянии каждого управляемого узла.

  • Chef Client: устанавливается на каждый управляемый узел и отвечает за применение конфигураций, заданных на сервере.

  • Chef Workstation: место, где создают и тестируют свои cookboks и рецепты перед их распространением через Chef Server.

Для примера настроим сервер с Chef, где целью будет установка и настройка веб-сервера Nginx на узле с ОС Ubuntu. Упустим все моменты установок, там все достаточно просто.

В Chef Workstation создаем новую cookbook, которая будет содержать все необходимые инструкции и ресурсы:

chef generate cookbook nginx_cookbook

Команда создаст структуру каталогов для новой cookbook под названием nginx_cookbook.

Далее переходим в каталог cookbook и создаем рецепт, который будет управлять установкой Nginx. Открываем файл recipes/default.rb и пишем там:

# установка пакета Nginx
package 'nginx' do
  action :install
end

# управление службой Nginx
service 'nginx' do
  supports status: true, restart: true, reload: true
  action [:enable, :start]
end

# создание и публикация основной страницы Nginx
file '/usr/share/nginx/html/index.html' do
  content '<html>
  <head><title>Welcome to Chef managed Nginx!</title></head>
  <body><h1>Hello from Chef managed Nginx!</h1></body>
  </html>'
  mode '0644'
  owner 'www-data'
  group 'www-data'
  notifies :reload, 'service[nginx]', :immediately
end

Загружаем cookbook на сервер Chef для дальнейшего распространения:

knife cookbook upload nginx_cookbook

Добавим рецепт из cookbook в список запуска для целевого узла через Chef Server, используя команду knife или через Web UI. После этого Chef Client, установленный на целевом узле, сможет применить настройки:

knife node run_list add NODE_NAME 'recipe[nginx_cookbook]'

Запускаем Chef Client на узле, чтобы применить настройки:

sudo chef-client

Сравним эти инструменты в таблице

Характеристика

Ansible

Puppet

Chef

Тип

Декларативный и процедурный

Декларативный

Декларативный

Архитектура

Агентлесс (использует SSH)

Клиент-сервер (агенты на узлах)

Клиент-сервер (агенты на узлах)

Язык

YAML

Puppet DSL

Ruby (recipes)

Управление конфигурациями

Идемпотентность, но прост в управлении

Идемпотентность, мощные возможности управления

Идемпотентность, гибкий и мощный

Интеграция

Хорошо интегрируется с большинством CI/CD инструментов

Хорошая поддержка интеграции с другими инструментами

Гибкая интеграция благодаря Ruby

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

Лучше для меньших или менее сложных сред

Отлично масштабируется для больших инфраструктур

Отлично масштабируется для больших инфраструктур

Фичи

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

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

Гибкость в написании скриптов благодаря Ruby

Лучше всего подходит для

Быстрое развертывание, меньшие команды или проекты

Крупные предприятия с необходимостью в строгом управлении конфигурациями

Организации, нуждающиеся в гибкости и кастомизации


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

Комментарии (1)


  1. tas
    18.04.2024 07:46

    Недавно как раз задумывался над выбором продукта из приведенных в статье.

    Мне бы, как потенциальному пользователю были бы интересны именно детали применимости продуктов для конкретных задач. У вас есть немного про это в "Лучше всего подходит для " - но как же там мало информации для принятия решения... Глядя на описание я так и не могу выбрать продукт, который мне нужен.

    Было бы здорово хотя бы понимать, что такое "Быстрое развертывание, меньшие команды или проекты ". "Меньшие команды или проекты" - имеется ввиду, что с конфигами нужно работать в 1 лицо, потому, что там есть проблемы в совместном использовании и самих конфигов не должно быть более нескольких штук? Тогда сколько конкретно и что будет, если проект выйдет за эти ограничения - понимаете мои затруднения?

    Вспомнилась старая статья по этим продуктам: https://habr.com/ru/companies/jugru/articles/416763/. Статья довольно сильно устарела, но там мне понравился сам подход к сравнению продуктов, хотя и по ней сделать осознанный выбор очень тяжело...