Ansible и Puppet — это системы управления конфигурацией (SCM), необходимые для создания повторяемых инфраструктур.
Ansible прост в использовании, имеет безагентную архитектуру (не требует установки агента/клиента в целевой системе) и YAML-подобный DSL, написан на Python и легко расширяется с помощью модулей.
Обычно управляет конфигурацией Linux. Puppet имеет клиент-серверную архитектуру (периодический опрос сервера для обновления изменений конфигурации, внесенных сетевым администратором), написан на Ruby и имеет Ruby-подобный DSL. Это приложение позволяет централизованно управлять настройкой программного обеспечения, установленного на нескольких компьютерах.
В статье сравниваются преимущества и недостатки этих СКМ.
По сравнению с 90-ми годами сегодня системным администраторам и разработчикам приходится управлять гораздо большим количеством серверов, на которых размещается гораздо больше приложений.
Причиной этого является экспоненциальный рост вычислительной техники для организаций и компаний из-за появления новых технологий, таких как виртуализация и облачные вычисления.
Таким образом, такие инструменты, как Puppet и Ansible, быстро становятся важными компонентами для управления большим количеством серверов, например, в центрах обработки данных.
Они называются инструментами управления конфигурацией (CM) и удаленного выполнения (RE) и часто используются вместе с инструментами обновления программного обеспечения.
Эти полезные приложения позволяют, например, сетевому администратору выполнять действия на нескольких серверах одновременно, развертывая несколько приложений одним щелчком мыши, что значительно упрощает настройку и обслуживание десятков, сотен или даже тысяч серверов.
Ansible против Puppet: краткий обзор
Puppet – один из самых известных брендов на рынке КМ.Он существует с 2005 года, что для инструментов CM эквивалентно существованию с момента зарождения человечества.
Многие известные клиенты, такие как Google, Reddit, Dell, PayPal, Oracle, Los Alamos Labs и Стэнфордский университет, управляют своими центрами обработки данных с помощью Puppet. Наличие таких клиентов всегда придает продукту определенный уровень доверия.
Puppet также может похвастаться наиболее продуманным интерфейсом и работает на всех основных операционных системах — Linux, Windows, Unix и даже Mac OS X. Следуя модели, созданной различными версиями Linux, это приложение с открытым исходным кодом разработано на Ruby. Однако существует авторитетная, хорошо зарекомендовавшая себя компания по поддержке и спонсорству PuppetLabs, которая предлагает профессиональную поддержку и коммерческую корпоративную версию программного обеспечения.
Puppet также предлагает простой процесс установки и несколько инструментов для таких задач, как быстрое развертывание на клиентских серверах.
В дополнение к графическому интерфейсу имеется интерфейс командной строки на базе Ruby. Фактически, для большинства сложных задач вам, скорее всего, придется полагаться на CLI, поскольку графический интерфейс является интерфейсом просмотра, управления и мониторинга.
Это означает, что вам нужно не только стать системным администратором, но и изучить Ruby.
Вы можете подумать: «Все это звучит великолепно! Есть ли какие-либо недостатки, или вам следует пойти и купить Puppet прямо сейчас?.
Споры вокруг использования этого SCM на специализированных форумах CM заключаются в том, что Puppet, как и многие другие гиганты программного обеспечения, стал жертвой собственного успеха и размер.
«Проворный» и «проворный» — это не слова, которые можно использовать для описания того, как работает Puppet. Пользователи сообщают об ошибках, на исправление которых уходит слишком много времени, а новые запросы игнорируются.
Существует также некоторое недовольство тем, что PuppetLabs настаивает на том, чтобы заставить своих клиентов принять коммерческую версию.
Наконец, хотя Puppet поддерживает как чистый Ruby, так и его настроенный DSL в CLI, поддержка только Ruby устарела.
Это плохая новость для тех, кто изучил только Ruby, а не DSL. Ansible превзошел Puppet, захватив крупнейший доля рынка в отрасли систем управления конфигурациями — 26,5%.
За ним следуют Microsoft System Center CM (21,8%) и Puppet (12%).
Это также продукт с открытым исходным кодом, выпущенный в 2012 году и с тех пор поддерживаемый разработчиком AnsibleWorks. Он был разработан на Python, а не на Ruby, что делает его духовно ближе к Salt (еще одному новому инструменту CM), чем к Puppet. Еще одним преимуществом Python является то, что он встроен в большинство приложений Unix и Linux, поэтому SCM, написанные на этом языке, устанавливаются и работают быстрее.
Уникальное преимущество Ansible заключается в том, что его легко и быстро развернуть.
Фактически, эта система даже не использует развертываемые агенты для связи с главным клиентом, вместо этого все функции выполняются через SSH. Для тех конфигураций, которые не поддерживают корневой SSH, Ansible может запускать «sudo» от имени пользователя root. Ansible можно запускать из CLI без использования файлов конфигурации для простых задач, таких как проверка работы службы или запуск обновлений и перезагрузок.
Для более сложных задач конфигурация Ansible обрабатывается с использованием синтаксиса YAML в файлах конфигурации, называемых «книгами воспроизведения».
Команды Ansible можно писать практически на любом языке программирования и распространять в виде общих модулей JSON, что явно является преимуществом по сравнению с выбором одного конкретного языка.
Ansible стал более популярным как новый подход к традиционным задачам настройки, и многие компании используют его для развертывания крупных центров обработки данных.
Сообщество энтузиастов Ansible прилагает все усилия, чтобы закрепить свой успех, увеличивая количество поддерживаемых устройств, улучшая интеграцию поддержки Windows, улучшая экосистему и т. д.
Ansible против Puppet: разница в установке
Различия между Ansible и Puppet становятся очевидными с момента установки систем.Поскольку они следуют разным архитектурным парадигмам, их настройка существенно различается.
Таким образом, Ansible имеет явную цель сделать процесс установки максимально простым, что проявляется в пользовательском опыте.
Чтобы настроить Ansible, сначала необходимо назначить один узел в качестве узла управления.
В действительности любой из ваших узлов может быть узлом управления.
Вы можете установить Ansible на этот узел, используя последний пакет Ansible из репозиториев пакетов вашего дистрибутива, без необходимости настраивать клиентское программное обеспечение на других узлах.
Просто создайте пару ключей SSH на своем узле управления, а затем скопируйте их на остальные узлы.
Затем создайте файл инвентаризации для хостов Ansible — обычно в /etc/ansible/hosts в операционных системах Linux, таких как Red Hat Linux, Ubuntu и Debian. Теперь вы готовы использовать Ansible для запуска PlayBook как на вашем узле управления, так и на остальной части вашей сетевой инфраструктуры.
Ansible будет использовать SSH-соединения с вашим управляющим узлом для запуска управления конфигурацией на основе PlayBook. Настройка Puppet выглядит немного сложнее, но в Интернете есть много документации, которая поможет в сложных случаях.
Во-первых, вам нужно будет настроить главный и агентский узлы так, чтобы у них было одинаковое время и часовой пояс.
Затем вам нужно будет войти на главный сервер как root и установить программное обеспечение сервера Puppet. Далее вам необходимо настроить главный файл Puppet /etc/hosts для подключения всех управляемых клиентов, запустить службу PuppetServer и установить для нее режим «включения» для получения клиентских подключений через порт 8140. Поскольку Puppet полагается на клиентское программное обеспечение, вам понадобится установить программные агенты Puppet на каждый из них.
Вам также потребуется добавить IP-адрес главного сервера в /etc/hosts, чтобы клиент мог подключиться к нему.
Для этого необходимо запустить и включить службу агента Puppet на каждом клиенте, а затем сгенерировать сертификаты SSL, поскольку эта система CM использует HTTPS для связи между мастером и клиентом.
В обоих случаях потребуется усилить безопасность сервера, чтобы исключить возможность несанкционированных подключений.
Ansible vs Puppet: масштабируемость и механизм транспорта конфигурации
Оба SCM хорошо масштабируются, но для достижения этой цели используют разные механизмы транспортировки конфигурации.На самом деле, независимо от того, нужно ли вам управлять несколькими сотнями узлов или десятками тысяч узлов, существуют приемы и стратегии, которые можно использовать на каждой платформе, чтобы легко масштабироваться до нужного вам уровня.
Ansible по умолчанию использует «умный» механизм транспорта, основанный на доверенных сертификатах SSH. Ansible сначала проанализирует PlayBooks и определит затронутые элементы инфраструктуры.
Затем он откроет SSH-соединение и создаст временный каталог.
После закрытия этого соединения Ansible открывает второе соединение для копирования поверх кода модуля Ansible и шаблонного кода Ansible. Ansible закроет это соединение перед открытием третьего, последнего соединения для выполнения кода.
Этот параметр подойдет для большинства целей, но его можно изменить по мере масштабирования инфраструктуры.
Первая функция, которую может использовать Ansible, называется ControlPersist, и она использует постоянные, постоянные сокеты для сокращения времени установления связи, необходимого для нескольких соединений.
Ansible также поддерживает «конвейерную обработку» — конфигурацию, которая уменьшает количество необходимых соединений с трех до одного.
Наконец, Ansible можно настроить для одновременной обработки большего количества узлов инвентаризации, настроив переменную forks в конфигурации этой системы.
Значение по умолчанию — 5, но вы можете установить более высокое значение, чтобы ускорить обработку.
Транспортный механизм Puppet — HTTPS, который управляется с помощью SSL-сертификатов.
Один сервер Puppet обрабатывает запросы конфигурации для всего списка клиентов Puppet. Каждый клиент отправляет факты Puppet на главный сервер вместе с запросом каталога Puppet, после чего главный сервер отвечает этим каталогом.
Затем клиент обрабатывает каталог, проверяя каждый программный ресурс на соответствие требуемому состоянию конфигурации, указанному в каталоге.
Если ресурс не находится в желаемом состоянии, клиент Puppet обновит ресурс на этом компьютере и после завершения обновления сообщит об изменении конфигурации на сервер Puppet.
Примечательно, что модель обработки Puppet выделяет поток JRuby из пула потоков для обработки каждого входящего клиентского соединения.
По мере увеличения количества узлов вы можете оптимизировать масштабирование Puppet, увеличивая количество потоков JRuby, доступных в пуле.
Это можно сделать, установив для параметра конфигурации Puppet «max-active-instances» значение, превышающее значение по умолчанию, равное 1. Обычно это значение равно количеству ядер ЦП на вашем компьютере, но имейте в виду, что это потребуется больше места.
использовалась оперативная память процессора.
Как правило, вам также необходимо установить более высокий «максимальный размер кучи» для JVM вашего сервера Puppet, чтобы гарантировать, что ваши дополнительные потоки JRuby могут быть выделены без возникновения ошибки «недостаточно памяти» виртуальной машины Java. Вы должны быть осторожны при выполнении этой настройки, так как вы можете столкнуться с потерей производительности.
Пример кода CM Ansible
Для повседневной работы по настройке написание кода Ansible оказывается на удивление простым благодаря сочетанию двух факторов: использованию формата YAML для PlayBooks и декларативному стилю управления конфигурацией, исключающему острые углы.Это важно для быстрого повышения производительности команд DevOps и обеспечения управляемости кода даже при выполнении сложных задач настройки.
Код Ansible идемпотентен.
Это означает, что вы можете безопасно запускать PlayBook на системных компонентах снова и снова, не нарушая при этом свои серверы.
Ansible изменит конфигурацию программных ресурсов только на тех серверах, где она находится за пределами желаемого состояния.
Например, если для вашей PlayBook требуется установка пакета и создание определенного файла конфигурации на диске, Ansible установит только этот пакет и создаст файл конфигурации, указанный при первом запуске PlayBook на хосте.
Последующие запуски PlayBook автоматически оставляют пакет нетронутым до тех пор, пока не произойдет какое-либо изменение, которое удалит или изменит указанный файл или конфигурацию пакета.
Это сохраняет ваши узлы в предсказуемом, детерминированном состоянии с минимальной вероятностью изменения конфигурации или вообще без нее.
Ниже приведен пример кода Ansible PlayBook, который устанавливает веб-сервер Tomcat на ваши узлы.
Этот пример взят из официального репозиторий Примеры Ansible, которые вам следует просмотреть, чтобы лучше познакомиться с идиоматическим стилем Ansible:
Эта конкретная задача Ansible загружает и устанавливает Apache Tomcat вместе с зависимым Java JDK 1.7, а затем настраивает, запускает и обеспечивает установку Tomcat. Как вы можете видеть в этом примере, файлы, управляемые Ansible, могут содержать шаблоны Jinja, что упрощает вычисление значений и делает вашу конфигурацию более гибкой.--- - name: Install Java 1.7 yum: name=java-1.7.0-openjdk state=present - name: add group "tomcat" group: name=tomcat - name: add user "tomcat" user: name=tomcat group=tomcat home=/usr/share/tomcat createhome=no become: True become_method: sudo - name: Download Tomcat get_url: url= http://archive.apache.org/dist/tomcat/tomcat-7/v7.0.61/bin/apache-tomcat-7.0.61.tar.gz dest=/opt/apache-tomcat-7.0.61.tar.gz - name: Extract archive command: chdir=/usr/share /bin/tar xvf /opt/apache-tomcat-7.0.61.tar.gz -C /opt/ creates=/opt/apache-tomcat-7.0.61 - name: Symlink install directory file: src=/opt/apache-tomcat-7.0.61 path=/usr/share/tomcat state=link - name: Change ownership of Tomcat installation file: path=/usr/share/tomcat/ owner=tomcat group=tomcat state=directory recurse=yes - name: Configure Tomcat server template: src=server.xml dest=/usr/share/tomcat/conf/ notify: restart tomcat - name: Configure Tomcat users template: src=tomcat-users.xml dest=/usr/share/tomcat/conf/ notify: restart tomcat - name: Install Tomcat init script copy: src=tomcat-initscript.sh dest=/etc/init.d/tomcat mode=0755 - name: Start Tomcat service: name=tomcat state=started enabled=yes - name: deploy iptables rules template: src=iptables-save dest=/etc/sysconfig/iptables when: "ansible_os_family == 'RedHat' and ansible_distribution_major_version == '6'" notify: restart iptables - name: insert firewalld rule for tomcat http port firewalld: port=/tcp permanent=true state=enabled immediate=yes when: "ansible_os_family == 'RedHat' and ansible_distribution_major_version == '7'" - name: insert firewalld rule for tomcat https port firewalld: port=/tcp permanent=true state=enabled immediate=yes when: "ansible_os_family == 'RedHat' and ansible_distribution_major_version == '7'" - name: wait for tomcat to start wait_for: port=
Код YAML легко читать и писать как системным администраторам, так и разработчикам.
В результате Ansible становится доступной системой управления конфигурацией как для опытных, так и для начинающих пользователей.
Пример кода марионетки CM
Специализированный язык Puppet основан на Ruby, но его синтаксис гораздо ближе к императивным языкам C-стиля, таким как Perl, Java и C++.Этот подход устраняет разрыв между разработчиками, знакомыми с Ruby, и теми, кто может быть незнаком с этим языком.
В результате вам может вообще не потребоваться знание Ruby, чтобы изучить и продуктивно использовать Puppet DSL.
Это пример манифеста Puppet из репозитория Puppet Module PuppetLabs MySQL, который устанавливает и настраивает клиентский пакет MySQL: # @summary
# Installs and configures the MySQL client.
#
# @example Install the MySQL client
# class {'::mysql::client':
# package_name => 'mysql-client',
# package_ensure => 'present',
# bindings_enable => true,
# }
#
# @param bindings_enable
# Whether to automatically install all bindings. Valid values are `true`, `false`.
Default to `false`.
# @param install_options # Array of install options for managed package resources. You must pass the appropriate options for the package manager. # @param package_ensure # Whether the MySQL package should be present, absent, or a specific version. Valid values are 'present', 'absent', or 'x.y.z'.
# @param package_manage # Whether to manage the MySQL client package. Defaults to `true`.
# @param package_name
# The name of the MySQL client package to install.
#
class mysql::client (
$bindings_enable = $mysql::params::bindings_enable,
$install_options = undef,
$package_ensure = $mysql::params::client_package_ensure,
$package_manage = $mysql::params::client_package_manage,
$package_name = $mysql::params::client_package_name,
) inherits mysql::params {
include '::mysql::client::install'
if $bindings_enable {
class { 'mysql::bindings':
java_enable => true,
perl_enable => true,
php_enable => true,
python_enable => true,
ruby_enable => true,
}
}
# Anchor pattern workaround to avoid resources of mysql::client::install to
# "float off" outside mysql::client
anchor { 'mysql::client::start': }
-> Class['mysql::client::install']
-> anchor { 'mysql::client::end': }
}
Важным преимуществом Puppet является то, что в отличие от перечисленных выше императивных языков программирования Puppet DSL является декларативным, в чем-то похожим на XML, а также на код YAML из приведенного выше примера кода Ansible. Декларативный подход как Puppet, так и Ansible действительно проявляется в обоих примерах кода.
С точки зрения кодирования они похожи и ближе друг к другу, чем такие инструменты, как Chef. Однако декларативный язык Puppet также предоставляет Ruby-подобные конструкции, такие как условные выражения и итерации, что опять же является компромиссом для пользователей Ruby и пользователей, не использующих Ruby.
Ansible против Puppet: простота использования
Для команды разработчиков простота использования должна быть важной частью оценки SCM. Учитывая, что разработчики Ansible уделяют много усилий удобству использования системы, конкурентов в этой области у нее нет. Настройка, программирование и управление узлами обеспечивает очень простой интерфейс как для инженеров-разработчиков, так и для системных администраторов.Это не значит, что Puppet сложен в использовании, просто он ведет себя уверенно, пока вы следуете тому пути, который он предлагает для автоматизации вашей инфраструктуры.
Puppet достаточно силен в этой области, явно моделируя каждый ресурс и предоставляя пользователям модули со стандартным поведением, которые можно эффективно использовать в ваших манифестах.
С точки зрения обучения пользователей обе платформы просты в использовании, но Ansible имеет небольшое преимущество.
Декларативный стиль YAML легко реализовать, поэтому код Ansible никогда не бывает слишком сложным.
Тем временем Puppet осознал некоторые проблемы, связанные с объединением данных и кода в одних и тех же исходных файлах.
Это привело к созданию Puppet Hiera, решения для хранения данных, которое использует формат YAML для хранения пар ключ-значение данных конфигурации.
Hiera вносит большой вклад в упрощение и оптимизацию опыта Puppet DevOps. Формат YAML оказался довольно популярным для управления конфигурациями, и Salt от SaltStack также использует этот формат. Оба SCM имеют возможности проверки и тестирования вашего CM, от проверки синтаксиса до интеграции инфраструктуры как кода.
Ansible vs Puppet: затраты на лицензирование и внедрение
Будучи инструментами с открытым исходным кодом, Ansible и Puppet имеют много общего в своей политике лицензирования.
Релиз Ansible с открытым исходным кодом доступен совершенно бесплатно.
Компаниям, которым требуется больше гарантий безопасности, стабильности и надежности, рекомендуется перейти на Ansible Engine, продукт корпоративного класса, предоставляемый Red Hat Linux. Лицензия Ansible Engine обычно стоит от 47,50 до 70 долларов США в год за узел и зависит от предпочитаемой вами настройки.
Если вам нужна техническая поддержка с возможностью быстрого устранения неполадок, вам следует использовать корпоративную версию.
Крупный инструмент управления предприятием Ansible Tower доступен в виде пакета услуг и предоставляет вашей компании больше возможностей для обучения, управления и планирования заданий через панель управления с графическим пользовательским интерфейсом.
Как и Ansible, версия Puppet с открытым исходным кодом доступна бесплатно.
Для получения дополнительных корпоративных функций и технической поддержки организации могут перейти на Puppet Enterprise, стоимость которого составляет от 112 до 199 долларов США в год за узел.
Puppet Enterprise предлагает набор из нескольких инструментов, включая отчеты и мониторинг состояния инфраструктуры предприятия.
Ansible против Puppet: Сообщество
Puppet, выпущенный в 2005 году, является более старым инструментом DevOps, поэтому у него было больше времени для создания собственного сообщества и базы пользователей.Однако Ansible, запущенный в 2012 году, благодаря своему новому подходу смог привлечь еще большую аудиторию и создать очень активное сообщество энтузиастов разработчиков и пользователей.
В число пользователей Puppet входят такие компании, как Uber, Salesforce и Paypal, а в сообщество Ansible входят такие компании, как Digital Ocean, 9GAG и TypeForm. Если сравнить такой важный показатель разработки продуктов с открытым исходным кодом, как количество контрибьюторов — участников разработки на GitHub, то Ansible с более чем 4800 участниками значительно превосходит Puppet с ее 527 участниками разработки продукта.
Развитие Ansible в последние годы происходило настолько быстрыми темпами, что дало повод для создания отдельного «галактического» репозитория.
Это означает, что сообщество Ansible стремится поделиться своим кодом, тем самым способствуя дальнейшему развитию продукта.
Тем временем сообщество Puppet, развивающееся более медленно и стабильно, создало инфраструктуру, упрощающую поиск решений, отвечающих вашим потребностям в этом SCM. Puppet Forge предоставляет модули для выполнения общих задач управления конфигурацией для сообщества Puppet. Обе системы имеют первоклассные инструменты для управления жизненным циклом проекта управления конфигурацией через командную строку.
И Puppet, и Ansible хорошо интегрируются с другими широко используемыми системами DevOps, такими как Docker, Kubernetes и Jenkins, а также платформами облачных вычислений AWS и Azure.
Ansible vs Puppet: что лучше?
В этом вопросе выбор за вами.Декларативный стиль Ansible и Puppet означает, что эти инструменты имеют гораздо больше общего, чем другие системы управления конфигурацией.
Однако, чтобы сделать лучший выбор, вам необходимо обратить пристальное внимание на то, насколько потребности вашей команды соответствуют конструкции и преимуществам конкретной SCM. Ansible лучше всего подходит для тех, кто интересуется конфигурацией в стиле YAML и разделяет философию Ansible, заключающуюся в том, чтобы быть максимально простым и одновременно быстро и параллельно управлять большим пулом машин.
Кроме того, эта философия направлена на использование существующих функций SSH вместо создания пользовательских агентов.
Puppet лучше всего подходит для команд, которые предпочитают DSL, который моделирует системные ресурсы последовательным и повторяемым образом.
Это именно то, что Puppet DSL вместе с целой экосистемой инструментов делает работу больших команд предсказуемой и простой.
Если вы точно знаете, какие принципы системы управления конфигурациями лучше всего соответствуют вашим потребностям, выбор между Puppet и Ansible не станет для вас проблемой.
выводы
Чтобы облегчить вам выбор, предлагаем вам ознакомиться с основными преимуществами и недостатками обеих систем.
Немного рекламы :)
Спасибо, что остаетесь с нами.Вам нравятся наши статьи? Хотите увидеть больше интересных материалов? Поддержите нас, разместив заказ или порекомендовав друзьям, облачный VPS для разработчиков от $4,99 , уникальный аналог серверов начального уровня, который мы придумали для вас: Вся правда о VPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps от 19$ или как правильно раздать сервер? (доступны варианты с RAID1 и RAID10, до 24 ядер и до 40 ГБ DDR4).
Dell R730xd в 2 раза дешевле в дата-центре Equinix Tier IV в Амстердаме? Только здесь 2 x Intel TetraDeca-Core Xeon, 2 x E5-2697v3, 2,6 ГГц, 14C, 64 ГБ DDR4, 4 твердотельных накопителя по 960 ГБ, 1 Гбит/с, 100 ТВ от 199 долларов США в Нидерландах! Dell R420 — 2x E5-2430, 2,2 ГГц, 6C, 128 ГБ DDR3, 2 твердотельных накопителя по 960 ГБ, 1 Гбит/с, 100 ТБ — от 99 долларов США! Прочтите об этом Как построить корпоративную инфраструктуру класса, используя серверы Dell R730xd E5-2650 v4 стоимостью 9000 евро за копейки? Теги: #it-инфраструктура #ansible #puppet #Системы контроля версий
-
Seo-Плагины Написаны Шарлатанами?
19 Oct, 24 -
Мяч Отвечает На Вопросы
19 Oct, 24