C'est probablement une question simple pour ceux d'entre vous exécutant déjà des outils de gestion de la configuration. Les outils de gestion de la configuration sont-ils tels que la marionnette ou le chef la bonne approche pour garder les paquets installés à jour?
Supposons que je gère un certain nombre de serveurs, principalement basé sur Debian et Ubuntu. Les outils de gestion de la configuration facilitent-ils la mise à jour des packages installés dans les référentiels lorsque des mises à jour de sécurité ou des correctifs de bugs viennent?
J'exécute actuellement "Mises à niveau sans assistance" Pour que les systèmes installent automatiquement les mises à jour de sécurité, mais je dois toujours vous connecter aux serveurs et exécuter aptitude update && aptitude safe-upgrade
de temps en temps. Naturellement, cela devient ennuyeux, fastidieux et prononcé par erreur, plus il y a de serveurs.
Des outils tels que la marionnette ou le chef sont-ils la bonne approche pour maintenir les colis installés à jour? Est-ce que vous utilisez ces outils pour éviter de courir manuellement aptitude
ou un équivalent sur 15 serveurs? Je suis tout à fait certain la réponse à ces questions est "oui, bien sûr!"
Mais où puis-je trouver plus d'informations sur ce cas d'utilisation particulière? Je n'ai pas encore eu le temps d'étudier la marionnette ou le chef en profondeur, ainsi que les exemples de recettes de livres ou classes montrent que des exemples plus ou moins triviaux d'installation d'un package particulier, tels que SSH. Avez-vous des ressources à recommander, autrement que la documentation officielle (je suis, bien sûr, d'étudier les documents une fois que je sais que, le cas échéant, des outils me conviennent).
Puppet (Je suis sûr que le chef fait aussi) liens avec votre apt-get/miam des référentiels logiciels. Comme ils font la forte levée de déterminer quels packages sont disponibles, cela signifie ensure => latest
fonctionne simplement pour Ubuntu/Centos/Debian the. Tant que vous configurez correctement les fichiers appropriés (/etc/apt/sources.list
, etc).
Vous pouvez le faire avec la marionnette, vous faites soit:
ensure => latest,
ou
ensure=> "1.0.2",
spécifier la dernière version requise. c'est à dire.
package { Apache2: ensure => "2.0.12-2" }
package { Apache2: ensure => latest }
Cela signifie au moins que vous pouvez spécifier la même version sur tous les systèmes, ainsi que la prévention des serveurs (potentiellement dangereusement) de se moderniser automatiquement. J'ai utilisé cette méthode en production sur un certain nombre de sites et cela fonctionne très bien.
En cours d'exécution des mises à niveau sans surveillance me fait peur, surtout s'ils mettent à niveau des packages critiques, des noyaux, des bibliothèques MySQL, Apache, etc. Surtout si le script d'installation voudra peut-être redémarrer le service!
Je pense que c'est probablement la mauvaise question. Utiliser certainement des outils de gestion de la configuration telles que la marionnette et le chef pour maintenir votre infrastructure est un énorme bond en avant d'essayer de tout faire manuellement. La question de garder vos versions de colis à jour et de synchronisation n'est pas celle que l'un de ces outils résout directement. Pour l'automatiser correctement, vous devez amener les référentiels de colis eux-mêmes sous votre contrôle.
La façon dont je fais cela est de maintenir un repo dédié Yum (pour redhat/fedora/centis; un référentiel APT pour Debian/Ubuntu) qui contient les paquets que je me soucie d'un particulier pour un placer. Celles-ci seront généralement les dépendances de l'application elle-même (Ruby, PHP, Apache, Nginx, des bibliothèques, etc.) et des packages critiques de sécurité.
Une fois que vous avez configuré (généralement, vous pouvez simplement refléter les packages requis du repo en amont pour commencer par) Vous pouvez utiliser la syntaxe "Assurez-vous => Dernière" de Puppet pour vous assurer que toutes vos machines seront à jour avec le repo.
Il serait sage d'utiliser un repo de "mise en scène" pour vous permettre de tester des versions mises à jour des colis avant de les rouler de manière flagrante à la production. Cela se fait facilement avec la marionnette sans aucune duplication du code en utilisant des modèles de référentiel.
L'automatisation de votre package Versioning vous encourage fortement à intégrer tous vos systèmes de production en synchronisation, car le maintien de plusieurs repos et de packages pour différentes distributions, versions et architectures de machines est très prudent et susceptible de conduire à toutes sortes de problèmes et d'incompatibilités obscurcissables.
Tous ces conseils s'appliquent également à Ruby gemmes, Python _ œufs et autres systèmes de paquet que vous pouvez utiliser.
J'ai écrit un petit tutoriel de marionnette qui devrait vous aider à vous lever rapidement et à courir avec la marionnette. Vous pouvez déployer une définition de repo personnalisée sur vos machines à l'aide de la marionnette comme première étape pour apporter des versions de package sous contrôle.
Tandis que la marionnette/chef sont des candidats possibles pour cette fonctionnalité, de les faire garder tout sur le système à jour nécessite des types personnalisés ou de la liste de chaque paquet (y compris des bibliothèques système sous-jacentes telles que libc6) en tant que ressources avec ensure => latest
. Pour le cas spécifique des mises à jour automatisées de packages, vous voudrez peut-être examiner le cron-apt
paquet, ce que vous voulez aussi.
Cette question est ancienne, mais je pensais que je répondais de manière à jour, car une réponse actuellement existante était indisponible à l'époque.
Si vous utilisez la marionnette ou le chef, regardez dans Mcollective. C'est un très bel outil par les gars de PuppetLabs qui vous permet d'envoyer des commandes à des groupes de serveurs. http://docs.puppetlabs.com/mcollective/
Il possède également un plugin APT, qui peut être utilisé pour effectuer une mise à jour apte sur n'importe quel nombre de serveurs: http://project.puppetlabs.com/projects/mcollective-plugins/wiki/agentipt
Je suis d'accord avec Jonathan. L'approche CFengine 3 est agréable car vous pouvez contrôler tous les aspects de la gestion des paquets sans avoir à recouvrir à un niveau bas.
Nous utilisons la marionnette + APT-Dater.
Vous pouvez également utiliser des outils de gestion de paquets tels que Canonicals Paysage conçu pour gérer et surveiller les systèmes Ubuntu/Debian. Il gère plusieurs systèmes, vous permet de les mettre à jour simultanément et fournit des capacités de surveillance de base.
Généralement, je pense que c'est la plus simple d'utiliser une manière ansible ou similaire à configurer le robust Mises à niveau sans assistance Paquet pour Ubuntu/Debian (ou yum-cron
pour rhel/centos). Vous pouvez utiliser la marionnette, le chef ou d'autres outils, mais je vais discuter de l'ansite ici.
unattended-upgrades
Peut être utilisé pour effectuer des mises à jour non-sécurité simultanément si vous préférez, ce qui est beaucoup plus facile que d'exécuter une commande via une personne chaque jour.
unattended-upgrades
prend soin des mises à jour automobiles tous les jours et est normalement contrainte aux mises à jour de sécurité uniquement (pour augmenter la stabilité). Si le serveur a besoin d'un redémarrage après la mise à jour, cet outil peut redémarrer automatiquement à un moment donné.
Si vos redémarrages sont plus complexes, unattended upgrades
peut vous envoyer un email, et cela crée également /var/run/reboot-required
, de sorte que l'ansite (ou similaire) puisse gérer les redémarrages à une heure appropriée (par exemple, des redémarrages roulants d'un groupe de serveurs Web ou de DB à éviter les temps d'arrêt, en attente de chaque serveur devenu disponible sur un certain TCP Port avant de continuer).
Vous pouvez utiliser des rôles ansibles tels que Jnv.Unattense-mises à niveau Pour les systèmes Ubuntu/Debian, ou le simple mais efficace GeerlingGuy.Security , qui couvre également Rhel/Centos (et durcit ssh config).
Si des mises à jour de sécurité rapides sont moins importantes, vous pouvez les mettre à travers un processus de test sur des serveurs moins importants et exécuter le unattended-upgrade
Commande Une fois que les tests montrent qu'il n'y a aucun problème - cependant, il est assez rare que les correctifs de sécurité axés sur le serveur puissent causer des problèmes, dans mon expérience.
Les mises à jour autres que la sécurité devraient passer par un processus d'intégration et de test continus normaux, afin de garantir que les choses ne se cassent pas.
J'ai vu aptitude safe-upgrade
causer de graves problèmes sur les serveurs dans le passé, il est donc préférable de ne pas fonctionner automatiquement, alors que les mises à jour de sécurité sont généralement assez sûres.