Мы работаем над способом автоматического обновления наших серверов на основе RHEL / RHEL.
Начальная идея: используя Puppet, мы отключаем репозитории по умолчанию и указываем на наши собственные. Затем мы используем ensure => latest
пакеты, которые мы хотим автоматически обновлять.
Проблема: мы видим, что некоторые службы перезагружаются после обновления (не очень).
Вопрос: Есть ли у кого-нибудь совет о том, как лучше автоматизировать обновления Linux и стратегии по смягчению автоматического перезапуска служб? Мы бы предпочли решение, которое включает в себя Puppet, но, если нам нужно использовать другой сервис, это не нарушает договоренности.
редактировать
Возможное решение: я представил решение, которое реализует многие из предложенных @ voretaq7 и @ewwhite. Похоже, это маршрут, по которому я сейчас иду. Если у вас есть другие предложения, пожалуйста, прокомментируйте или отправьте ответ.
источник
Обязательно ли проблема с перезапуском службы после обновления пакета? Протестируйте в небольшом масштабе перед развертыванием, чтобы увидеть, есть ли какие-либо проблемы. У меня недавно была ужасная проблема с пакетом rpmforge из DenyHosts . Он фактически изменил расположение своей конфигурации и рабочих каталогов между ревизиями из ням-обновления. Это совершенно нежелательное поведение. Как правило, в одной и той же версии RHEL не так уж много проблем, но вы никогда не сможете быть уверенными без тщательного тестирования и наблюдения за эффектами.
Другим вариантом является выборочное обновление услуг. Например, вам всегда нужны последние пакеты? Это восходит к пониманию ваших причин запуска обновлений. Какова реальная цель?
Преимущество запуска собственного репо заключается в том, что вы можете организовывать релизы или развертывания и управлять расписанием. Что делать, если у вас есть аппаратное периферийное устройство или поставщик программного обеспечения, который требует RHEL 5.6 и сломается ниже 5.7? Это одно из преимуществ управления вашими собственными пакетами.
источник
@ Bee Mel-Bin
Упрощение избавит от необходимости использовать ssh для инструментов цикла, чтобы запустить / остановить кукольный.
Прежде всего вам нужно изменить ваши манифесты, чтобы включить переменную с именем «noop», значение которой получено из ENC.
Таким образом, у вас будет что-то вроде этого в классе:
Где
noop_status
установлено в вашем ENC. Когда вы устанавливаете значениеnoop_status
вtrue
, манифест будет работать только в режиме noop.Если у вас есть 100 или 1000 узлов, вы можете использовать ENC, такой как Dashboard или Foreman, который позволяет массово изменять параметры для многих узлов, наследуя их на уровне «Hostgroup» или «Domain». Затем вы можете установить значение «false» для небольшого числа тестовых хостов, переопределяя значение группы хостов.
При этом любые изменения применяются только к выбранным хостам.
Изменение одного параметра в центральном расположении может повлиять на любое количество хостов, без необходимости включать / выключать кукол с помощью ssh для инструментов цикла. Вы можете разделить ваши хосты на несколько групп для обеспечения безопасности / управления.
Также обратите внимание, что вместо жесткого кодирования номеров версий пакетов в манифестах, вы можете поместить их в ENC. Как и выше, вы можете выборочно применять изменения и управлять развертыванием.
Если вы хотите больше детализации (и сложности), вы можете даже иметь параметры для каждого класса, например
noop_status_apacheClass
и так далее.Это может быть сложнее, если вы
include
занимаетесь в других классах.источник
Возможное решение на основе ответа @ voretaq7:
Жесткие коды версий пакетов в
puppet
манифестах и сохраняют пакеты в нашем собственном репозитории.Когда мы требуем, чтобы новая версия пакета выполняла то, что он предлагает (например, улучшения безопасности, функции, требуемые нашими клиентами и т. Д.), Мы загружаем пакет в хранилище.
Протестируйте обновленный пакет на тестовом сервере.
После тестирования обновления используйте что-то вроде
func
или,pssh
чтобы отключитьpuppet
агент на уязвимых узлах.Обновите
puppet
манифесты, чтобы убедиться, что новая версия пакета установлена на уязвимых узлах.Наконец, запустите
puppet agent --onetime && reboot
на сервере, используяfunc
илиpssh
Пожалуйста, прокомментируйте и дайте мне знать, если вы обнаружите какие-либо недостатки в этом решении или что-нибудь, что может быть упрощено.
источник