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
💥 Les 22 & 23 novembre : Accès 100% GRATUIT
à la Bibliothèque Numérique ENI. Je m'inscris !
  1. Livres et vidéos
  2. Linux
  3. Machines virtuelles, containers et Cloud
Extrait - Linux Préparation à la certification LPIC-1 (examens LPI 101 et LPI 102) - [7e édition]
Extraits du livre
Linux Préparation à la certification LPIC-1 (examens LPI 101 et LPI 102) - [7e édition]
1 avis
Revenir à la page d'achat du livre

Machines virtuelles, containers et Cloud

Prérequis et objectifs

1. Prérequis

Disposer d’un accès root et connaître les commandes du shell bash.

Pour les containers, installer docker.

Pour la virtualisation, disposer d’un hyperviseur (kvm, vmware, virtualbox).

Pour le Cloud, un accès internet et un compte AWS.

2. Objectifs

À la fin de ce chapitre, vous serez en mesure :

De comprendre ce que sont des hyperviseurs et des machines virtuelles.

De comprendre ce que sont les containers et leurs images, et les utiliser.

De comprendre ce qu’est le Cloud et quels sont ses avantages.

De tester AWS depuis la console web ou en ligne de commande.

De paramétrer de manière basique un système invité en fonction de l’hyperviseur.

La virtualisation

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.

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.

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.

1. 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, hébergée sur les serveurs d’un prestataire (Amazon, Google, Microsoft ou autre), et accessible soit par Internet, soit par le réseau de votre entreprise (dans le cas d’un...

Méthodes de virtualisation

1. L’isolation

L’isolation consiste à exécuter des applications dans des environnements isolés les uns 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. 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 Linux est chroot, qui permet de changer de racine.

images/11CE01V6.png

Principe des isolateurs

Le principe de chroot est simple. Un répertoire contient tous les éléments nécessaires à l’exécution d’un programme, par exemple un serveur web ou ftp : l’application et ses fichiers de configuration, mais aussi les bibliothèques et les commandes qu’elle utilise. 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...

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...

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.

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

Les namespaces, ou espaces de nommages, permettent :

  • une isolation des processus, et un processus de PID 1 comme premier processus dans son espace,

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

  • 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 non root sur l’hôte.

Les cgroups, ou groupes de contrôle, définissent 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 (ou conteneur).

2. Container et machine virtuelle

Les containers sont souvent comparés à des machines virtuelles, et bien qu’il s’agisse 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). 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, sur le même noyau. Les processus qu’ils contiennent sont des processus comme les autres, mais isolés et limités en ressources. Si un conteneur contient 10 processus, il y aura bien 10 processus en cours de fonctionnement sur l’hôte.

images/11CE10V6.png

Le container utilise le noyau de l’hôte...

Le Cloud

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 est gérée par l’organisation 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 peut 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é.

On se concentrera ici sur le Cloud Public.

1. Services Cloud

On distingue plusieurs services proposés par les opérateurs, reconnaissables au suffixe...

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. Pour Linux :

  • Qemu,

  • KVM, dérivé de qemu, mais qui, utilisant virtio et un accès au noyau, offre de meilleures performances,

  • Virtualbox, de l’éditeur Oracle, disponible également sous Windows et macOS,

  • VMWare Workstation, de VMWare, lui aussi multiplateforme,

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

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…).

images/11CE15V6.png

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

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

  • La quantité de mémoire allouée doit être celle nécessaire au système et à l’environnement graphique. Un hôte avec 16 Go de mémoire peut faire fonctionner...

Validation des acquis : questions/réponses

1. Questions

Si l’état de vos connaissances sur ce chapitre vous semble suffisant, répondez aux questions ci-après.

Virtualisation, containers et Cloud

1 Quelle est la différence entre un hyperviseur de type 1 et un hyperviseur de type 2 ?

2 Quelle est la différence entre une machine virtuelle et un container ?

3 Au sein d’un container, quel est le PID du premier processus démarré ?

  • A - 0

  • B - 1

  • C - Aléatoire en fonction du PID disponible sur l’hôte

4 Que doit contenir une image de container pour faire fonctionner une application quelconque ?

5 Que se passe-t-il si un processus au sein d’un container tente d’utiliser plus de mémoire qu’il n’en a le droit ?

  • A - Rien, le processus n’arrivera juste pas à démarrer

  • B - On ne peut pas limiter la mémoire d’un container

  • C - Linux va tuer ce processus, ce qui pourrait tuer le container

  • D - Linux va redémarrer ce processus

6 Le Cloud se trouve-t-il forcément sur Internet ?

7 Comment s’appelle le principe Cloud qui propose un accès à un service logiciel spécifique, comme par exemple une base de données ?

8 À quoi servent les "guest additions" ?

  • A - À optimiser le système invité en fonction de l’hyperviseur

  • B - Elles sont inutiles : le noyau contient déjà tout le nécessaire...

Travaux pratiques

1. Créer un container

But : créer une image Docker permettant l’exécution de code Python, puis l’instancier.

Les manipulations présentées sont effectuées sur Debian 12.

1.

Installez tout d’abord Docker et Python (si nécessaire).

2.

Créez un répertoire appelé hello où vous placerez vos différentes sources.

3.

Créez un simple script Python hello.py qui affiche "Hello World !", et testez-le localement.

4.

Rendez-vous sur le Docker Hub, https://hub.docker.com/, et cherchez "python". Le premier résultat est normalement l’image officielle. Notez son nom "python", il servira pour l’instruction FROM du fichier Dockerfile

5.

Créez un fichier Dockerfile utilisant l’image trouvée, copiez le fichier source, et lancez la commande Python associée.

6.

Créez l’image en l’appelant python-hello. Docker va télécharger l’image python depuis le Hub et exécuter les différentes étapes du Dockerfile, pour enfin générer l’image finale.

7.

La commande docker image retourne (au moins) deux images : l’image python de base, et la vôtre.

8.

Instanciez votre image.

Solutions possibles

But : créer une image Docker permettant l’exécution de code Python, puis l’instancier....