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

10

В конце моего ответа на вопрос: Как DevOps может помочь улучшить процедуры условного депонирования? У Тенсибая возник вопрос:

Что может понадобиться Капистрано поверх марионетки или шеф-повара?

Мой ответ состоял в том, чтобы опубликовать ссылку на статью Ноа Гиббса "Нужны ли нам и Капистрано, и шеф-повар?" , Лично я все же согласен с мнением Ноа, что наиболее уместно:

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

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

  • Инструменты управления конфигурацией - это создание и поддержание желаемого состояния системы, они по своей природе идемпотентны. Примерами инструментов управления конфигурацией являются Chef , Puppet , Ansible , PowerShell DSC , Salt Stack .

  • Средства развертывания - это доставка версий программного обеспечения в среду хостинга, они предоставляют функциональные возможности для поддержки нескольких версий программного обеспечения на нескольких машинах и управления тем, какая версия является «текущей», они по своей природе являются обязательными по своей природе. Примерами средств развертывания являются Capistrano , Octopus Deploy , Deployer и Command.io .

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

Вопрос: Достигли ли инструменты управления конфигурацией, такие как Chef, Ansible и Puppet, настолько, что они способны выполнять как идемпотентные, так и императивные модели?

Ричард Слейтер
источник
Ansible всегда мог, кукольный с 4.0
Иржи Клауда
1
Ричард, спасибо за все вопросы высокого качества, которые вы задавали в последнее время. Я действительно ценю тяжелую работу, которую вы проделали, чтобы заполнить сайт во время бета-тестирования. Задавать хорошие наводящие вопросы сложно, и вы действительно хороши в том, что делаете.
Иржи Клауда
@JiriKlouda, вы более чем рады, буквально на моем компьютере есть «DevOps SE» post-it ™, чтобы напоминать мне о необходимости публиковать вопросы, когда они приходят на ум.
Ричард Слейтер

Ответы:

10

В таком контексте типичный совет должен быть немедленно применим: используйте правильный инструмент для работы.

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

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

Из-за этого вполне возможно, что целые части процесса разработки программного обеспечения покрываются / перекрываются несколькими инструментами (наборами), даже если их основная функция / возможности отличаются.

Так что это действительно сводится к той функциональности, которую вы хотите достичь в вашем конкретном процессе, и к тому, насколько хорошо тот или иной инструмент выполняет работу в вашем контексте . Субъективность / предпочтения / удобство включены.

Делать этот вопрос в первую очередь основанным на мнении;)

Дан Корнилеску
источник
Я полностью согласен! Все больше и больше организаций разрабатывают «набор инструментов DevOps» специально с помощью этих правильных инструментов для идеи работы. Для получения дополнительной информации эти вики-страницы неплохо
справляются
Я бы просто добавил, что чем больше вы расширяете использование инструмента за пределы его основной цели, тем больше усилий потребуется для этого. Возможно, вы сможете использовать определенный инструмент как для развертывания, так и для настройки, но есть большая вероятность, что он потребует больше усилий (или потребует дополнительных рекомендаций), чем просто использование двух инструментов.
jschmitter
6

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

  • Определите текущее состояние системы.
  • Передача файлов в систему.
  • Добавить или изменить постоянные данные (например, файлы конфигурации, данные базы данных, параметры реестра)
  • Запустите или перезапустите программы.

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

Используя инструмент развертывания Capistrano, неуклюже использовать свой язык, чтобы сообщить системе, что веб-сервер активен. Вы должны выполнить команду для перезапуска веб-сервера, а другую - для проверки работоспособности веб-сервера. Это вызов для перевода веб-сервера в известное состояние.

Используя инструмент управления конфигурацией Ansible, перезапустить веб-сервер неудобно. Язык позволяет сообщать веб-серверу о том, что он «включен», но если вы хотите, чтобы он был перезапущен, вы должны установить его состояние «перезапущено». Но нет простого способа проверить, был ли перезапущен веб-сервер. Это помеха в Ansible для включения одноразовых операций.

Некоторые люди предпочитают выполнять оба типа работ с помощью одного инструмента и обходить неровные края. Другие люди предпочитают иметь два инструмента, чтобы сделать почти то же самое, но без грубых краев. Чтобы ответить на вопрос, «уместность» - дело вкуса. Этот ответ объясняет почему.

Джей Годсе
источник
Я согласен, что Капистрано немного неловко для этого случая. Обычно он используется в качестве пространства имен для удаленно выполняемых скриптов ruby ​​/ snippets / lambda over ssh. Ваш раздел на Ansible неправильный. Вы могли бы хотеть исследовать это немного и исправить это. Хороший первый пост, но, пожалуйста, работайте над этим немного больше.
Иржи Клуда
@JiriKlouda что не так с разделом Ansible? Вы имеете в виду раздел no easy way to check if the web server has been restartedв том, что он может быть проверен путем регистрации переменной?
Дэвид Васандани
Есть несколько способов сделать это, автор ответа просто не знает их. Не стесняйтесь превратить его в отдельный вопрос, так как комментарии не являются хорошим местом для технических ответов.
Иржи Клауда
4

TL; DR : Просто используйте Ansbile, это как инструмент настройки и развертывания :)

Существует несколько типов развертывания:

  • Приложение на основе (файлы, архивы пакетов)

  • На основе контейнеров (включает виртуальные машины, среду обитания, LXC, Docker)

  • На основе функций (Микро услуги / Лямбда / Функции)

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


Для развертывания вам необходимо выполнить две вещи:

  1. Правильные файлы или пакеты необходимо перенести на сервер.
  2. Конфигурация и сервисные состояния должны измениться.

Теперь для (1) вы можете использовать несколько стратегий:

  • Хранилища артефактов / Синхронизация
  • Репозитории пакетов / Менеджеры пакетов
  • Система контроля версий / Обновление + Компиляция (опционально)
  • Протоколы передачи файлов (scp, rsync, ftp)
  • Инструменты развертывания

Для (2) вы можете использовать:

  • Инструменты управления конфигурацией
  • Инструменты развертывания

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

Исходя из личного опыта , я использовал все комбинации, но в настоящее время мы используем Capistrano для развертывания и Ansible sync для управления конфигурацией, а также VCS и репозитории пакетов для передачи файлов, но есть проблемы с Capistrano, и мы планируем перейти от него к Unify на Ansible для развертывания, обслуживания и управления конфигурацией.

Иржи Клауда
источник
2
Мой опыт работы с Ansible и Capistrano приведет меня к такому же выводу. Я бы просто пошел с Ansible. И что хорошо в Ansible, так это то, что его объявления «желаемого состояния» очень хорошо отображают основные императивные команды.
Джей
1
Иногда люди игнорируют вклад сообщества в инструменты управления конфигурацией. Компоненты сообщества Ansible, за некоторыми заметными исключениями (например, DebOps), еще не настолько отточены и функциональны, как Chef и Puppet. В качестве измерения этого, хотя я обнаружил, что Puppet и Chef способны «применять» и « отменять» директивы конфигурации ( вносить или отменять ряд изменений), Ansible хорош в части «применять», но не так хорош в « неприменить "часть.
Джесси Адельман
3

Развертывание приложения сложно определить, так как в нем много подзадач. Системы управления Config превосходны в задачах моделирования, которые сходятся и работают с «каково желаемое состояние системы». В контексте развертывания приложений это отлично подходит для таких вещей, как развертывание битов на машине, управление файлами конфигурации и настройка системных служб. То, для чего это крайне плохо, - это процедурные вещи, в частности миграция баз данных и перезапуск служб. Я обычно пытаюсь поместить сходящуюся логику в Chef и позволить внешнему процедурному инструменту (обычно в моем случае это Fabric) обрабатывать несколько оставшихся битов, а также упорядочивать фактические сходящиеся значения.

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

coderanger
источник
3

Для программного обеспечения и развертывания кода на существующем сервере или в контейнере Docker ответ относительно прост: нет, вам не нужно и то, и другое, но вам может потребоваться и то и другое, если другой инструмент или утилита добавляет ценность и является подходящим инструментом для работы. Однако все становится сложнее при развертывании серверов и операционных систем.

Одним из преимуществ менталитета DevOps является обработка инфраструктуры как кода и частое развертывание или уничтожение виртуальных машин или даже «голого железа» в высокоэластичной среде. Ваша система управления конфигурацией не может легко загружать по сети и запускать ваш сервер для вас, а также не может управлять репозиториями, пакетами и обновлениями / исправлениями для вас во время и после развертываний или, в некоторых случаях, лицензирования и предоставления прав.

Для Amazon Web Services по большей части это довольно удобно для управления через API, но для тех из нас, кому приходится управлять собственными дата-центрами, это не вариант. По этой причине проект ForemanRed Hat, который переименует его ) сочли необходимым объединить вместе Katello , Candlepin и менеджер конфигурации, такой как Ansible, Foreman или Puppet, при развертывании сценария Katello .

Таким образом, хотя вы можете обойтись без использования инструментов управления конфигурацией для развертывания программного кода на стороне разработчика, а на стороне Ops, есть несколько случаев, когда ответ звучит громко: нет, инструменты управления конфигурацией не Уместно использовать в качестве инструментов развертывания "Это потребует серьезного переосмысления колеса и нецелесообразно. Вместо этого вы должны использовать свои инструменты управления конфигурацией, чтобы начать развертывание в другом инструменте.

Джеймс Шиви
источник
Или нет, шеф-повар изящно обрабатывает Capistrano, как развертывает, шоколадные пакеты развертывает под окнами и все хорошо известные установки пакетов (deb, rpm, msi, nullsoft и т. Д.). Это несет определенную нагрузку на упаковочную сторону, которую должна решить среда обитания, но это система управления конфигурацией, вполне способная справляться с развертываниями, я могу сказать, что она выполняет примерно 40 развертываний в неделю в нескольких средах, включая производство, что не обходится без заблаговременно кодировать его, но это не намного выше, чем с любым другим инструментом ateotd.
Тенсибай
1
На самом деле Foreman не является ни системой обеспечения, ни развертывания, ни системой управления конфигурацией. Это просто оболочка, которая предоставляет веб-интерфейс и среду, которая склеивает систему управления конфигурацией (puppet), систему управления лицензиями (подсвечник), систему управления репозиторием и исправлениями (Katello) и систему подготовки / развертывания (kickstart). Он объединяет все эти разные проекты и склеивает их. Хотя практически любая система управления конфигурацией может установить пакет, они не могут обеспечить управление исправлениями аналогично серверу WSUS
Джеймс Шивей,
или прикреплять или развертывать определенные версии пакетов, включая пакеты, которых нет в репозиториях верхнего уровня или в репозиториях с гибридами. Моя точка зрения заключается в том, что если Red Hat / The Foreman / Katello посчитали, что это невозможно сделать просто с помощью системы управления конфигурацией - в первую очередь потому, что в ней отсутствовала часть обеспечения / развертывания, которую стоит отметить.
Джеймс Шиви
Я неправильно понял предложение о Кателло, мой плохой. Первый комментарий был
сделан