Nous travaillons sur un moyen d'effectuer des mises à jour automatiques pour nos serveurs RHEL / RHEL.
Idée initiale: à l' aide de Puppet, nous désactivons les référentiels par défaut et pointons les nôtres. Ensuite, nous utilisons ensure => latest
pour les packages que nous voulons mettre à jour automatiquement.
Problème: nous constatons que certains services redémarrent après une mise à jour (duh).
Question: Quelqu'un a-t-il des conseils sur la meilleure façon d'automatiser les mises à jour Linux et les stratégies pour atténuer le redémarrage automatique des services? Nous préférerions une solution qui inclut Puppet mais, si nous devons utiliser un autre service, ce n'est pas une rupture.
Éditer
Solution possible: j'ai soumis une solution qui implémente bon nombre des suggestions de @ voretaq7 et @ewwhite. On dirait que c'est la voie que je prends pour le moment. Si vous avez d'autres suggestions, veuillez commenter ou soumettre une réponse.
la source
Y a-t-il nécessairement un problème avec le redémarrage d'un service après une mise à jour de package? Testez à petite échelle avant de déployer pour voir s'il y a des problèmes. J'ai récemment eu un vilain problème avec le package rpmforge de DenyHosts . Il a en fait changé l'emplacement de sa configuration et de ses répertoires de travail entre les révisions d'une mise à jour yum. C'est un comportement totalement indésirable. En règle générale, dans la même révision de RHEL, il n'y a pas trop de problèmes, mais vous ne pouvez jamais en être sûr sans tester et surveiller les effets de près.
Une autre option consiste à mettre à jour les services de manière sélective. Avez-vous toujours besoin des derniers packages, par exemple? Cela revient à comprendre vos raisons pour exécuter des mises à jour. Quel est le vrai but?
L'avantage de l'exécution de votre propre référentiel est que vous pouvez organiser des versions ou des déploiements et gérer le calendrier. Que se passe-t-il si vous avez un périphérique matériel ou un fournisseur de logiciels qui nécessite RHEL 5.6 et tomberait en dessous de 5.7? C'est l'un des avantages de la gestion de vos propres packages.
la source
@Beaming Mel-Bin
La simplification éliminera le besoin d'utiliser ssh pour les outils de boucle, pour démarrer / arrêter la marionnette.
Tout d'abord, vous devrez modifier vos manifestes pour inclure une variable appelée "noop" dont la valeur provient de l'ENC.
Vous auriez donc quelque chose comme ça dans une classe:
Où
noop_status
est défini dans votre ENC. Lorsque vous définissez la valeur denoop_status
surtrue
, le manifeste s'exécutera uniquement en mode noop.Si vous avez des centaines ou des milliers d'hôtes, vous pouvez utiliser une ENC comme Dashboard ou Foreman qui vous permet de modifier en masse les paramètres de nombreux hôtes, en les héritant au niveau "Hostgroup" ou "Domain". Vous pouvez ensuite définir la valeur "false" pour un petit nombre d'hôtes de test, en remplaçant la valeur du groupe d'hôtes.
Avec cela, toutes les modifications sont appliquées aux hôtes sélectionnés uniquement.
La modification d'un paramètre dans un emplacement central peut affecter n'importe quel nombre d'hôtes, sans qu'il soit nécessaire d'activer / désactiver la marionnette avec ssh pour les outils de boucle. Vous pouvez diviser vos hôtes en plusieurs groupes pour des raisons de sécurité / gestion.
Notez également qu'au lieu de coder en dur les numéros de version des packages dans les manifestes, vous pouvez les mettre dans l'ENC. Et comme ci-dessus, vous pouvez appliquer de manière sélective les modifications et gérer les déploiements.
Si vous voulez plus de granularité (et de complexité), vous pouvez même avoir des paramètres par classe, comme
noop_status_apacheClass
et ainsi de suite.Cela peut être plus difficile à gérer si vous
include
classe dans d'autres classes.la source
Solution possible basée sur la réponse de @ voretaq7:
Coder en dur les numéros de version des packages dans les
puppet
manifestes et maintenir les packages dans notre propre référentiel.Lorsque nous avons besoin d'une nouvelle version d'un package pour faire quelque chose qu'il offre (par exemple, des améliorations de sécurité, des fonctionnalités requises par nos clients, etc.), nous téléchargeons le package dans le référentiel.
Testez le package mis à jour sur un serveur de test.
Une fois la mise à jour testée, utilisez quelque chose comme
func
oupssh
pour arrêter l'puppet
agent sur les nœuds affectés.Mettez à jour les
puppet
manifestes pour vous assurer que la nouvelle version du package est installée sur les nœuds concernés.Enfin, exécutez
puppet agent --onetime && reboot
sur le serveur en utilisantfunc
oupssh
Veuillez commenter et faites-moi savoir si vous repérez des lacunes dans cette solution ou quoi que ce soit qui pourrait être simplifié.
la source