Привет, Хабр!
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 |
Лучше всего подходит для |
Быстрое развертывание, меньшие команды или проекты |
Крупные предприятия с необходимостью в строгом управлении конфигурациями |
Организации, нуждающиеся в гибкости и кастомизации |
В заключение напоминаю об открытом уроке, посвящённом управлению конфигурациями и стабилизации инфраструктуры. На лекции будут рассмотрены методы и инструменты для автоматизации процессов управления конфигурациями, контроля изменений и обеспечения целостности системы. Присоединяйтесь по ссылке для регистрации.
tas
Недавно как раз задумывался над выбором продукта из приведенных в статье.
Мне бы, как потенциальному пользователю были бы интересны именно детали применимости продуктов для конкретных задач. У вас есть немного про это в "Лучше всего подходит для " - но как же там мало информации для принятия решения... Глядя на описание я так и не могу выбрать продукт, который мне нужен.
Было бы здорово хотя бы понимать, что такое "Быстрое развертывание, меньшие команды или проекты ". "Меньшие команды или проекты" - имеется ввиду, что с конфигами нужно работать в 1 лицо, потому, что там есть проблемы в совместном использовании и самих конфигов не должно быть более нескольких штук? Тогда сколько конкретно и что будет, если проект выйдет за эти ограничения - понимаете мои затруднения?
Вспомнилась старая статья по этим продуктам: https://habr.com/ru/companies/jugru/articles/416763/. Статья довольно сильно устарела, но там мне понравился сам подход к сравнению продуктов, хотя и по ней сделать осознанный выбор очень тяжело...