Contenu

Déployer un POD sur podman

Dans le cadre de la normalisation des containers , l'initiative Open Container Initiative OCI est née

bye bye Docker 😥

Depuis plus d’une année Red Hat a décidé d’abondoner l’utilisation de Docker comme container engine

1
2
3
Red Hat did not just remove the Docker container engine from OpenShift. 
It also removed the Docker container engine, along with the docker command, from Red Hat Enterprise Linux 8 entirely. 
For RHEL 8, Docker is not included and not supported by Red Hat (although it is still available from other sources).

Nous recommandons à nos clients de migrer leur environement de développement vers podman pour un ensemble de raisons que nous avons bien détaillées dans l’article from docker to podman

découvrir les POD sur podman

le concepte de POD a été introduit par Kubernetes il s’agit d’un ensemble de container qui se partage :

  • cgroups v2 limite ce que peux utilisé les containers comme ressource
  • namespace limite ce que peux voir les containers comme ressource
    • l’ensemble des containers rootless du même POD peuvent voir la même ressource réseau (plus besoin de map de port 😉 entre container du même POD)

en d’autre terme, imaginez que vous avez besoin d’une application trois tiers (3 tiers apps) :

il est préférable de regrouper l’ensemble des containers qui constitue la même applications dans le même POD pour une meilleure gestion

Nextcloud : gouvernance et souveraineté

Prenant en example, la solution la plus déployées dans le monde Nextcloud , une solution déployer en private on-premise cloud dont les entreprises ont choisit pour :

  • partage de fichier
  • collaboration sur les fichiers en temps réel
  • accès depuis plusieurs device (ordinateur, tablette, mobile)
  • envoie/reception d’email
  • chat vidéo

Nextcloud permet aux entreprises d’avoir une meilleure gouvernance et une souveraineté total sur les fichiers les plus sensibles de l’entreprise, en évitant de passer par des applications tiers qui nécessites le passage par des serveurs externe de l’entreprises. avec Nextcloud tout les fichiers restent à l’interrieur de l’entreprise.

Revenons à notre POD, Nextcloud est un excellent exemple d’une solution 3-tiers

/images/blog/deployer-un-pod-sur-podman/container-on-pod.png
Nextcloud --> redis --> PostgreSQL dans le même POD

création d’un POD

nous allons procéder à la création d’un POD sur lequel nous allons déployer la solution Nextcloud.
on nomera ce POD cloud-formini :

1
podman pod create --name cloud-formini -p 9999:80

dans cet example, en utilisera depuis l’extérieur le port 9999 pour accèder à notre application

1
2
3
[safa@RHEL8-Formini-Podman:~]$ podman pod ls
POD ID         NAME            STATUS    CREATED      # OF CONTAINERS   INFRA ID
04904de63736   cloud-formini   Running   4 days ago   4                 ec68712310e4

afin de déployer la solution Nextcloud , il nous faut 3 containers :

création du container PostgreSQL

préparons la première couche de notre application, à savoir un SGBD open source :
j’ai nomé PostgreSQL
/images/blog/deployer-un-pod-sur-podman/POD-cloud-Formini-01-PostgreSQL.png
nous allons créer un container qui va héberger la base de donnée de la solution Nextcloud :

1
2
3
4
5
6
podman container run -d \
    --pod cloud-formini \
    --name nextcloud_db \
    -e POSTGRES_USER="nextcloud" \
    -e POSTGRES_PASSWORD="formini" \
    postgres
  • db: nextcloud_db
  • db_user: nextcloud
  • db_password: formini

création du container redis

Afin d’optimiser les performances de la solution Nextcloud , nous allons utiliser redis pour:

  • Mise en cache des objets régulièrement sollicitées , en les stockant en mémoire RAM, évitant ainsi de passer par la base de donnée de Nextcloud nextcloud_db
  • transactional file locking : pour faire simple, une couche de protection contre la corruption des fichiers

/images/blog/deployer-un-pod-sur-podman/POD-cloud-Formini-02-redis.png
nous allons créer un container redis dans notre deuxième couche de notre application :

1
2
3
4
podman container run -d \
    --pod cloud-formini \
    --name Nextcloud_redis \
    redis

création du conteiner Nextcloud

Enfin arrivé à la troisième couche de notre application Nextcloud
/images/blog/deployer-un-pod-sur-podman/POD-cloud-Formini-03-nextcloud.png
nous allons créer un container Nextcloud

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
podman container run -d \
    --pod cloud-formini \
    --name nextcloud \
    -e POSTGRES_HOST="127.0.0.1" \
    -e POSTGRES_DB="nextcloud" \
    -e POSTGRES_USER="nextcloud" \
    -e POSTGRES_PASSWORD="formini" \
    -e NEXTCLOUD_ADMIN_USER="nextcloud" \
    -e NEXTCLOUD_ADMIN_PASSWORD="formini" \
    -e NEXTCLOUD_TRUSTED_DOMAINS="192.168.42.133" \
    -e REDIS_HOST="127.0.0.1" \
    nextcloud
  • NEXTCLOUD_TRUSTED_DOMAINS représente l'adresse IP du host podman
    dans mon cas, l’adresse IP de CentOS 8 ( voir article installation de podman )
    par défaut, Nextcloud est accessible seulement depuis localhost
  • NEXTCLOUD_ADMIN_USER: nextcloud
  • NEXTCLOUD_ADMIN_PASSWORD: formini
1
2
3
4
5
[safa@RHEL8-Formini-Podman:~]$ podman container ls --pod
CONTAINER ID  IMAGE                               COMMAND               CREATED      STATUS          PORTS                 NAMES            POD
6e614d4f89c1  docker.io/library/nextcloud:latest  apache2-foregroun...  5 hours ago  Up 5 hours ago  0.0.0.0:9999->80/tcp  nextcloud        04904de63736
e411f67e69e9  docker.io/library/redis:latest      redis-server          5 hours ago  Up 5 hours ago  0.0.0.0:9999->80/tcp  nextcloud_redis  04904de63736
994ce6cb15f9  docker.io/library/postgres:latest   postgres              5 hours ago  Up 5 hours ago  0.0.0.0:9999->80/tcp  nextcloud_db     04904de63736

Bravo! votre POD Nextcloud est prêt

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
[safa@RHEL8-Formini-Podman:~]$ podman logs -f 6e614d4f89c1e
Configuring Redis as session handler
Initializing nextcloud 18.0.4.2 ...
Initializing finished
New nextcloud instance
Installing with PostgreSQL database
starting nextcloud installation
Nextcloud was successfully installed
setting trusted domains…
System config value trusted_domains => 1 set to string 192.168.42.133

ouverture du port externe

sur notre host podman, il faudra ouvrir le port 9999 du POD afin d’y acceder depuis l'exterieur

1
2
firewall-cmd --add-port=9999/tcp --permanent
firewall-cmd --reload

Désormais la solution Nextcloud est accessible depuis le réseau local de votre entreprise

/images/blog/deployer-un-pod-sur-podman/nextcloud-deployed.png
Nextcloud deployer avec succès dans votre entreprise

à votre service ❤️
Si cet article vous a plu, je vous invite à contacter notre entreprise integrateur open source pour vous aider à mettre en place cette solution et la faire évoluer selon vos besoins.

Aussi, je vous invites à vous abonner à nos réseaux sociaux:

démo en vidéo

Et voici la vidéo résumant tout ce que je viens de vous dire 😉
à venir