Comment activer les mises à jour automatiques des conteneurs de Podman
Agence web » Actualités du digital » Comment activer les mises à jour automatiques des conteneurs de Podman

Comment activer les mises à jour automatiques des conteneurs de Podman

Podman est une plate-forme de conteneurisation conforme à l’OCI qui est souvent utilisée à la place de Docker. Son modèle sans démon et son ensemble de fonctionnalités étendu en font un bon candidat pour une utilisation en développement et en production.

Dans cet article, nous montrerons comment utiliser le système de mise à jour automatique de Podman pour redémarrer vos conteneurs lorsque de nouvelles images sont publiées. Podman peut être configuré pour vérifier périodiquement les mises à jour, extraire la dernière image et recréer les conteneurs concernés en utilisant leurs paramètres actuels.

Pourquoi mettre à jour automatiquement les conteneurs ?

Les conteneurs ont souvent une durée de vie courte mais ils doivent tout de même être régulièrement entretenus. Une vulnérabilité critique à l’intérieur d’une image pourrait donner aux attaquants un pied dans votre application qui est exploitée dans les heures suivant sa découverte.

Les technologies de conteneurs les plus populaires nécessitent que vous mettiez à jour manuellement vos conteneurs. Cela oblige les équipes opérationnelles à s’abonner aux annonces de publication et à créer des outils qui déploient de nouvelles modifications.

Le système de mise à jour de conteneur intégré de Podman relève ce défi et maintient les charges de travail à jour. Les conteneurs peuvent être rapidement mis à jour une fois que vous avez poussé de nouvelles versions d’image, ce qui vous assure que vos déploiements exécutent les derniers correctifs et corrections de bogues.

Activation des mises à jour automatiques

Les mises à jour automatiques sont activées pour un conteneur en définissant le paramètre io.containers.autoupdate étiquette lors de sa création.

$ podman run -d -p 8080:80 
    --name nginx-container 
    --label io.containers.autoupdate=registry 
    docker.io/library/nginx:latest

L’étiquette peut avoir deux valeurs possibles :

  • registry – Lors des vérifications de mise à jour, Podman contactera le registre d’images pour vérifier si la balise utilisée par votre conteneur a une nouvelle version disponible. L’image sera extraite et votre conteneur redémarré si tel est le cas. Les mises à jour du registre ne fonctionnent que lorsque vous utilisez un chemin de registre complet – le docker.io/library/nginx:latest référence ci-dessus est intentionnelle, car nginx:latest est trop vague.
  • local – Cette méthode de mise à jour limite Podman à la recherche d’images de conteneurs qui existent déjà sur le système de fichiers de votre hôte. Le conteneur sera redémarré si la version locale de la balise d’image diffère de la version exécutée par le conteneur. Cela peut être utile lors de la reconstruction d’images pendant le développement.

La présence de l’étiquette rend cet exemple de conteneur NGINX éligible pour les mises à jour automatiques. Cependant, des travaux supplémentaires sont nécessaires avant que les mises à jour puissent réellement être appliquées.

Création d’un service Systemd

Le mécanisme de mise à jour de Podman nécessite que vos conteneurs s’exécutent dans les services systemd. Parce que Podman est sans démon, il manque un contrôleur central qui peut démarrer et arrêter vos conteneurs. Les encapsuler dans un service systemd fournit des capacités de gestion du cycle de vie et la possibilité de redémarrages en réponse à des événements spécifiques.

La CLI de Podman inclut une commande qui crée une définition d’unité systemd à partir d’un conteneur :

$ podman generate systemd --name nginx-container > /etc/systemd/system/nginx-container.service

Les commandes ci-dessus créent un nouveau conteneur NGINX avec un service systemd au bon emplacement.

Rechargez ensuite systemd pour enregistrer la définition de service, puis activez et démarrez le service :

$ systemctl daemon-reload
$ systemctl enable nginx-container.service
$ systemctl start nginx-container.service

Votre conteneur NGINX est maintenant un service systemd qui démarrera automatiquement au démarrage de votre hôte. Vous pouvez utiliser systemctl commandes pour démarrer et arrêter le conteneur, au lieu de la CLI de Podman :

$ systemctl start nginx-container.service
$ systemctl stop nginx-container.service

Pour supprimer le conteneur à l’avenir, vous devez arrêter, désactiver et supprimer le fichier d’unité du service. Redémarrez systemd ensuite pour appliquer pleinement la modification.

$ systemctl stop nginx-container.service
$ systemctl disable nginx-container.service
$ rm /etc/systemd/system/nginx-container.service
$ systemctl daemon-reload

Effectuer une mise à jour

Maintenant, tout est configuré pour réussir la mise à jour automatique de votre conteneur NGINX. Vous pouvez exécuter une vérification de mise à jour à la demande à l’aide de Podman’s auto-update commande:

$ podman auto-update
Trying to pull docker.io/library/nginx:latest...
Getting image source signatures
...
UNIT                     CONTAINER      IMAGE                               POLICY      UPDATED
nginx-container.service  2de4ba96b09    docker.io/library/nginx:latest      registry    true

Cela met à jour les conteneurs dans les services systemd qui sont accessibles à l’utilisateur exécutant la commande. Vous avez peut-être eu besoin d’utiliser sudo suivre l’exemple ci-dessus; si c’est le cas, lancez le auto-update commande en tant que root aussi :

$ sudo podman auto-update

La registry La stratégie de mise à jour a été utilisée dans cet exemple afin que Podman se connecte au registre d’images, vérifie les modifications, puis extrait la nouvelle image, le cas échéant. La sortie de la commande indique si le conteneur de chaque service a été mis à jour.

Étant donné que les conteneurs sont gérés par systemd, Podman est capable de détecter si le nouveau conteneur a démarré avec succès. Podman reviendra automatiquement à la version précédente d’une image si un échec de mise à jour est détecté. Pour que cela fonctionne de manière fiable, l’application à l’intérieur du conteneur doit informer systemd lorsqu’elle a démarré avec succès. Il peut le faire en exécutant systemd-notify --ready.

Vérification des mises à jour

Parfois, vous devrez peut-être vérifier si votre flotte de conteneurs dispose de mises à jour disponibles sans les appliquer immédiatement. Utilisez le auto-update commande avec le --dry-run flag pour obtenir une liste des services où une image mise à jour a été publiée :

$ podman auto-update --dry-run
...
UNIT                     CONTAINER      IMAGE                               POLICY      UPDATED
nginx-container.service  2de4ba96b09    docker.io/library/nginx:latest      registry    pending

Services affichés comme pending avoir une mise à jour disponible.

Application des mises à jour selon un calendrier

Nous avons maintenant configuré avec succès les mises à jour de conteneurs à la demande. Vous n’avez pas besoin d’extraire manuellement de nouvelles images ou de redémarrer vos conteneurs. La dernière étape consiste à configurer un calendrier afin que Podman applique périodiquement les mises à jour, sans que vous exécutiez le auto-update commande.

La plupart des distributions Podman incluent une minuterie systemd à cet effet. Vous pouvez activer la minuterie en utilisant systemctl:

$ systemctl enable podman-auto-update.timer

La minuterie est configurée pour vérifier les mises à jour tous les jours. Vous pouvez personnaliser le programme en ouvrant le fichier de minuterie à l’aide de systemctl edit et modifier la valeur de OnCalendar champ:

$ systemctl edit podman-auto-update.timer

[Timer]
OnCalendar=Fri *-*-* 18:00

L’expression de temps indiquée ci-dessus exécutera la vérification de la mise à jour tous les vendredis à 18h00. La syntaxe est documentée dans le manuel de systemd.

Maintenant que le minuteur est activé, vous pouvez commencer à déployer vos conteneurs avec le io.containers.autoupdate étiquette. Ils seront mis à jour et redémarrés périodiquement, automatisant vos procédures de maintenance.

Vous n’avez pas besoin d’utiliser le minuteur systemd de Podman pour créer un calendrier de mise à jour. Tu pourrais courir podman auto-update à l’intérieur de votre outillage existant ou d’un autre planificateur de tâches tel que cron.

Sommaire

Les mises à jour automatiques de Podman vous permettent de déplacer les conteneurs vers de nouvelles versions d’image sans les redémarrer manuellement ni utiliser d’outils externes. Cela peut vous aider à maintenir votre flotte de conteneurs à mesure que les images publient des correctifs de bogues et des correctifs de sécurité.

Bien que les mises à jour automatiques soient un outil utile, elles ne doivent pas être utilisées sans considération. Autoriser les mises à jour automatiques peut introduire ses propres problèmes si une image cassée est accidentellement publiée. Les conteneurs qui redémarrent d’eux-mêmes peuvent également entraîner des temps d’arrêt ou perturber les services dépendants.

Par conséquent, vous devez évaluer l’adéquation de votre propre application avant de mettre en œuvre cette solution. Une approche intermédiaire consiste à exécuter auto-update --dry-run périodiquement et envoyer les résultats à un service de surveillance. Cela vous tient informé des mises à jour disponibles sans encourir les risques de les appliquer sans approbation.

★★★★★