Назад | Перейти на главную страницу

Могут ли инструменты управления конфигурацией (Puppet, Chef) поддерживать установленные пакеты в актуальном состоянии?

Вероятно, это простой вопрос для тех из вас, кто уже использует инструменты управления конфигурацией. Подходят ли инструменты управления конфигурацией, такие как Puppet или Chef, для поддержания установленных пакетов в актуальном состоянии?

Предположим, у меня есть несколько серверов, в основном на основе Debian и Ubuntu. Упрощают ли инструменты управления конфигурацией обновление пакетов, установленных из репозиториев, при появлении обновлений безопасности или исправлений ошибок?

Я сейчас бегу "автоматические обновления" чтобы позволить системам автоматически устанавливать обновления безопасности, но мне все равно нужно подключиться к серверам и запустить aptitude update && aptitude safe-upgrade время от времени. Естественно, чем больше серверов, тем больше это становится скучным, утомительным и подверженным ошибкам.

Являются ли такие инструменты, как Puppet или Chef, правильным подходом к обновлению установленных пакетов? Кто-нибудь из вас использует эти инструменты, чтобы избежать ручного запуска aptitude или аналог на 15 серверах? Я совершенно уверен, что ответ на эти вопросы - «Да, конечно!»

Но где я могу найти дополнительную информацию об этом конкретном варианте использования? У меня еще не было времени на углубленное изучение Puppet или Chef, а примеры кулинарных книг или классов показывают только более или менее тривиальные примеры установки одного конкретного пакета, такого как ssh. Есть ли у вас какие-либо ресурсы, которые можно порекомендовать, кроме официальной документации (я, конечно, собираюсь изучить документацию, как только узнаю, какие инструменты подходят мне, если таковые имеются).

Вы можете сделать это с марионеткой, вы либо:

ensure => latest,

или

ensure=> "1.0.2",

указать последнюю / требуемую версию. т.е.

package { apache2: ensure => "2.0.12-2" }
package { apache2: ensure => latest }

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

Запуск автоматических обновлений меня немного пугает, особенно если они обновляют критически важные пакеты, ядра, библиотеки mysql, apache и т. Д. Особенно, если скрипт установки может захотеть перезапустить службу!

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

Я делаю это так, чтобы поддерживать выделенное репозиторий Yum (для Redhat / Fedora / CentOS; репозиторий APT для Debian / Ubuntu), который содержит пакеты, которые мне нужны для определенного сайта. Как правило, это будут зависимости самого приложения (Ruby, PHP, Apache, Nginx, библиотеки и т. Д.) И пакетов, критичных для безопасности.

После того, как вы настроили эту настройку (обычно вы можете просто отразить необходимые пакеты из исходного репозитория для начала), вы можете использовать синтаксис Puppet «sure => latest», чтобы убедиться, что все ваши машины будут обновлены с репо.

Было бы разумно использовать «промежуточное» репо, чтобы вы могли тестировать обновленные версии пакетов перед их беззаботным развертыванием в производственной среде. Это легко сделать с помощью Puppet без дублирования кода с помощью шаблонов репозитория.

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

Все эти советы в равной степени применимы к драгоценным камням Ruby, яйцам Python и другим системам пакетов, которые вы можете использовать.

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

Марионетка (я уверен, что шеф-повар тоже) связана с вашим apt-get/ням программные репозитории. Поскольку они делают тяжелую работу по выяснению того, какие пакеты доступны, это означает ensure => latest просто работает для Ubuntu / CentOS / Debian и т.п. Если вы правильно настроили соответствующие файлы (/etc/apt/sources.list, и т.д).

Это старый вопрос, но я подумал, что отвечу в актуальном виде, так как в то время существующий ответ был недоступен.

Если вы используете куклу или повар, загляните в mcollective. Это очень хороший инструмент от разработчиков puppetlabs, который позволяет отправлять команды группам серверов. http://docs.puppetlabs.com/mcollective/

В нем также есть плагин apt, который можно использовать для обновления на любом количестве серверов: http://projects.puppetlabs.com/projects/mcollective-plugins/wiki/AgentApt

Хотя Puppet / Chef являются возможными претендентами на эту функциональность, чтобы заставить их все в системе для обновления требуются либо пользовательские типы, либо перечисление каждого пакета (включая базовые системные библиотеки, такие как libc6) как ресурсы с ensure => latest. В конкретном случае автоматических обновлений пакетов вы можете изучить cron-apt пакет, который тоже делает то, что вы хотите.

Я понимаю, что это немного поздно для вашего первоначального вопроса, но здесь он в духе «лучше поздно, чем никогда».

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

Вот фрагмент обещания из моей конфигурации cfengine:

    packages:
            "apache2"
                    package_method => "apt",
                    package_policy => "update";

Надеюсь это поможет.

Я согласен с Джонатаном. Подход Cfengine 3 хорош тем, что вы можете контролировать все аспекты управления пакетами без необходимости перекодировать на низком уровне.

Мы используем puppet + apt-dater.

Вы также можете использовать инструменты управления пакетами, такие как Canonicals Landscape, который предназначен для управления и мониторинга систем Ubuntu / Debian. Он управляет несколькими системами, позволяет обновлять их одновременно и предоставляет некоторые базовые возможности мониторинга.

Обновления безопасности

Обычно я считаю, что проще всего использовать Ansible или аналогичный для настройки надежного автоматические обновления пакет для Ubuntu / Debian (или yum-cron для RHEL / CentOS). Вы можете использовать Puppet, Chef или другие инструменты, но я буду обсуждать здесь Ansible.

  • unattended-upgrades при желании можно использовать для одновременного выполнения обновлений, не связанных с безопасностью, что намного проще, чем запускать команду через Ansible каждый день.

  • unattended-upgrades заботится об автоматических обновлениях каждый день и обычно ограничивается только обновлениями безопасности (для повышения стабильности). Если серверу требуется перезагрузка после обновления, этот инструмент может автоматически перезагрузиться в определенное время.

Если ваши перезагрузки более сложные, unattended upgrades может писать вам по электронной почте, а также создает /var/run/reboot-required, чтобы Ansible (или аналогичный) мог управлять перезагрузками в подходящее время (например, скользящие перезагрузки кластера веб-серверов или серверов БД, чтобы избежать простоев, ожидая, пока каждый сервер станет доступным на определенном TCP-порту, прежде чем продолжить).

Вы можете использовать роли Ansible, такие как jnv.unattended-updates для систем Ubuntu / Debian или простой, но эффективный geerlingguy.security, который также охватывает RHEL / CentOS (и укрепляет конфигурацию SSH).

Если быстрые обновления безопасности менее важны, вы можете сначала протестировать их на менее важных серверах и запустить unattended-upgrade как только тесты показывают, что проблем нет - однако, по моему опыту, исправления безопасности, ориентированные на сервер, вызывают проблемы довольно редко.

Общие обновления

Обновления, отличные от безопасности, должны проходить обычный процесс непрерывной интеграции и тестирования, чтобы гарантировать, что что-то не сломается.

Я видел aptitude safe-upgrade вызывать серьезные проблемы на серверах в прошлом, поэтому лучше не запускать это автоматически, тогда как обновления безопасности, как правило, вполне безопасны.