Blog ENI : Toute la veille numérique !
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
Black Friday: -25€ dès 75€ sur les livres en ligne, vidéos... avec le code BWEEK25. J'en profite !
  1. Livres et vidéos
  2. LINUX
  3. Machines virtuelles, containers et cloud
Extrait - LINUX Maîtrisez l'administration du système (6e édition)
Extraits du livre
LINUX Maîtrisez l'administration du système (6e édition)
5 avis
Revenir à la page d'achat du livre

Machines virtuelles, containers et cloud

La virtualisation

1. Définition

La virtualisation est une technique permettant de faire fonctionner simultanément, séparément et isolément plusieurs systèmes d’exploitation ou applications sur une même machine physique, chacun croyant fonctionner sur sa propre machine.

La distinction entre système d’exploitation et application est importante : la machine virtuelle n’est pas le seul mécanisme de virtualisation. Une application peut également être virtualisée à l’aide de mécanismes d’isolation.

Un serveur est rarement exploité au maximum de ses capacités, bien souvent uniquement sur de courtes périodes et pour des tâches ponctuelles. Le reste du temps sa charge est réduite le rendant disponible pour d’autres tâches sans pénaliser les applications en cours de fonctionnement.

De nombreux critères interviennent dans la décision de virtualiser ou non. Le principal reste la réalisation d’économies. Économie financière tout d’abord, puisque le coût d’acquisition sera moindre ainsi que le coût de maintenance matérielle. Économie de ressources ensuite par une bonne répartition des machines virtuelles sur les serveurs afin d’optimiser l’ensemble des performances. Économie d’administration car il est plus simple d’installer, déployer et migrer des machines virtuelles, il est notamment possible via divers outils de transformer une machine physique en machine virtuelle et vice-versa, et l’environnement matériel virtuel est généralement identique pour chaque machine virtuelle.

2. Le cloud

Le Cloud permet de louer des services d’infrastructure via Internet : serveurs virtuels, réseaux, stockages etc. sous forme d’offre IaaS (Infrastructure as a Service) par exemple. Un serveur sur le Cloud n’est en fait qu’une machine virtuelle...

Méthodes de virtualisation

1. L’isolation

L’isolation consiste à exécuter des applications dans des environnements isolés des autres, appelés contextes ou zones d’isolation. Plusieurs instances d’une même application peuvent être démarrées simultanément,  chacune dans son contexte même si elle n’a pas été conçue pour. L’application ne fonctionne pas dans une véritable machine virtuelle, mais se trouve simplement isolée des autres grâce à une fonctionnalité du système d’exploitation. L’isolateur le plus connu sur Unix est chroot, qui permet de changer de racine.

images/11CE01V6.png

Principe des isolateurs

Le principe de chroot est simple. Un répertoire Unix contient tout le nécessaire à l’exécution d’un programme, par exemple un serveur web ou ftp. Le nécessaire comprend aussi bien l’application et ses fichiers de configuration que les bibliothèques et les commandes qu’elle utilise. Une fois tout en place, la commande chroot est appliquée à ce répertoire qui devient la nouvelle racine. Les processus du serveur n’ont accès qu’aux données contenues dans cette nouvelle racine et ne peuvent en sortir. 

Le noyau Linux dispose de mécanismes d’isolation intégrés appelés les namespaces ou "espaces de nommage" qui définissent ce que les processus peuvent voir. Le principe de base est presque le même...

Paravirtualisation

1. Principe

Lorsqu’on est en présence d’un hyperviseur de type 1 ou 2, le système hôte peut proposer une interface logicielle optimisée et similaire à du matériel réel. C’est ce qu’on appelle de la paravirtualisation. L’interface logicielle API permet au système invité de la machine virtuelle un accès quasi-direct à un ou plusieurs composants matériels. 

images/11CE05V6.png

Paravirtualisation : le système accède à l’hôte via des API

Cette possibilité peut être offerte par le noyau du système hôte, par l’architecture matérielle (par exemple le microprocesseur), ou par les deux.

Dans le cas de l’accès au matériel par les systèmes invités, les pilotes qui seront installés établissent une communication directe avec l’API du système hôte.

Sous Linux les produits XEN et KVM utilisent si elles sont disponibles des techniques de paravirtualisation.

2. Virtio

Virtio, Virtual Input Output, est l’interface de programmation (API) du noyau Linux dédiée aux pilotes de périphériques des machines virtuelles (ou plutôt des systèmes invités).

Une communication de type FIFO est établie entre l’hyperviseur (le noyau du système hôte) et le noyau du système invité. Les pilotes se basent sur cette interface. 

Virtio est l’API par défaut de KVM, et Linux propose les pilotes réseau et disques associés. Des pilotes sont aussi disponibles pour Windows. VMWare et Virtualbox disposent d’un support VirtIO.

3. Assistance matérielle

a. Anneaux de protection

Afin d’améliorer les performances des hyperviseurs les fabricants de microprocesseurs ont ajouté des modes de fonctionnement et des jeux d’instructions supplémentaires. Les processeurs de type x86 disposent de niveaux d’exécution, ou anneaux de protection appelés rings. Ces anneaux définissent les privilèges d’exécution des programmes. Plus un programme est installé sur un anneau bas, plus il exerce de contrôle sur le système. 

images/11CE06V6.png

Les anneaux définissent les privilèges

Sur architecture x86 32 bits, il existe quatre rings...

Les containers

1. Principe

L’isolation d’un ou plusieurs processus est assurée par le noyau Linux à l’aide des deux mécanismes que sont les espaces de nommage et les groupes de contrôle. Les espaces de nommage sont apparus en 2002 et les groupes de contrôle en 2007. L’arrivée des espaces de noms utilisateurs dans le noyau 3.8, en février 2013, a ouvert la voie au support complet des containers.

Tout noyau Linux intègre ces fonctions par défaut :

Les namespaces, ou espaces de nommages, permettent :

  • une isolation des processus, et d’avoir un processus de PID1 comme premier processus dans son espace (PID 1 du premier processus d’un espace de nommage),

  • une isolation du réseau, avec sa propre adresse IP et ses ports qui lui sont propres,

  • une isolation des volumes de données, du stockage,

  • une isolation des droits et des utilisateurs par rapport à l’hôte : être root au sein d’un container peut ainsi correspondre à un utilisateur sans pouvoir sur l’hôte.

Les cgroups, ou groupes de contrôle, sont les ressources du système qu’un groupe de processus peut utiliser, afin de :

  • limiter les ressources mémoires ou processeur d’un groupe,

  • gérer les priorités,

  • obtenir des informations « comptables » sur ce groupe,

  • contrôler dans son ensemble (arrêter, par exemple) plusieurs processus,

  • isoler ce groupe, en l’associant à un espace de nommage,

L’association de ces deux mécanismes est la base du principe du container.

2. Container et Machine virtuelle

Les containers sont souvent comparés à des machines virtuelles, et s’il s’agit de deux types de technologies de virtualisation, le concept est différent.

Les machines virtuelles fonctionnent sur des hyperviseurs. Que le matériel utilisé soit émulé ou non, les machines virtuelles exécutent un système d’exploitation complet, avec noyau et pilotes de périphériques (même si ceux-ci utilisent de la paravirtualisation). Puis, les applications s’installent sur le système d’exploitation de la machine virtuelle. Du point de vue de l’hyperviseur, la machine virtuelle est un processus unique.

Les conteneurs fonctionnent directement sur l’hôte...

Le cloud

1. Principe

Le Cloud, ou Cloud Computing, ou informatique en nuage, c’est l’utilisation des moyens informatiques, généralement des serveurs, distants au travers d’un réseau. Dans le cadre d’un Cloud public, ce réseau est Internet. Le mot Cloud, ou nuage, indique que l’utilisateur ne sait pas, ou n’a pas besoin de connaître l’emplacement des serveurs.

Le cloud peut aussi être privé. Dans ce cas, l’infrastructure associée reste gérée par une entreprise pour son propre compte, mais propose à l’ensemble de ses services ou entités des moyens identiques à ceux d’un cloud public : serveurs, réseaux, exposition, etc.

Ce qui distingue une offre cloud d’un service classique :

  • Des ressources en libre-service : on va par exemple créer, utiliser, modifier ou supprimer simplement un serveur selon ses besoins et ses moyens, généralement de manière automatique, avec une réponse immédiate.

  • Le paiement à l’usage ou Pay-per-use : on ne paie que ce que l’on consomme. La consommation est mesurée par l’opérateur, non seulement pour adapter ses capacités (ajout de ressources physiques ou logiques), mais aussi pour facturer le client.

  • La mutualisation : les infrastructures matérielles (serveurs, baies disques, réseaux) sont communes à l’ensemble des clients et peuvent être hétérogènes. Les couches supérieures sont entièrement virtualisées : machines virtuelles, containers, réseaux, répartiteurs de charges, etc.

  • L’ouverture : que ce soit un cloud public ou privé, les services sont accessibles à l’utilisateur via des terminaux web, des API, des CLI, etc. Ceci permet un niveau avancé d’automatisation.

Un mot important est l’élasticité. On dit que le Cloud est élastique, dans le sens où il est capable de s’adapter aux besoins le plus rapidement possible en étendant ou réduisant à la demande ses services. On peut aussi parler de plasticité et de scalabilité.

Il ne faut cependant pas oublier que, derrière le cloud, il y a de vrais serveurs, dans de vrais centres de données, avec de vraies personnes pour gérer...

Systèmes invités

1. Hyperviseur et additions

Par système invité, on entend le système d’exploitation déployé sur une machine virtuelle. Selon l’OS installé sur l’hôte physique, plusieurs logiciels de virtualisation sont disponibles. Rien que sous Linux, vous trouverez :

  • Qemu, toujours présent sur le marché, mais d’une très grande lenteur,

  • KVM, qui descend de qemu, mais qui, utilisant virtio et un accès au noyau, propose des performances natives,

  • Virtualbox, de l’éditeur Oracle, qui fait de même, mais qui est disponible de manière identique sous Windows et macOS,

  • VMWare Workstation, de VMWare, qui est lui aussi multiplateforme,

  • Xen, hyperviseur de type 1, mais qui nécessite une installation particulière.

On y pense rarement, mais Qemu et KVM disposent bien entendu de commandes accessibles via le shell, mais aussi, grâce à libvirt, d’une interface graphique très performante, permettant même de gérer des machines virtuelles d’autres hyperviseurs (comme Virtualbox, Xen, VMware…).

L’auteur, par exemple, utilise de nombreuses machines virtuelles (jusqu’à huit), sous Virtualbox ou KVM, depuis macOS ou une machine virtuelle Linux. Cela mène parfois à des situations cocasses où Virtualbox fait tourner une machine virtuelle qui exploite elle-même KVM qui fait fonctionner un système invité…

images/11CE15V6.png

Le virtualiseur KVM au sein d’une Fedora dans un système Virtualbox Fedora dans un Mac OS X

Pour obtenir un fonctionnement optimal des systèmes d’exploitation invités, quelques éléments sont à prendre en compte :

  • La mémoire doit être celle nécessaire au système et à l’environnement graphique. Un hôte avec 16 Go de mémoire peut faire fonctionner des VMs de 4 Go (pour Gnome ou KDE). L’auteur a ainsi pu démarrer 6 VMs de 1 à 2 Go sans souci particulier.

  • Le nombre de processeurs devrait être inférieur ou égal au nombre de processeurs du système hôte, bien que ce dernier puisse gérer correctement les ressources.

  • Pour des VMs professionnelles, les disques devraient être provisionnés à leur création, et sur des supports...