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

Как «yum update» / «aptitude safe-upgrade» много хостов?

У меня есть две книги о Puppet, и ни в одной из них не упоминается, как нажимать yum update или aptitude safe-upgrade.

У меня сложилось впечатление, что Puppet не может, во что мне трудно поверить.

Вопрос

Как бы вы толкнули yum update или aptitude safe-upgrade на разных хостах каждый месяц?

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

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

  1. Как часто я хочу обновлять машины?
  2. Я хочу, чтобы они автоматически перезагружались при установке нового ядра, или мне просто нужно уведомление?
  3. Следует ли запускать какие-либо специальные команды во время обновлений?
  4. Достаточно ли у меня систем, чтобы обновления происходили в шахматном порядке?

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

  • Для большинства моих систем обновления происходят раз в неделю с помощью задания cron. В зависимости от цели и среды некоторые системы используются гораздо чаще.
  • Большинство систем перезагружаются автоматически, некоторые системы (в зависимости от цели) отправляют по электронной почте напоминание о перезагрузке. Это обрабатывается с помощью задания cron, которое проверяет файл vmlinuz с самым высоким номером версии в /boot против вывода uname -r
  • После того, как меня выгорело обновление glibc от RHEL 5.3-> 5.4, я обязательно обновляю yum, затем glibc, а затем все остальное.
  • Поскольку все это выполняется заданиями cron, я сплю случайным образом между каждым запуском yum. Для каждого хоста может потребоваться от 5 до 45 минут, что делает разумную работу по распределению нагрузки.

Все это содержится в двух файлах, две записи cron (обновления и проверка ядра) хранятся в /etc/cron.d и скрипт обновления. Я делаю это со все более беспорядочным сценарием оболочки, который принимает аргументы командной строки для выполнения обновления или проверки ядра и необходимости перезагрузки. Затем Puppet управляет этими двумя файлами. Поскольку вы имеете дело как с системами на основе rpm, так и dpkg, я бы, вероятно, создал либо два скрипта, либо отдельные do_update функции для двух вариантов, и каждая из них вызывается с другим переключателем командной строки. Затем вы можете выдвинуть правильный сценарий, установив флажок operatingsystem факт в объявлении файла или создайте шаблон записи cron и используйте тот же факт, чтобы решить, какой переключатель использовать.

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

Сама марионетка не подходит для этой работы. В Puppetlabs есть отдельный инструмент под названием MCollective, который похож на Capistrano, Fabric и Func.

Существует агент MCollecive, называемый Агент пакетов который может выполнять обновления yum, помимо других типов управления пакетами.

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

Если ваши хосты являются хостами RHEL, возможно, вы захотите изучить RHN Спутник. В противном случае Выход в открытый космос стоит взглянуть ** (см. примечание ниже). Они предназначены для управления локальными копиями исходных репозиториев пакетов и для облегчения управления системами, зарегистрированными на сервере RHN Satellite. Вы можете запланировать обновление пакетов в определенное время или, если вы включили OSAD, обновления могут быть запланированы в ближайшее время в веб-интерфейсе RHN Satellite / Spacewalk.

Некоторые люди разместили сообщения с помощью Puppet ниже, есть несколько блогов и веб-страниц, посвященных интеграции Puppet с RHN Satellite.

АЛЬТЕРНАТИВНО ....

Если вас больше интересует новый проект, который в конечном итоге заменит RHN Satellite, вы можете взглянуть на Кателло Проект. Katello содержит множество проектов, которые являются частью продукта Red Hat CloudForms и, как говорят, являются исходными для возможной замены RHN Satellite. Фактически Katello интегрирует Puppet с помощью Foreman. Если смотреть на Katello в долгосрочной перспективе, определенно стоит подумать о Spacewalk (но пока не о RHN Satellite из-за подписки / поддержки).

** Я назвал RHN Satellite и Spacewalk спутником RHN в своем посте, чтобы упростить задачу. Реальное различие заключается в погоде или отсутствии у вас систем RHEL, если это так, вам понадобится RHN Satellite, поскольку он может загружаться с RHN поддерживаемым способом, Spacewalk будет для пользователей, использующих Rebuild RHEL или Fedora (я понимаю, что Spacewalk может также поддерживать Debian, но лично я мало что знаю об этом.) Таким образом, при поиске информации может потребоваться поиск Spacewalk и / или RHN Satellite.

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

sudo yum install clusterssh

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

Системы Debian / Ubuntu можно обновить следующим образом:

class { 'apt': update => { frequency => 'weekly', }, }

После этого, чтобы запустить upgrade, вы можете применить тот же прием, что показан ниже.

Для систем CentOS / RedHat вы можете подписать exec на немой файл:

exec { 'yum-update': command => '/usr/bin/yum -q -y update', refreshonly => true, subscribe => File['/some/dumb/file']; }

вы обновляете /some/dumb/file на марионетке, и это вызовет обновление yum

Если вы не хотите запускать его без присмотра, вы можете использовать Salt-stack. Обратите внимание, что соль-миньон не обновляется при обновлении. ZeroMQ внезапно закроет соединение, обновление будет прервано, и вам нужно будет пересобрать базу данных пакетов (это случилось со мной на нескольких серверах Debian).