Привет, Хабр!
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 |
|
Лучше всего подходит для |
Быстрое развертывание, меньшие команды или проекты |
Крупные предприятия с необходимостью в строгом управлении конфигурациями |
Организации, нуждающиеся в гибкости и кастомизации |
В заключение напоминаю об открытом уроке, посвящённом управлению конфигурациями и стабилизации инфраструктуры. На лекции будут рассмотрены методы и инструменты для автоматизации процессов управления конфигурациями, контроля изменений и обеспечения целостности системы. Присоединяйтесь по ссылке для регистрации.
ссылка на оригинал статьи https://habr.com/ru/articles/808037/
Добавить комментарий