Кратко про лидеров рынка Runbook Automation: Ansible, Puppet, и Chef

4fa6566a6507411250909412b0f103d6.png

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

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 '
  Welcome to Chef managed Nginx!
  

Hello from Chef managed Nginx!

' 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

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

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

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

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

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

© Habrahabr.ru