Utilisateur:Jujij/Brouillon

Conteneurisation

modifier

La Conteneurisation, ou virtualisation au niveau du système d'exploitation fait référence à un paradigme de système d'exploitation dans lequel le noyau permet l'existence de multiples instances d'espace utilisateur isolées. De telles instances, nommées conteneurs (Solaris, Docker), Zones (Solaris), serveurs privés virtuels (OpenVZ), partitions, environnement virtuels (VEs), noyaux virtuels (DragonFly BSD) ou jails (FreeBSD jail ou chroot jail [1], peuvent ressembler à de vrais ordinateurs du point de vue des programmes tournant sur ceux-ci. Un programme informatique fonctionnant sur un système d'exploitation ordinaire peut voir toutes les ressources (périphériques connectés, fichiers et dossiers, partages de connexion, puissance CPU, capacités matérielles quantifiables) de cet ordinateur. Les programmes fonctionnant à l'intérieur d'un conteneur, eux, ne peuvent voir que le contenu de ce conteneur ainsi que les périphériques qui lui sont affectés.

Sur des systèmes d'exploitation de type Unix, cette fonctionnalité peut être vue comme une implémentation avancée du mécanisme chroot standard, qui modifie le répertoire racine apparent pour le processus en cours et ses enfants. En plus de ces mécanismes d'isolation, le noyau fournit souvent des fonctionnalités de gestion des ressources pour limiter l'impact de l'activité d'un conteneur sur les autres conteneurs.

Le terme "conteneur", bien que faisant souvent référence à la virtualisation au niveau du système d'exploitation, est parfois utilisé de manière ambiguë pour désigner des environnement de machines virtuelles plus complets fonctionnant à des degrés divers de concert avec l'OS hôte, par exemple, les "Conteneurs Hyper-V" de Microsoft.

Fonctionnement

modifier

Sur les systèmes d'exploitation ordinaires des ordinateurs personnels, un programme informatique peut voir (même dans le cas ou il n'est pas capable d'y accéder) toutes les ressources du système, c'est-à-dire :

  1. Les capacités matérielles qui peuvent être utilisées, comme le processeur ou la connexion réseau ;
  2. Les données pouvant être lues ou écrites, tels que les fichiers, dossiers et partages de connexion ;
  3. Les périphériques connectés avec lesquels il lui est possible d’interagir, tels que la webcam, l'imprimante, le scanner ou le fax.

Le système d'exploitation peut être en mesure d'autoriser ou d'interdire l'accès à ces ressources, en fonction du programme qui en fait la requête et du compte utilisateur dans le contexte duquel il fonctionne. Il peut également être en mesure de masquer ces ressources, de sorte que lorsque le programme informatique les énumère, elles n'apparaissent pas dans les résultats du recensement. Néanmoins, d'un point de vue de programmation le programme informatique a interagi avec ces ressources et l'OS a géré un acte d'interaction.

Avec la conteneurisation, il est possible d’exécuter des programmes dans des conteneurs auxquels seulement une partie de ces ressources est allouée. Un programme exécuté dans un conteneur s'attendant à voir l'ordinateur au complet ne pourra seulement voir les ressources qui lui auront été allouées et croira qu'elles sont tout ce qui est disponible. Plusieurs conteneurs peuvent être crées sur un système d'exploitation et chacun d'entre eux se verra alloué un sous-ensemble des ressources de l'ordinateur. Chaque conteneur peut contenir un nombre quelconque de programmes. Ces programmes peuvent être exécutés simultanément ou séparément et peuvent également interagir les un avec les autres.

La conteneurisation a des similitudes avec la virtualisation d'application : dans cette dernière, un seul programme informatique est placé dans un conteneur isolé et l'isolation s'applique uniquement aux systèmes de fichier.

La conteneurisation est communément utilisée dans les environnements d'hébergement virtuel, ou il est très utile pour des questions de sécurité d'allouer des ressources matérielles limitées entre un grand nombre d'utilisateurs qui ne se font pas confiance. Les administrateurs systèmes peuvent aussi en avoir l'usage pour consolider le matériel d'un serveur en déplaçant des services sur des hôtes séparés situés dans plusieurs conteneurs sur le même serveur.

D'autres scénarios typiques incluent la séparation de programmes pour séparer les conteneurs pour une sécurité améliorée, une indépendance matérielle et l'ajout de fonctionnalités de gestion des ressources. L'amélioration de la sécurité apportée par l'utilisation d'un mécanisme chroot est cependant loin d'être à toute épreuve[2]. Des implémentations de conteneurisation capable de réaliser des migrations en temps réel, ou live migration peuvent être utilisées pour l'équilibrage dynamique de la charge des conteneurs entre les nœuds d'une grappe de serveurs.

Surcoût

modifier

La conteneurisation impose habituellement moins de surcoût (en terme de ressource) que la virtualisation complète, car les programmes dans les partitions virtuelles utilisent l'interface d'appel système normale du système d'exploitation et n'ont donc pas besoin d'être soumis à une émulation ou exécutés sur une machine virtuelle intermédiaire comme c'est le cas pour la virtualisation complète ( VMware ESXI, QEMU ou Hyper-V) et pour la paravirtualisation (Xen, User Mode Linux). Cette forme de virtualisation ne nécessite pas non plus de support matériel pour une performance efficace.

Flexibilité

modifier

La conteneurisation n'est pas aussi flexible que les autres approches de virtualisation car elle ne permet pas l'hébergement d'un système d'exploitation ou noyau invités différents de ceux de l'hôte. Dans le cas de Linux, il est possible d'héberger une distribution différente de celle de l'hôte, mais pas d'autres systèmes d'exploitation tels que Windows.

Solaris surmonte partiellement cette limitation grâce à sa fonction de zones de marque, qui permet ou d’exécuter un environnement dans un conteneur qui émulerait une version plus vielle de Solaris (Solaris 8 ou 9) sur un hôte avec la version 10. Les zones de marques de Linux (appelées zones de marque "lx") sont également disponibles sur les systèmes Solaris basés sur x86, fournissant ainsi un espace utilisateur Linux ainsi qu'un support pour l'exécution d'applications Linux. En outre, Solaris fournit les utilitaires nécessaires à l'installation des distributions Linux Red Hat Entreprise Linux 3.x ou CentOs 3.x dans les zones "lx"[3][4]. Cependant, en 2010 les zones de marques Linux furent retirées de Solaris ; elles seront réintroduites en 2014 dans Illumos, la version open source de Solaris supportant les noyaux Linux 32 bits[5].

Stockage

modifier

Certaines implémentations fournissent des mécanismes de copie sur écriture, ou copy-on-write (CoW) au niveau du fichier. Le plus souvent, un système de fichier standard est partagé entre les partitions et celles qui changes les fichiers créent automatiquement leurs propres copies. Ce mécanisme rend les sauvegardes plus simples, est plus efficace en terme d'espace et plus facile à mettre en cache que les schémas de copy-on-write au niveau de blocs, communs sur les virtualisations de systèmes entiers. Toutefois, ces dernières permettent de travailler avec des systèmes de fichier non natifs et de et créer et annuler des instantanés de l'état complet du système.

Implémentations

modifier
Mécanisme Système d'exploitation Licence Disponible depuis ou entre Fonctionnalités
Isolement du système de fichier Copy-on-write Quotas de disque Limitation de débit I/O Limites mémoire Quotas de processeur Isolement du réseau Virtualisation imbriquée Checkpoint de partition et live migration Isolement du root privilège
vkernel DragonFly BSD Licence BSD 2006[6] Oui[7] Oui N/A ? Oui[8] Oui[8] Oui[9] ? ? Oui
systemd-nspawn Linux GNU LGPLv2.1+ 2010 Oui Oui Oui[10][11] Oui[10][11] Oui[10][11] Oui[10][11] Oui ? ? Oui
RKT Linux Licence Apache 2.0 2014[12] ? ? ? ? ? ? ? ? ? ?
chroot La plupart des OS de type Unix Varie selon l'OS 1982 Partiel Non Non Non Non Non Non Oui Non Non
Linux-VServer (contexte de sécurité) Linux, Windows Server 2016 GNU GPLv2 2001 Oui Oui Oui Oui Oui Oui Partiel ? Non Partiel
Imctfy Linux Licence Apache 2.0 2015 Oui Oui Oui Oui Oui Oui Partiel ? Non Partiel
Singularity Linux Licence BSD 2015[13] Oui Oui Oui Non Non Non Non Non Non Oui[14]
sysjail OpenBSD, NetBSD Licence BSD 2006-2009 Oui Non Non Non Non Non Oui Non Non ?
iCore Virtual Accounts Windows XP Freeware 2008 Oui Non Oui Non Non Non Non ? Non ?
Sandboxie Windows Trialware 2004 Oui Oui Partiel Non Non Non Non Non Oui
Turbo Windows Freemium 2012 Oui Non Non Non Non Non Non Non Oui
Docker Linux[15], FreeBSD[16], Windows x64 (Pro, Entreprise et Éducation)[17], macOs[18] Licence Apache 2.0 2013 Oui Oui Pas directement Oui (depuis la version 1.10) Oui Oui Oui Oui Seulement en mode expérimental avec CRIU[19] Oui (depuis la version 1.10)
Solaris Containers Illumos (OpenSolaris), Solaris CDDL, propriétaire 2004 Oui Oui Oui Partiel Oui Oui Oui Partiel Partiel Oui
FreeBSD jail FreeBSD, DragonFlyBSD Licence BSD 2000[20] Oui Oui Oui Oui Oui[21] Oui Oui Oui Partiel Oui
LXC Linux GNU GPLv2 2008 Oui[22] Oui Partiel Partiel Oui Oui Oui Oui Oui Oui[22]
OpenVZ Linux GNU GPLv2 2005 Oui Oui[23] Oui Oui Oui Oui Oui Partiel Oui Oui
Virtuozzo Linux, Windows Trialware 2000 Oui Oui Oui Oui Oui Oui Oui Partiel Oui Oui
WPARs AIX 2007 Oui Non Oui Oui Oui Oui Oui[24] Non Oui[25] ?

Voir aussi

modifier

Références

modifier


  1. (en) Scott Hogg, « Software Containers: Used More Frequently than Most Realize », sur Network World, (consulté le )
  2. (en) Yanek Korff, Paco Hope et Bruce Potter, Mastering FreeBSD and OpenBSD Security, "O'Reilly Media, Inc.", (ISBN 9780596006266, lire en ligne)
  3. « Chapter 16 Introduction to Solaris Zones (System Administration Guide: Oracle Solaris Containers-Resource Management and Oracle Solaris Zones) », sur docs.oracle.com (consulté le )
  4. « Chapter 31 About Branded Zones and the Linux Branded Zone (System Administration Guide: Oracle Solaris Containers-Resource Management and Oracle Solaris Zones) », sur docs.oracle.com (consulté le )
  5. bcantrill, « The dream is alive! Running Linux containers on an illumos kernel », {{Article}} : paramètre « périodique » manquant,‎ (lire en ligne, consulté le )
  6. « Super User's BSD Cross Reference: /DragonFly/sys/sys/vkernel.h », sur bxr.su (consulté le )
  7. « DragonFly On-Line Manual Pages : vkd(4) », sur www.dragonflybsd.org (consulté le )
  8. a et b « Super User's BSD Cross Reference: /DragonFly/share/man/man7/vkernel.7 », sur bxr.su (consulté le )
  9. « DragonFly On-Line Manual Pages : vke(4) », sur www.dragonflybsd.org (consulté le )
  10. a b c et d « systemd-nspawn », sur www.freedesktop.org (consulté le )
  11. a b c et d (en) « 2.3. Modifying Control Groups Red Hat Enterprise Linux 7 », sur Red Hat Customer Portal (consulté le )
  12. « CoreOS is building a container runtime, rkt | CoreOS », sur coreos.com (consulté le )
  13. « Sylabs Brings Singularity Containers into Commercial HPC | TOP500 Supercomputer Sites », sur www.top500.org (consulté le )
  14. (en) Gregory M. Kurtzer, Vanessa Sochat et Michael W. Bauer, « Singularity: Scientific containers for mobility of compute », PLOS ONE, vol. 12, no 5,‎ , e0177459 (ISSN 1932-6203, DOI 10.1371/journal.pone.0177459, lire en ligne, consulté le )
  15. « Docker drops LXC as default execution environment », sur InfoQ (consulté le )
  16. (en-US) Jesse, « Docker comes to FreeBSD », sur FreeBSDNews.com, (consulté le )
  17. (en) « Get started with Docker for Windows », sur Docker Documentation, (consulté le )
  18. (en) « Get started with Docker Desktop for Mac », sur Docker Documentation, (consulté le )
  19. « Docker - CRIU », sur criu.org (consulté le )
  20. (en-US) « Contain your enthusiasm - Part Two: Jails, Zones, OpenVZ, and LXC », sur Cybera, (consulté le )
  21. « Hierarchical_Resource_Limits - FreeBSD Wiki », sur wiki.freebsd.org (consulté le )
  22. a et b (en-US) « LXC 1.0: Security features [6/10] | Stéphane Graber's website » (consulté le )
  23. « Comparison - OpenVZ Virtuozzo Containers Wiki », sur wiki.openvz.org (consulté le )
  24. (en-US) « IBM Fix pack information for: WPAR Network Isolation », sur www.ibm.com, (consulté le )
  25. (en) « Live Application Mobility in AIX 6.1 », sur www.ibm.com, (consulté le )