Aller au contenu

tuto/aide-mémoire podman - mettre un service en production


Messages recommandés

La doc Redhat me semblant très confuse et incitant aux pires manières possible à mon avis, je nous propose ce petit topic pour m'aider ^^

Je suis sous Debian Bookworm mais il n'y a rien de spécifique à la distro, du moment que podman est installé.

Je créé mes containers de différentes manières (podman-compose pour nextcloud par exemple et directement avec cockpit pour nginx-proxy-manager)

Tout se fait à peu près comme avec docker à cette étape.
Les grandes questions viennent après : démarrage avec le système, rendre les container/pods rapidement reproductible et les mises à jour.
Et là c'est la jungle je trouve, dans la doc qui rends tout ça très compliqué je trouve alors que c'est finalement très simple.

D'abord la reproductibilité, une fois que mes bricolages fonctionnent enfin, comment je rends ça déployable facilement et rapidement ?

J'ai trouvé que la voie du kube était la plus évidente, mais la moins bien documentée.
Podman est 100% compatible OCI, donc Kubernetes, ça en fait donc une super passerelle entre docker et k8s et ça facilite grandement la tâche si jamais le besoin de changer d’échelle se fait sentir.

Bref une fois que j'ai un container ou pod fonctionnel avec les bon mappage de ports, volumes, ... de nextcloud par exemple :

podman kube generate nextcloud ~/containers/nextcloud.yml

Pour assurer la mise à jour automatique j’édite le fichier yaml généré pour ajouter dans les annotations

io.containers.autoupdate: "registry"

après je supprime le container ou le pod concerné et :

podman kube play ~/containers/nextcloud.yml

qui va recréer tout ça (si c’était un simple container il créera un pod) qui va nous permettre de passer à la suite.
l'autoupdate ajouté en annotation va permettre au service podman-auto-update de vérifier chaque nuit les nouvelles images et mettre à jour si disponible (un roll-back est possible en cas de problème mais j'ai pas encore creusé la question).

deux problèmes reglés.

Démarrage automatique avec l'hôte :
Podman ne repose pas sur un daemon central, donc les pods doivent devenir des services systemd pour être gérés par l'hôte.
D'emblée on trouve podman generate systemd ... mais ça ne marche pas correctement avec les kubes.
Au lieu de ça il y a une template systemd.
Donc pour créer notre service :

escaped=$(systemd-escape ~/containers/nextcloud.yml)
systemctl  enable podman-kube@$escaped.service
systemctl  start podman-kube@$escaped.service

Et voilà, le pod démarrera et rebootera avec l'hôte, il se gère comme n'importe quel autre service. (Le pod doit être un service systemd pour être mis à jour en automatique)
Si j'ai besoin de modifier des paramètres, je peux éditer le fichier yaml un peu comme un docker compose et puis :

podman kube down nextcloud.yml
podman kube play nextcloud.yml

On peut aussi ajouter des containers aux pods par la voie qui nous chante et repasser par la case generate.

Ce sujet n'est pas vraiment un tuto, je ne maitrise pas tout donc il est évidemment ouvert aux remarques, ajouts et questions.

  • Aime 2
Lien vers le commentaire
Partager sur d’autres sites

Comme c'est une mise à jour de podman 3 à 4, il m'a fallut installer netavark et aardvark et créer /etc/containers/containers.conf
J'ai ai profité pour ajouter l'annotation pour l'autoupdate qui sera du coup présente par défaut pour tout kube généré sur cet hôte.

[Network]
  network_backend="netavark"

[containers]
  annotations = ["io.containers.autoupdate=registry"]

 

Lien vers le commentaire
Partager sur d’autres sites

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...