Jump to content

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


Recommended Posts

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
Link to comment
Share on other sites

erreur pour la fin. Si on modifie le yaml du kube déjà mis en service systemd, un simple

systemctl restart podman-kube@-root-containers-nc.yml.service

(nom du service différent selon où vous avez mis le fichier)

Link to comment
Share on other 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"]

 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...