Ceci est une ancienne révision du document !
Table des matières
Version : 2024.01
Dernière mise-à-jour : 2024/10/26 13:45
RH13409 - Gestion des Conteneurs avec Podman
Contenu du Cours
- RH13409 - Gestion des Conteneurs
- Contenu du Cours
- Présentation de la Virtualisation par Isolation*
- Historique
- Conteneurs vs Machines Virtuelles
- Podman
- La Commande Podman
Présentation de la Virtualisation par Isolation
Un isolateur est un logiciel qui permet d'isoler l'exécution des applications dans des containers, des contextes ou des zones d'exécution.
Historique
- 1979 - chroot - l'isolation par changement de racine,
- 2000 - BSD Jails - l'isolation en espace utilisateur,
- 2004 - Solaris Containers - l'isolation par zones,
- 2005 - OpenVZ - l'isolation par partitionnement du noyau sous Linux,
- 2008 - LXC - LinuX Containers - l'isolation en utilisant des namespaces et des CGroups avec liblxc,
- 2013 - Docker - l'isolation en utilisant des namespaces et des CGroups avec libcontainer,
- 2014 - LXD - LinuX Container Daemon - l'isolation en utilisant des namespaces et des CGroups avec liblxc,
- 2018 - Podman - l'isolation en utilisant des namespaces et des CGroups avec libpod.
Conteneurs vs Machines Virtuelles
Les conteneurs et les machines virtuelles (VM) sont des technologies de virtualisation, mais elles diffèrent dans leur fonctionnement, leur structure, et leurs cas d'utilisation.
- Architecture et Isolation
- Conteneurs - Un conteneur virtualise uniquement le système d'exploitation. Les conteneurs partagent le noyau de l'OS hôte et utilisent des namespaces et des cgroups pour l'isolation et la gestion des ressources. Ils contiennent les bibliothèques et dépendances nécessaires pour exécuter les applications, mais ne nécessitent pas un système d'exploitation complet.
- Machines Virtuelles - Une VM virtualise le matériel physique. Chaque VM exécute un système d'exploitation complet (guest OS) au-dessus d’un hyperviseur (comme VMware, KVM, ou Hyper-V) qui fonctionne sur l’OS hôte. Les VMs sont donc complètement isolées les unes des autres, car elles n’interagissent pas directement avec l’OS hôte.
- Poids et Performance
- Conteneurs - Les conteneurs sont légers et démarrent rapidement car ils n’incluent pas d’OS complet. Ils consomment moins de ressources car ils partagent le noyau de l’OS hôte, ce qui les rend plus performants pour les déploiements rapides.
- Machines Virtuelles - Les VMs sont plus lourdes et demandent plus de ressources, car chaque VM nécessite son propre OS. Elles mettent plus de temps à démarrer et consomment plus de mémoire et de CPU.
- Cas d’utilisation
- Conteneurs - Idéaux pour les microservices, les déploiements rapides et les applications nécessitant des environnements homogènes et portables. Ils permettent de standardiser les environnements de développement, test, et production.
- Machines Virtuelles - Conviennent aux applications nécessitant un niveau élevé d'isolation, aux environnements multi-OS, ou aux applications qui ont besoin de toute une pile OS. Elles sont souvent utilisées dans les environnements multi-cloud, où des applications peuvent dépendre de fonctionnalités spécifiques d'un OS particulier.
- Sécurité
- Conteneurs - Moins isolés que les VMs, car ils partagent le noyau de l'OS hôte. Bien que l'isolation soit renforcée par des namespaces et des cgroups, une compromission du noyau pourrait affecter tous les conteneurs.
- Machines Virtuelles - Offrent une meilleure isolation, chaque VM étant indépendante et exécutant son propre OS. Même si l’une est compromise, les autres VM restent protégées.
En résumé, les conteneurs sont légers, rapides et optimisés pour le déploiement d’applications isolées mais interconnectées, tandis que les machines virtuelles offrent une isolation robuste et sont adaptées aux environnements multi-OS ou pour exécuter des applications exigeant un OS complet.
Podman
Podman, créé en 2018, est un outil open-source de gestion de conteneurs développé par Red Hat. Il offre des fonctionnalités similaires à Docker mais se distingue par sa conception “daemonless”, c'est-à-dire sans besoin de daemon en arrière-plan. Cette approche améliore la sécurité et la gestion des droits : les conteneurs peuvent être exécutés en mode rootless, évitant l'exécution en tant qu'utilisateur root, ce qui limite les risques de sécurité.
Podman est basé sur OCI (Open Container Initiative) pour la compatibilité avec les formats d'images et les standards de conteneurs, et s'appuie sur runC pour l'exécution des conteneurs. Il utilise aussi des outils comme conmon (un moniteur de conteneurs léger) pour superviser les conteneurs et libpod, une bibliothèque de gestion des conteneurs permettant d'assurer l’orchestration et la gestion des conteneurs et pods. Podman supporte également la compatibilité avec les outils et API de Docker, offrant une transition plus fluide aux utilisateurs de Docker.
Podman utilise à la fois les namespaces et les cgroups, qui sont des fonctionnalités centrales du noyau Linux pour isoler et limiter les ressources des conteneurs.
- Namespaces - Les namespaces sont utilisés pour isoler différents aspects de l'environnement d'un conteneur, comme le système de fichiers, le réseau, les processus, les utilisateurs, et les identifiants IPC. Podman, en tant qu’outil de conteneurisation, utilise les namespaces pour créer un environnement isolé pour chaque conteneur, de sorte que les processus d'un conteneur ne puissent pas interférer avec ceux des autres.
- Cgroups (Control Groups) - Les cgroups sont employés pour gérer et limiter l'utilisation des ressources (CPU, mémoire, I/O, etc.) des conteneurs. Avec Podman, chaque conteneur peut être configuré pour utiliser une quantité précise de ressources système. Cela permet une meilleure allocation et empêche qu’un conteneur monopolise les ressources du système hôte.
La combinaison des namespaces et des cgroups permet à Podman de fournir une isolation forte entre les conteneurs et de contrôler la consommation des ressources, tout en restant conforme aux standards OCI pour l'exécution des conteneurs.
La Commande Podman
Podman est contenu dans le méta-paquet container-tools. Podman fournit plusieurs sous-commandes pour interagir avec les conteneurs et les images.La liste suivante présente les sous-commandes utilisées dans cette section :
Commande | Description |
---|---|
podman-build | Construire une image de conteneur avec un fichier de conteneur. |
podman-run | Exécuter une commande dans un nouveau conteneur. |
podman-images | Liste des images stockées localement. |
podman-ps | Imprimer des informations sur les conteneurs. |
podman-inspect | Affiche la configuration d'un conteneur, d'une image, d'un volume, d'un réseau ou d'un pod. |
podman-pull | Télécharger une image à partir d'un registre. |
podman-cp | Copier des fichiers ou des dossiers entre un conteneur et le système de fichiers local. |
podman-exec | Exécuter une commande dans un conteneur en cours d'exécution. |
podman-rm | Supprimer un ou plusieurs conteneurs. |
podman-rmi | Supprimer une ou plusieurs images stockées localement. |
podman-search | Recherche d'une image dans un registre. |