Vous êtes sur la page 1sur 30

Virtualisation et cloud computing

Table des matières


CHAPITRE 1 : CONCEPTS GENERAUX SUR LA VIRTUALISATION ..................................... 4
1.1 DEFINITION ...................................................................................................................................... 5
1.2 LES DOMAINES DE LA VIRTUALISATION ........................................................................................... 5
1.2.1 La virtualisation d’applications ............................................................................................... 5
1.2.2 La virtualisation de réseaux..................................................................................................... 6
1.2.3 La virtualisation de stockage ................................................................................................... 7
1.2.4 La virtualisation de serveurs ................................................................................................... 8
1.3 AVANTAGES ET INCONVENIENTS DE LA VIRTUALISATION ................................................................ 9
1.4 LES 3 METHODES DE VIRTUALISATION ............................................................................................. 9
1.3.1 L'isolateur ................................................................................................................................ 9
1.3.2 L'émulateur ............................................................................................................................ 10
1.3.3 L'hyperviseur .......................................................................................................................... 10
1.4 LES DIFFERENTS TYPES DE VIRTUALISATION .................................................................................. 11
1.4.1 La virtualisation complète ..................................................................................................... 11
1.4.2 La paravirtualisation ............................................................................................................. 12
CHAPITRE 2 : VIRTUALISATION DES RESEAUX .................................................................... 13
CHAPITRE 3 : PROTOCOLES D’ACCES A DISTANCE ET ETUDE DE QUELQUES
CLIENTS LEGERS ............................................................................................................................. 19
3.1 SSH ............................................................................................................................................... 19
3.2 VNC ............................................................................................................................................. 20
3.3 Protocole RDP et ses variantes ................................................................................................ 20
3.4 PROTOCOLE SPICE ........................................................................................................................ 21
3.5 TRAVAUX PRATIQUES (VOIR FICHE DE TP SUR LA PLATEFORME) ................................................... 21
CHAPITRE 4 : ETUDE DE QUELQUES PLATEFORMES DE VIRTUALISATION............... 22
4.1 LES PLATEFORMES DE VIRTUALISATION......................................................................................... 22
4.1.1 QEMU-KVM .......................................................................................................................... 22
4.1.2 XEN ........................................................................................................................................ 23
4.1.3 Proxmox ................................................................................................................................. 23
4.1.4 Hyper-V .................................................................................................................................. 23
4.2 LES OUTILS DE GESTION DES PLATEFORMES DE VIRTUALISATION .................................................. 23
4.2.1 API libvirt............................................................................................................................... 23
4.2.2 Virt-manager .......................................................................................................................... 24
4.2.3 Kimchi .................................................................................................................................... 24
4.3 TRAVAUX PRATIQUES (VOIR SUR LA PLATEFORME FICHE DE TD) .................................................. 24
CHAPITRE 5 : LA CONTENEURISATION ................................................................................... 25
5.1 DEFINITION .................................................................................................................................... 25
5.2 DIFFERENCES ENTRE LA VIRTUALISATION MATERIELLE ET LA CONTENEURISATION....................... 27
5.3 LXC ET LXD ................................................................................................................................. 29

1
5.4 DOCKER ......................................................................................................................................... 29
5.5 TRAVAUX PRATIQUES (VOIR FICHE DE TD SUR LA PLATEFORME) .................................................. 29
CHAPITRE 6 : INTRODUCTION AU CLOUD (VOIR RESSOURCE COMPLEMENTAIRE 1)

6.1. Définition du « Cloud Computing » ou informatique en nuage

6.2. Etude de quelques plateformes de cloud du marché : openstack

--- --- --- ---

PLAN DE COURS

Chapitre 1 : Concepts généraux sur la virtualisation (2heures)

Chapitre 2 : virtualisation des réseaux : Ethernet et les VLAN (6 heures)

Chapitre 3 : Protocoles d’accès à distance et étude de quelques clients légers (4 heures)

Chapitre 4 : Etude de quelques plateformes de virtualisation (6 heures)

Chapitre 5 : La conteneurisation (6 heures)

Chapitre 6 : Introduction au cloud (3 heures)

Virtualisation et conteneurisation

1. Virtualisation
Hyperviseur
Virtualbox
VMWARE
Hyper-V
2. Conteneur
Partage de noyau
LXD
Docker
3. Quoi virtualiser
A-REseau (VLAN)) : modes de fonctionnement de routeurs et switches, mode connexion aux
switches
Routage intervlan
VTP

2
Administration de switches en réseaux
B- Postes de travail
Protocoles de bureau à distance :xRDP, VNC, Novnc
Environnement linux : KDE, GNOME, XFCE (masquer les noms des users, désactiver le
compte guest)
Clients légers : audio, vidéo
Remina
C- Serveurs
Protocoless de connexion à distance (ssh par clé, etc.. iptables)
4. Administration de docker
Docker est constitué de 3 éléments : client, daemon, api.
3 concepts : images, conteneur, dockerfile (créer une image)
*Activation de l’api
*Notions de base
Obtenir la liste des images, télécharger, démarrer en mode daemon, attachement à un
conteneurs et mode interactif, inspecter une image, utilisation des variables d’environnement,
comment créer une nouvelle image à partir d’une image existante, partager un dossier entre
le conteneur et la machine physique
*Gestion des réseaux avec les conteneurs
Il existe 5 types de réseaux avec les conteneurs
-bridge par défaut
- hôte : conteneur partage même adresse mac et ip que machine physique
- overlay : conteneur sur deux machines distantes mais sur même réseau
- macvlan

Mise en œuvre :

Créer son image à l’aide de dockerfile

Créer une image avec php

Créer une image avec mysql

Créer une image avec nodejs

3
Chapitre 1 : Concepts généraux sur la virtualisation

Objectifs spécifiques

• savoir définir le concept de la virtualisation ;


• prendre connaissance des domaines de la virtualisation ;
• déterminer les avantages et les inconvénients de la virtualisation ;
• connaître les différentes méthodes de virtualisation ;
• comprendre les différents types de virtualisation.

4
1.1 Définition

La virtualisation désigne un ensemble de techniques permettant de faire tourner plusieurs systèmes


d’exploitation (machines virtuelles) sur une même machine physique (hôte). Le principe de la
virtualisation est donc le partage ou la mutualisation des ressources d’un serveur (voir figure 1.1). La
virtualisation est le socle du cloud computing que nous allons étudier en détail dans le chapitre 6.

Figure 1.1 Principe de la virtualisation

1.2 Les domaines de la virtualisation

1.2.1 La virtualisation d’applications

La virtualisation d’applications est une technologie logicielle qui va permettre d’améliorer la portabilité
et la compatibilité des applications en les isolant du système d’exploitation sur lequel elles sont
exécutées. Elle consiste à encapsuler l’application et son contexte d’exécution système dans un
environnement cloisonné.

5
Figure 1.2 : virtualisation d’applications

La couche virtuelle ajoute des avantages au système virtualisé en permettant d’exécuter des applications
conçues pour d’autres systèmes. A titre d’exemple, le logiciel Wine 1 permet d'exécuter certains
programmes Windows sous Ubuntu.

La virtualisation d’applications peut aussi consister à rendre disponible une application installée sur un
serveur pour un client. Parmi les principaux acteurs de la virtualisation, on peut citer Citrix XENAPP 6,
Microsoft APP-V et VMWare ThinAPP.

1.2.2 La virtualisation de réseaux

La virtualisation de réseaux permet aux applications de s’exécuter sur un réseau virtuel comme si c’était
un réseau physique. Avec un réseau virtuel, les fonctions de commutation, le routage, le contrôle d'accès,
le pare-feu, la qualité de service (QoS) et l'équilibrage de charge sont implémentées dans le logiciel. La
virtualisation de réseau fait passer l'intelligence du matériel dédié au logiciel flexible.

1
http://www.winehq.org
6
Figure 1.3

1.2.3 La virtualisation de stockage

La virtualisation du stockage permet d’être indépendant de la localisation physique des données en créant
un espace logique de stockage. En effet, dans une machine virtuelle, les données sont stockées sur un
disque dur virtuel. Ce disque dur se présente sous forme de fichier dans le système de fichiers de l'hôte :

• VHD chez Microsoft


• VDI chez Oracle
• VMDK chez VMWare
• OVF format ouvert

Les disques virtuels peuvent être statiques ou dynamiques. Dans le cas où le disque est statique, si on
crée un disque de 50 Go, le fichier de disque virtuel fera 50 Go sur le système hôte. Avec un disque
dynamique, le fichier de disque virtuel se remplit au fur et à mesure qu'il est utilisé. Un disque de 50 Go
dans lequel il n'y a pas de données ne pèsera dans le système de fichiers hôte pas grande chose (voir
figure 1.4).

Figure 1.4 : création de disques virtuels

Grâce à la virtualisation de stockage, il est possible de réallouer dynamiquement de l’espace de stockage.


Ainsi, un serveur nécessitant un espace de stockage supplémentaire pourra rechercher des ressources
7
non allouées sur le disque logique. Inversement, un serveur nécessitant moins d’espace de stockage
pourra libérer cet espace et le rendre disponible pour d’autres serveurs.

La virtualisation de stockage permet aussi :

• d’adjoindre un périphérique de stockage supplémentaire sans interruption des services ;


• de regrouper des unités de disques durs de différentes vitesses, de différentes tailles et de
différents constructeurs.

La virtualisation du stockage touche aussi les éléments de stockage dédié, comme les NAS ou SAN.

1.2.4 La virtualisation de serveurs

La virtualisation de serveurs est un principe permettant de faire fonctionner simultanément, sur un seul
serveur physique, plusieurs serveurs virtuels. Cette technique permet aux entreprises d’utiliser des
serveurs virtuels en lieu et place de serveurs physiques. Si cette virtualisation est faite au sein de la même
entreprise, le but est de mieux utiliser la capacité de chaque serveur par une mise en commun de leur
capacité.

Figure 1.5 : virtualisation de serveurs

La virtualisation de serveurs permet de :

• regrouper plusieurs serveurs physiques sous-employés sur un seul hôte qui exécute des
systèmes virtuels ;
• réduire la surface au sol, les équipements matériels, le besoin de climatisation et le nombre
d'administrateurs ;
• réaliser des économies (locaux, consommation électrique, personnel) ;
• réduire les délais de mise à disposition de nouveaux serveurs ;
• simplifier l’administration et la gestion ;
8
• améliorer le niveau de service et la disponibilité des applications ;
• simplifier la migration des applications sur de nouveaux serveurs ;
• mettre en place un PRA (plan de reprise d’activité).
• s’inscrire dans la démarche Green IT.

1.3 Avantages et inconvénients de la virtualisation

Les avantages de la virtualisation sont nombreux. Limiter le gaspillage de ressources, réduire les coûts,
Cependant, il y a quelques limites qu’il est important de passer en revue. En effet, plusieurs
environnements virtuels s’exécutent sur une unique machine physique. Si cette machine tombe en panne,
alors les services fournis par les environnements virtuels sont interrompus.

Par ailleurs, bien que la virtualisation soit implémentée sur des machines puissantes, elle peut réduire
les performances des applications. Suivant le type de virtualisation envisagé, cette perte de
performances peut ou non être significative.

1.4 Les 3 méthodes de virtualisation

1.3.1 L'isolateur

Un isolateur est installé dans un système d’exploitation existant. Il permet de cloisonner des applications
qu’on souhaite virtualiser dans des zones d’exécution mémoire différentes. Ces zones génèrent un
contexte propre à chaque application. L’isolation n’est pas une technique de virtualisation au sens propre
du terme. L’isolation permet d’obtenir des environnements qui semblent se comporter comme des VM,
mais qui partagent un même noyau. On parle ici de conteneur. Un conteneur fait tourner une distribution
sur une distribution.

9
Figure 1.5

1.3.2 L'émulateur

Dans l’émulation, la machine physique « hôte » héberge de multiples VMs en leur donnant accès à ses
ressources matérielles de façon optimale et selon des règles de partitionnement ajustables.

Figure 1.6

Avantages :

• facilité de mise en œuvre et d'utilisation ;


• très bonne compatibilité d'OS.

Inconvénients :

• mauvaises performances, matériel émulé.

1.3.3 L'hyperviseur

10
Un hyperviseur est un système d’exploitation particulier qui va héberger lui-même un ou plusieurs
systèmes d’exploitation. L’hyperviseur alloue aux machines virtuelles des ressources matérielles. Il
existe des hyperviseurs de type 1 et de type 2.

L'hyperviseur de type 1 (natif ou bare metal)

Figure 1.7

Exemples : VMware ESXI, Hyper-V, Proxmox VE, Open-VZ, XEN, KVM.

L’hyperviseur de type 2 (ou host-based)

Figure 1.8

Exemples : virtualbox, vmware workstation, QEMU, Microsoft Virtual PC.

1.4 Les différents types de virtualisation

1.4.1 La virtualisation complète

11
La virtualisation complète (full virtualization), dénommée ainsi par opposition à la paravirtualisation
consiste à émuler l’intégralité d’une machine physique pour le système invité. Le système invité « croit
» s’exécuter sur une véritable machine physique. Le système invité, ne dialoguent jamais directement
avec le matériel réel, mais avec l’émulateur. La caractéristique principale de la virtualisation complète
est que les systèmes invités n’ont pas à être modifiés pour être utilisés dans une machine virtuelle
utilisant une technologie de virtualisation.

Exemples : VirtualBox , Microsoft VirtualPC et Microsoft VirtualServer

Figure 1.9

1.4.2 La paravirtualisation

La paravirtualisation est très proche du concept de la virtualisation complète, dans le sens où c’est
toujours un système d’exploitation complet qui s’exécute sur le matériel émulé par une machine
virtuelle. La para-virtualisation évite d'utiliser un système hôte complet pour faire la virtualisation. Les
performances sont bien meilleures en para-virtualisation qu'en virtualisation complète.

Exemple : Xen , KVM , ESX/ESXi , Hyper-V

Figure 1.10

12
Chapitre 2 : virtualisation des réseaux
Virtualisation des réseaux

OpenStack est un système d’exploitation dans le cloud qui contrôle de vastes pools de ressources de
calcul, de stockage et de réseau dans un centre de données, le tout géré via un tableau de bord
permettant aux administrateurs de contrôler les utilisateurs tout en permettant aux utilisateurs de
fournir des ressources via une interface Web.

Nous allons nous concentrer davantage sur le fonctionnement détaillé du service de réseau
d’OpenStack, appelé Neutron.

L’article vous donnera également une meilleure compréhension du travail en réseau dans les
machines virtuelles.

I- Virtualisation des équipements réseaux

Les espaces de noms Linux sont une fonctionnalité de Linux permettant d’isoler et de virtualiser les
ressources du système. Les types d’espaces de noms sont basés sur les processus, sur le réseau, sur le
montage, sur IPC, sur l’ID utilisateur et sur le groupe de contrôle.

Les interfaces Tun / tap sont une fonctionnalité proposée par Linux (et probablement par d’autres
systèmes d’exploitation similaires à UNIX) permettant de créer des réseaux en espace utilisateur,

13
c’est-à-dire de permettre aux programmes d’espace utilisateur de voir le trafic réseau brut (au niveau
Ethernet ou IP) et de faire ce qu’ils souhaitent.

Les interfaces VLAN sont des interfaces uniques basées sur leur ID de VLAN. On peut définir plusieurs
VLAN par-dessus une seule interface.

La paire de Veth est une fonctionnalité généralement utilisée pour fournir une connectivité directe
entre les espaces de noms réseau.

Le pont Linux est un périphérique virtuel de couche 2 qui ne peut à lui seul recevoir ou transmettre
quoi que ce soit, sauf si on lui lie un ou plusieurs périphériques réels.

OVS est un commutateur virtuel qui facilite la commutation via des tables de flux et contient une
base de données et un démon afin de faire correspondre les règles et de les appliquer.

II- Types de réseaux en environnement Virtuel

• Local – Un réseau local est un réseau où les instances ne peuvent communiquer avec les
instances du même nœud de calcul que si elles sont sur le même réseau.

• Flat – Un réseau plat ne comporte aucune ségrégation de réseaux basés sur des VLAN.

• VLAN – Un réseau VLAN est un réseau où les VLAN sont utilisés pour la séparation des
réseaux.

• VXLAN / GRE – VXLAN et GRE sont utilisés pour créer des réseaux superposés (réseau
construit sur le dessus d’un réseau).

OpenStack neutron a 2 principaux plugins de mise en réseau.

• Pont Linux

• OVS

Dans la version précédente d’OpenStack, un seul des plugins était utilisable par déploiement.
Cependant, dans les versions récentes, les deux versions peuvent coexister. Dans cette séquence,

14
nous allons nous concentrer principalement sur le plugin Linux Bridge et dans une autre séquence sur
l’OVS.
Nous allons maintenant discuter de la manière dont les différents types de réseaux sont implémentés
dans Neutron.

Local:

15
Dans les réseaux locaux, les instances ne communiquent pas avec le monde externe. Par conséquent,
il n’y a pas d’interface physique dans le pont et le pont ne contient que les interfaces de prise qui
permettent la communication entre les instances locales.

16
Plat:

fig.2 : plat

Dans un réseau plat, il n’y a pas de ségrégation de VLAN. Par conséquent, les interfaces tap sont
directement placées dans un pont linux avec l’interface physique, ce qui signifie qu’un seul réseau
peut exister.

17
VLAN:

fig. 3 VLAN

Dans le diagramme ci-dessus, nous avons une interface physique eth0. À l’aide de VLAN, nous
créons deux autres interfaces eth0.100 et eth0.101 sur l’interface eth0. Nous créons des interfaces
tap Tap0, Tap1 et Tap2 pour VM1, VM2 et VM3. Nous plaçons Tap0, Tap1 et eth0.100 dans le même
pont et Tap2 et eth0.101 dans un autre pont. Lorsque le trafic sort des interfaces tap pour se
connecter aux interfaces VLAN, le trafic est étiqueté avec l’ID de VLAN afin que le trafic entrant
puisse également être renvoyé à la machine virtuelle.

Le plugin OVS utilisé par Neutron est implémenté de manière différente.


OVS est un commutateur virtuel qui gère essentiellement des tableaux de flux pouvant être chaînés
à d’autres. Selon le flux (adresse IP source, adresse IP de destination, port source, port de
destination, protocole), il fait correspondre le flux à l’action appropriée, qui peut consister à
supprimer, à baliser ou à envoyer le paquet. Il utilise des paires veth, des ports de patch, des
interfaces de prise, un pont fournisseur, un pont d’intégration et des interfaces physiques pour
réaliser le type de réseau mentionné ci-dessus.

Auto évaluation
Q1 : Expliquer le principe de fonctionnement de l’espace de noms sous Linux
18
Q2 : Quelle est la différence entre les interfaces de types tap et tun ?
Q 3 : Donner un cas d’utilisation pratique de veth sous Linux
Q4 : Quel est le paquet à installer sous Linux pour pouvoir créer des interfaces Vlan
Q5 : Comment créer des interfaces Vlan sous Linux ?
Q6 : Comment créer un pont linux bridge sous Linux ?
Q7 : Donner les caractéristiques d’un flux réseaux
Q8 : Quelle est la différence entre Linux Bridge et OVS ?
Q9 : Donner des cas d’utilisation de VxLan
Q10 : Donner des cas d’utilisation de GRE
Q11 : Quelle est la différence entre VxLAN et GRE

III- Prise en main d’openvswitch (Voir fiche de TD/TP SDN)

Chapitre 3 : Protocoles d’accès à distance et étude de quelques


clients légers
3.1 SSH

19
Le protocole SSH (Secure Shell) permet la connexion à distance sécurisée d'un ordinateur à un autre. Il
couvre l’authentification, la confidentialité et l’intégrité des données. Il fonctionne en mode client-
serveur. C'est une alternative sécurisée aux protocoles de connexion non protégés (tels que telnet) et aux
méthodes de transfert de fichiers non sécurisées (telles que FTP).

Il est possible d’établir une connexion automatique vers une autre machine sans saisir de mot de passe.
Pour cela, il est nécessaire depuis le compte utilisateur du client (la machine qui va se connecter) de
générer une paire de clés, privée et publique. Aucune passphrase ne doit être saisie. On utilise SSH avec
les logiciels OpenSSH, Putty, Filezilla, etc.

3.2 VNC

VNC (Virtual Network Computing) est un protocole inventé par RealVNC qui permet la prise de
contrôle à distance sécurisée d’un appareil (serveur) par un autre (client) via un réseau local, un VPN ou
Internet. Il est basé sur l'architecture client/serveur et utilise le protocole RFB (Remote Frame-Buffer)
pour transmettre les données de pixels en temps réel. Pour fonctionner, il est nécessaire d’installer le
Serveur VNC sur la machine dont on va prendre le contrôle, et le client VNC sur la machine devant
accéder au serveur. Le serveur VNC capture tout comportement graphique en provenance de la machine
et l’envoie vers le client. Inversement, le client capture les actions de l’utilisateur sur la fenêtre affichant
l’interface et les envoie au serveur afin d’être exécutées par le système du serveur. Avec le protocole
VNC, il est donc possible de faire à distance tout ce qu’on pourrait faire devant l’ordinateur avec son
clavier et sa souris. La seule exception est qu’on ne peut pas entendre le son de l’ordinateur distant pour
l’instant.

NB : Il existe une applet Java qui permet de se connecter à un serveur VNC depuis tout navigateur
Web : noVNC. C’est donc un client VNC utilisant le HTML5 et compatible avec la plupart des
navigateurs modernes y compris sur les terminaux mobiles.

On utilise VNC avec les logiciels Vinagre, UltraVNC, TightVNC, VNC Server, VNC Viewer, noVNC,
etc.

3.3 Protocole RDP et ses variantes

Le protocole RDP (Remote Desktop Protocol est un protocole propre à Microsoft qui permet à un client
(Remote Desktop Client) de se connecter à distance sur un serveur exécutant les services Bureau à
distance (Remote Desktop Server). Contrairement au protocole VNC, le protocole RDP prend en charge

20
le son. En d’autres termes, les utilisateurs peuvent écouter sur l'ordinateur local le son produit par un
programme exécuté sur l'ordinateur distant.

Il existe des variantes de RDP développées pour d’autres plateformes, mais parfaitement compatible
avec le protocole RDP. On peut citer entre autres le VRDP de virtualbox et le XRDP pour les
environnements Linux.

3.4 Protocole SPICE

SPICE (Simple Protocol for Independent Computing Environments) est un protocole OpenSource de
communication dédié aux environnements virtuels. Spice utilise un modèle client-serveur (voir figure
3.1). Les outils de virtualisation QEMU-KVM permettent de fournir un service SPICE.

Figure 3.1 : architecture de spice

Le protocole spice est multi-plateforme (Windows, Linux) et prend en charge les flux audio, vidéo et
la gestion de tous les périphériques (clavier, souris, etc…). On utilise spice avec virt-viewer, Xspice,
spice server, etc.

Il existe un module Spice-HTML5 qui permet de se connecter à un serveur spice en utilisant un


navigateur.

3.5 Travaux Pratiques (voir fiche de TP sur la plateforme)

TP 1 : SSH

21
TP 2 : VNC

TP 3 : RDP et ses variantes

TP 4 : SPICE

TP 5 : Client léger : gestion des périphériques

Chapitre 4 : Etude de quelques plateformes de virtualisation


4.1 Les plateformes de virtualisation

4.1.1 QEMU-KVM
22
KVM (Kernel-based Virtual Machine) est une solution de virtualisation complète open source intégrée
au sein du noyau Linux depuis la version 2.6.20. KVM est un projet issu de QEMU dont il utilise une
version modifiée. Les développements sont très actifs et KVM est maintenant considéré comme un
hyperviseur. Même si on fait souvent référence à l'hyperviseur KVM, il s'agit en réalité d'une
combinaison QEMU-KVM. KVM permet de faire fonctionner de nombreux systèmes invités :

• toutes les versions de Windows à partir de Windows 2000 ;


• toutes les distributions Linux.

Pour utiliser KVM, la machine doit être pourvue d’un processeur compatible. La majorité des
processeurs Intel et AMD récents sont compatibles avec KVM.

4.1.2 XEN

Xen est un hyperviseur de machines virtuelles, développé par la communauté Open Source, permettant
de faire fonctionner plusieurs systèmes d’exploitation virtuels sur une même machine hôte. La société
XenSource qui a contribué largement à Xen, a été rachetée par Citrix en 2007. XenServer est un produit
dit de paravirtualisation

4.1.3 Proxmox

Proxmox est une puissante plate-forme de virtualisation open-source basée sur QEMU/KVM et LXC
pour les conteneurs avec une seule interface web.

4.1.4 Hyper-V

Hyper-V est la plateforme de virtualisation Microsoft qui permet de créer des infrastructures virtuelles
sous Windows ou / et Linux. Hyper-V permet de faire cohabiter de manière isolée plusieurs systèmes
d’exploitation sur une même machine physique (Hyperviseur).

Autrement dit, il permet une consolidation de serveurs afin de profiter au maximum de leurs ressources
matérielles.

4.2 Les outils de gestion des plateformes de virtualisation

4.2.1 API libvirt

Libvirt est une boîte à outils pour gérer les plateformes de virtualisation. Il propose un service (libvirtd),
un ensemble d’utilitaires comme virtmanager, virtinstall, virtviewer et surtout un shell interactif dédié à

23
la gestion des machines virtuelles : virsh. Libvirt se connecte à l’hyperviseur local et peut ainsi être
utilisée soit en local, soit à distance via SSH. L’API libvirt se place donc comme une interface entre le
ou les hyperviseurs et le matériel. Libvirt supporte entre autres KVM, QEMU, Xen, Virtuozzo, VMWare
ESX, LXC. Il est également utilisé par de nombreuses applications y compris openstack, archipell, etc.

4.2.2 Virt-manager

Écrite en langage Python, l’interface Virt-manager est un outil d’administration graphique permet
d’effectuer quasiment toute la gestion des machines virtuelles sur un poste local, mais également entre
plusieurs hyperviseurs. Virt-manager est capable de se connecter sur tout serveur faisant tourner le
service libvirtd. Il est donc possible d’utiliser cette interface sur un poste et de piloter ainsi plusieurs
hôtes de virtualisation. Cette fonctionnalité permet d’utiliser un poste client doté d’une distribution
Linux orientée bureau et de se connecter à des serveurs distants via SSH.

4.2.3 Kimchi

Kimchi est un outil léger et facile à installer offrant une interface graphique basée sur le Web pour la
gestion des machines virtuelles KVM. Kimchi gère les machines virtuelles KVM via l’API libvirt.
L'interface de gestion est accessible sur le Web à l'aide d'un navigateur qui prend en charge le HTML5.

Figure 4.1

4.3 Travaux Pratiques (voir sur la plateforme fiche de TD)

TP 1 : QUEMU-KVM

TP 2 KIMCHI

24
Chapitre 5 : La conteneurisation
5.1 Définition

25
Dans une architecture à base de conteneurs (voir figure 1.5), le contenu du conteneur, c’est-à-dire le
code et ses dépendances (jusqu’au niveau de l’OS), est de la responsabilité du développeur. Le conteneur
offre l’isolation permettant à un développeur d’embarquer l’ensemble des dépendances logicielles dont
il a besoin (y compris les dépendances de niveau OS). De plus, un conteneur s’appuie sur le noyau
(kernel) du système d’exploitation hôte. Il est donc très léger et démarre presque aussi vite que le
processus qu’il encapsule. Le nombre de conteneurs qu’un même hôte peut exécuter est donc nettement
plus élevé que son équivalent en machines virtuelles.

Figure 5.1 architecture à base de conteneurs

Les termes « cgroups » et « namespaces » font référence à des extensions du noyau Linux qui rendent
possible la réalisation de conteneurs « isolés » les uns des autres.

CGroups (pour Control Groups) permet de partitionner les ressources d’un hôte (processeur, mémoire,
accès au réseau ou à d’autres terminaux). L’objectif est de contrôler la consommation de ces ressources
par processus.

Les Namespaces sont indépendants de CGroups, mais fonctionnent de concert. Ils permettent de faire
en sorte que des processus ne voient pas les ressources utilisées par d’autres. Si CGroups gère la
distribution des ressources, Namespaces apporte l’isolation nécessaire à la création de conteneurs.

En résumé, un conteneur est tout simplement un système de fichiers sur lequel s’exécutent des processus
(de préférence un par conteneur) de manière :

- contrainte : grâce à CGroups qui spécifie les limites en termes de ressources ;

26
isolée : grâce notamment à Namespaces qui fait en sorte que les conteneurs ne se voient pas les uns les
autres.

5.2 Différences entre la virtualisation matérielle et la conteneurisation

Étudions l’empilement des couches dans le cas du déploiement de trois logiciels sur un même hôte (host)
sans machine virtuelle ou conteneur.

Figure 5.2 Installation native de trois logiciels sur un même hôte

Dans ce type d’installation, on imagine que plusieurs situations problématiques peuvent survenir :

- les différents logiciels peuvent interagir entre eux s’ils n’ont pas été conçus par le même éditeur. Ils
pourraient, par exemple, nécessiter des packages (bibliothèques, extensions) ou des versions de système
d’exploitation différentes. Ils peuvent aussi ouvrir des ports réseaux identiques, accéder aux mêmes
chemins sur le système de fichiers ou encore entrer en concurrence pour les ressources I/O ou CPU ;

- toute mise à jour de l’OS hôte va nécessairement impacter tous les logiciels qui tournent dessus
;
- chaque mise à jour d’un logiciel pourrait entraîner des impacts sur les autres.

L’expérience montre que l’exécution, sur le même système, de logiciels fournis par des éditeurs
différents qui n’auraient pas testé cette cohabitation est très souvent problématique. La virtualisation
matérielle offre une réponse appropriée à ces problèmes de cohabitation sans aucun doute. Pour mieux
comprendre les limites de celle-ci et cerner l’importance des conteneurs, étudions à présent, le
déploiement de trois machines virtuelles sur le même hôte.

27
Figure 5.3 Virtualisation matérielle : trois machines virtuelles sur le même hôte

Dans les faits, comme nous le voyons sur la figure 5.2, cette virtualisation matérielle offre un niveau
d’isolation élevé. Chaque logiciel se trouve dans son bac à sable (sandbox en anglais). Les problèmes
évoqués précédemment sont donc résolus, mais d’autres apparaissent :

- le poids d’une machine virtuelle est tout d’abord très important. Une machine virtuelle est une
machine et, même avec un système d’exploitation minimal, un système d’exploitation moderne
consommera difficilement moins de quelques Go de mémoire. La distribution de ce type de package
demandera une bande passante réseau conséquente ;

- la machine virtuelle embarque trop d’éléments. Elle ne laisse pas le choix à l’exploitant (selon la
manière dont elle aura été configurée) de choisir librement ses caractéristiques, comme le type de
stockage, le nombre de CPU utilisés, la configuration réseau. Évidemment, les solutions de gestion
d’environnements virtualisés (par exemple, vCenter de VMWare) offrent des solutions, mais celles-ci
ont presque toujours des impacts sur le logiciel. Ce dernier ne peut pas être conçu sans savoir comment
il va être exécuté.

L’architecture qui offre le bon compromis est celle à base de conteneurs.

Une architecture à base de conteneurs offre une solution de compromis. Comme cela a été dit plus haut,
le conteneur offre l’isolation permettant à un développeur d’embarquer l’ensemble des dépendances
logicielles dont il a besoin (y compris les dépendances de niveau OS). De plus, un conteneur s’appuie
sur le noyau (kernel) du système d’exploitation hôte. Il est donc très léger et démarre presque aussi vite

28
que le processus qu’il encapsule. Le nombre de conteneurs qu’un même hôte peut exécuter est donc
nettement plus élevé que son équivalent en machines virtuelles.

5.3 LXC et LXD

LXC, contraction de l’anglais Linux Containers est un système de virtualisation, utilisant l'isolation comme
méthode de cloisonnement au niveau du système d'exploitation. Il est utilisé pour faire fonctionner des
environnements Linux isolés les uns des autres dans des conteneurs partageant le même noyau et une plus
ou moins grande partie du système hôte. Le conteneur apporte une virtualisation de l'environnement
d'exécution (processeur, mémoire vive, réseau, système de fichier…) et non pas de la machine. Pour cette
raison, on parle de « conteneur » et non de « machine virtuelle ».

5.4 Docker

Docker est une solution open source de conteneurs Linux qui s’appuie elle-même sur d’autres
composants eux aussi ouverts. Ces briques de base sont en fait communes à tous les types de conteneurs
Linux. Initialement, Docker utilisait notamment LXC (Linux Containers) comme implémentation (on
parle de driver), mais a ensuite développé sa propre bibliothèque de bas niveau nommée libcontainer
pour enfin migrer vers runC, le standard de l’OCI (Open Container Initiative). Ce composant encapsule
les fonctionnalités fondamentales, proches du noyau du système d’exploitation, dont la combinaison
permet la virtualisation de niveau OS. Aujourd’hui le moteur Docker est construit au-dessus de
containerd qui lui-même intègre runC. Pas d’inquiétude néanmoins, la maîtrise de cet empilement de
projets et de composants n’est pas fondamentalement utile pour tirer parti de Docker.

5.5 Travaux Pratiques (voir fiche de TD sur la plateforme)

TP 1 : Administration de LXD

TP 2 : Administration de Docker (docker et gns3)

29

Vous aimerez peut-être aussi