Virtualisation et Cloud Computing - Cours PDF
Document Details
ISIMG
Ahmed ABOUD
Tags
Summary
Ce document est un cours sur la virtualisation et le cloud computing, couvrant les principes fondamentaux et les différents aspects de ces technologies. Le document présente un plan du cours, des objectifs et un premier chapitre d'introduction à la virtualisation.
Full Transcript
# Virtualisation et Cloud Computing ## Plan du cours * **Chapitre 1: La virtualisation** * Introduction à la virtualisation * Comprendre la virtualisation * Les hyperviseurs * Les techniques de virtualisation * Les principales solutions * Les domaines de la virtualization...
# Virtualisation et Cloud Computing ## Plan du cours * **Chapitre 1: La virtualisation** * Introduction à la virtualisation * Comprendre la virtualisation * Les hyperviseurs * Les techniques de virtualisation * Les principales solutions * Les domaines de la virtualization * **Chapitre 2: Cloud Computing** * Introduction * Définition et caractéristiques * Les modèles de déploiement * Les modèles de service * Les principaux fournisseurs ## Objectifs Être capable de: * Comprendre les principes de la VIRTUALISATION. * Comprendre ce qu'est la virtualisation, ses enjeux, ses contraintes. * Comprendre le contexte du Cloud Computing (notions et concepts) * Découvrir: * Les types de cloud * Les architectures * Les types de déploiement * Les principaux fournisseurs * Répondre à la question: * Pourquoi et Comment ça marche ## Chapitre 1: La Virtualisation ### Section 1: Introduction à la virtualisation #### Introduction ##### Définition du concept de Virtualisation La virtualisation, en informatique, désigne l'action de créer une version virtuelle (plutôt que réelle) de quelque chose, y compris, mais sans s'y limiter, une plateforme matérielle, un système d'exploitation (OS), un dispositif de stockage ou des ressources de réseau informatique. ##### La virtualisation permet de: * **Simplifier l'infrastructure IT et optimiser le taux d'utilisation des ressources IT** * **Plusieurs éléments physiques apparaissent comme 1 élément logique** #### Introduction ##### Définition du concept de Virtualisation * **1 élément physique, N éléments logiques** * **N éléments physiques, 1 élément logique** ##### Historique * L'ère des Mainframes * L'informatique centralisée * Première virtualisation * Thin client * L'arrivée du PC * L'informatique décentralisée * Les choses se compliquent * La prolifération des PC * Le cloud s'installe... * L'informatique centralisée * Retour à la virtualisation et aux Thin clients * 5G et L'internet des objets * IoT et IoE * SDN * NFV ##### Les 4 Raisons de Virtualiser * Partager * Emuler * Consolider * Isoler #### Introduction ##### Intérêts La virtualisation séduit autant les professionnels IT que les enseignants pour de multiples raisons: * Développement * Tracer les programmes: faire du « débogage » * Tester la portabilité: plusieurs systèmes d'exploitation sur un ordinateur * Déploiement et migration de machines virtuelles * Possibilité de créer des points de restauration de machines virtuelles par le biais de <<Snapshots >> : image d'une machine virtuelle à un instant donnée. * Enseignement * Isoler des machines entre elles : empêcher des étudiants de communiquer entre eux lors de devoirs, ou d'endommager des machines * Sécurité par l'isolation * S'emprisonner dans un répertoire d'un système hôte, où l'accès à ce dernier est impossible vers les autres répertoires * Restreindre l'accès à une partie de la mémoire * Jail (<< prison ») : enfermement dans une machine virtuelle avec un accès restreint à la mémoire #### Introduction ##### Bénéfices de la virtualisation * **Réduction des coûts CAPEX/OPEX (Rationalisation)** * Les entreprises distinguent en principe deux types de coûts: * CAPEX (Capital Expenditures) * OPEX (Operational Expenditures) * Dans un tel contexte, la virtualisation permet aux responsables informatiques de consentir à la modernisation du système d'information de l'entreprise, tout en réduisant les coûts et en satisfaisant aux exigences mentionnées plus haut. * La virtualisation fait résolument partie des leviers permettant de réduire les coûts CAPEX/OPEX. * **Diminution du nombre de serveurs(concentration et consolidation)** * La virtualisation permet en tout premier lieu d'éviter d'avoir à acheter du matériel à chaque fois qu'un nouveau système doit être déployé. * Considérons maintenant les mêmes données mais avec une infrastructure comprenant dix serveurs: * **Comparaison de coûts de machines physiques et virtuelles** * **Diminution du matériel réseau** * La virtualisation permet également de limiter l'achat de composants réseau puisque les machines virtuelles sont capables de communiquer au sein d'un même hôte physique, elles n'ont nul besoin de dispositifs tels que routeur ou commutateur. * De plus, les machines virtuelles peuvent être configurées pour être présentes sur la même carte réseau ou regroupées au sein d'une même interface, ce qui permet là aussi de diminuer le nombre de composants réseau. * **Réduction de la consommation électrique** * **Diminution des besoins en climatisation** * **Diminution de la consommation d'espace** * **Agrégation des charges d'inactivité** * **Optimisation de la restauration** * **Optimisation de la sauvegarde** * **Amélioration de la sécurité** #### Introduction ##### Définitions et Terminologies (Virtualisation, Machine Virtuelle, Hyperviseur) * **Définition 1: Virtualisation (définition générale)** elle a pour but de donner un environnement système au programme afin de le faire croire être dans un environnement matériel. * **Définition 2: Machine virtuelle (VM - Virtual Machine)** le sens original de machine virtuelle est la création de plusieurs environnements d'exécution sur un seul ordinateur, dont chacun émule l'ordinateur hôte. Cela fournit à chaque utilisateur l'illusion de disposer d'un ordinateur complet alors que chaque machine virtuelle est isolée des autres. Le logiciel hôte qui fournit cette fonctionnalité est souvent dénommée superviseur ou hyperviseur. Ce concept va plus loin que celui des simples temps partagées où chaque utilisateur dispose seulement d'un espace de développement personnel, et non d'une machine simulée entière. * **Définition 3: Hyperviseur (ou VMM - Virtual Machine Monitor)** c'est le logiciel hôte qui fournit la fonctionnalité d'exécuter une machine virtuelle sur un système. Le système d'exploitation communique directement avec le matériel. * **Définition 4: Le système hôte (host)** est l'OS principal de l'ordinateur. * **Définition 5: Le système invité (guest)** est l'OS installé à l'intérieur d'une machine virtuelle. * **Définition 6: Un ordinateur virtuel est aussi appelé serveur privé virtuel (VPS) ou environnement virtuel (Virtual Environment ou VE)** ### Section 2 : Comprendre la virtualisation #### Compredre la virtualisation ##### Comment fonctionnent les machines virtuelles ? * **Commencez par une question plus "simple" : comment fonctionnent les machines (ordinaires)?** **Matériel physique** * Processeurs, mémoire, chipset, bus et périphériques d'E/S, etc. * Ressources physiques souvent sous-exploitées **Logiciel** * Étroitement couplé au matériel * Image active unique du système d'exploitation * Le système d'exploitation contrôle le matériel #### Compredre la virtualisation ##### Comment fonctionnent les machines virtuelles ? * **Qu'est-ce qu'un système d'exploitation ?** * **C'est juste un programme!** * vous l'écrivez dans un langage (C/C++), et le compilez en un programme * il s'exécute comme n'importe quel autre programme, mais dans un mode privilégié (superviseur) du CPU * cela lui permet d'interagir avec les périphériques matériels en utilisant des instructions "sensibles". * **En regardant vers le bas:** * un système d'exploitation émet des instructions pour contrôler les périphériques matériels * II le fait pour allouer et gérer les ressources matérielles au profit des programmes. * **Regarder vers le haut:** * Le système d'exploitation donne aux applications une interface de programmation de haut niveau (interface d'appel système). * Le système d'exploitation met en œuvre cette interface en utilisant des dispositifs matériels de bas niveau. * Ouverture/lecture/fermeture de fichier vs lecture/écriture de bloc de disque #### Compredre la virtualisation ##### Comment fonctionnent les machines virtuelles ? * **Qu'est-ce qu'une application ?** * **Un programme qui s'appuie sur l'interface d'appel système.** * Pendant son exécution, le CPU fonctionne en mode non privilégié (utilisateur) * Une instruction spéciale ("intc" sur x86) permet à un programme d'appeler le système d'exploitation. * le programme utilise les appels système pour manipuler le système de fichiers, la pile réseau, etc. * Le système d'exploitation fournit à un programme l'illusion de sa propre mémoire. * Le matériel Memory management unit(MMU) permet au système d'exploitation de définir l'espace d'adressage virtuel du programme. * **Cette approche est-elle sécurisée ?** * La plupart des instructions sont exécutées directement sur le CPU (rapide) * Mais les instructions sensibles entraînent l'envoi d'une exception au système d'exploitation par le CPU. * Les espaces d'adressage empêchent les programmes d'interférer avec la mémoire du système d'exploitation et entre eux. * C'est comme si chaque programme s'exécutait dans sa propre machine privée (le "processus"). #### Compredre la virtualisation ##### Les architectures des processeurs x86 - Types d'instructions * **Avant de comprendre comment fonctionne la virtualisation, il est nécessaire de connaître les architectures des processeurs x86.** * **L'architecture du processeur x86 offre quatre niveaux de privilèges appelés Anneaux(Rings) 0, 1, 2 et 3.** * **Ces anneaux sont utilisés pour séparer le contexte d'exécution entre les systèmes d'exploitation, les applications et les pilotes.** * **Les applications de niveau utilisateur s'exécutent généralement dans Ring 3.** * **Le système d'exploitation doit avoir un accès direct à la mémoire et au matériel et doit exécuter ses instructions privilégiées dans Ring 0.** #### Compredre la virtualisation ##### Les architectures des processeurs x86 - Types d'instructions * **Goldberg (1974): deux classes d'instructions** * **instructions privilégiées:** sont des instructions qui ne peuvent être exécutées que par le système d'exploitation ou en mode protégé (comme le mode noyau). * **instructions sensibles:** celles qui modifient la configuration matérielle ou les ressources matérielles, qui pourraient compromettre la sécurité ou l'intégrité du système si elles étaient exécutées directement par des utilisateurs non privilégiés #### Compredre la virtualisation ##### Les architectures des processeurs x86 - Types d'instructions * **Goldberg (1974): deux classes d'instructions** * **instructions privilégiées:** sont des instructions qui ne peuvent être exécutées que par le système d'exploitation ou en mode protégé (comme le mode noyau). * **instructions sensibles:** celles qui modifient la configuration matérielle ou les ressources matérielles, qui pourraient compromettre la sécurité ou l'intégrité du système si elles étaient exécutées directement par des utilisateurs non privilégiés #### Compredre la virtualisation ##### Les architectures des processeurs x86 - Types d'instructions * **Exemple: Changement de mode CPU et accès direct aux E/S** * **Instruction privilégiée : Changement de mode CPU** * **Explication:** Une instruction privilégiée est une instruction qui change le mode du processeur, passant du mode utilisateur (où s'exécutent les applications) au mode noyau (où s'exécute le système d'exploitation). Seul le système d'exploitation peut exécuter cette instruction car il a un accès direct aux ressources critiques du système. * **Exemple:** L'instruction INT dans l'architecture x86 peut déclencher une interruption logicielle, ce qui fait passer le processeur du mode utilisateur au mode noyau pour gérer un service du système d'exploitation (comme l'accès à un disque ou la gestion de la mémoire). * **Pourquoi c'est privilégié:** Si un programme en mode utilisateur pouvait changer le processeur en mode noyau, il pourrait effectuer des opérations dangereuses comme terminer d'autres processus, corrompre la mémoire ou accéder à des données sensibles. Cette instruction est restreinte pour éviter des violations de sécurité. * **Instruction sensible: Accès direct aux E/S** * **Explication:** Une instruction sensible est celle qui interagit directement avec le matériel, comme la lecture ou l'écriture sur un périphérique d'entrée/sortie (par ex., un disque ou une carte réseau). Ces instructions sont sensibles car elles pourraient manipuler des périphériques matériels de manière à perturber le bon fonctionnement du système sans déclencher une interruption logicielle. * **Exemple:** Les instructions OUT et IN dans l'architecture x86 permettent aux programmes d'écrire des données vers et de lire des données depuis des ports d'E/S (comme le contrôle direct d'une imprimante ou l'accès au matériel de disque). * **Pourquoi c'est sensible:** Si des programmes non privilégiés pouvaient contrôler directement les périphériques matériels, ils pourraient contourner les mesures de sécurité, endommager les appareils ou causer des conflits entre différents processus. Pour éviter cela, l'accès direct aux E/S est souvent contrôlé par le système d'exploitation via des instructions privilégiées. #### Compredre la virtualisation ##### L'idée : Et si on exécute le noyau du système d'exploitation comme un programme en mode utilisateur ? ### Section 3: Hyperviseurs/Superviseur/VMM #### Les hyperviseurs ##### Qu'est ce qu'un hyperviseur * **Définition** * Un hyperviseur, également connu sous le nom de moniteur de machine virtuelle ou VMM, est un logiciel qui crée et exécute des machines virtuelles (VM). Un hyperviseur permet à un ordinateur hôte de prendre en charge plusieurs machines virtuelles invitées en partageant virtuellement ses ressources, telles que la mémoire et le processeur. #### Les hyperviseurs ##### Les propriétés * Selon Popek et Goldberg, un hyperviseur doit présenter trois propriétés pour satisfaire correctement leur définition : * **Fidélité (La transparence)**: L'environnement créé pour la machine virtuelle est essentiellement identique à la machine physique d'origine (matérielle). * **Isolation ou sécurité(Le cloisonnement)**: Le VMM doit avoir le contrôle complet des ressources du système. * **Performances**: II devrait y avoir peu ou pas de différence de performances entre la VM et son équivalent physique.sources virtuelles propres à chaque VM * **Remarque** * Comme la plupart des VMM ont les deux premières propriétés, les VMM qui répondent également au critère final sont considérés comme des VMM efficaces. #### Les hyperviseurs ##### Les types * **L'hyperviseur a 2 rôles majeurs :** * Créer des ressources virtuelles propres à chaque VM * Répartir ses propres ressources * **Il existe 2 types d'hyperviseurs différents les hyperviseurs de type 1 et de type 2.** #### Les hyperviseurs ##### Hyperviseur de type-1 * Un hyperviseur de type 1, également appelé hyperviseur natif ou bare metal, s'exécute directement sur le matériel de l'hôte pour gérer les systèmes d'exploitation invités. * Ce type d'hyperviseur est le plus utilisé dans les centres de données ou dans d'autres environnements basés sur des serveurs. * KVM, Microsoft Hyper-V, proxmox, et VMware vSphere sont des exemples d'hyperviseurs de type 1. * KVM a été intégré au noyau Linux en 2007, donc si vous utilisez une version moderne de Linux, vous avez déjà accès à KVM. #### Les hyperviseurs ##### Hyperviseur de type-2 * Un hyperviseur de type 2 est également connu sous le nom d'hyperviseur hébergé, et est exécuté sur un système d'exploitation conventionnel en tant que couche logicielle ou application. * Il fonctionne en abstrayant les systèmes d'exploitation invités du système d'exploitation hôte. * Il permet, une fois installé, de créer des VMs indépendantes de I'SE hôte * Un hyperviseur de type 2 est plus adapté aux utilisateurs individuels qui souhaitent exécuter plusieurs systèmes d'exploitation sur un ordinateur personnel. * VMware Workstation et Oracle VirtualBox sont des exemples d'hyperviseurs de type-2. #### Les hyperviseurs ##### En résumé * **L'hyperviseur de type 2: ○○○** * Tester un OS * Créer un environnement de test * Profil: développeur, administrateur réseau * Développer une application et la tester sur différents systèmes * **L'hyperviseur de type 1: ○○○** * Créer des serveurs * Remplacer des machines physiques par des VM (réduction des coûts) * Profil:administrateur réseau/cloud * Tests en environnement de pré-production #### L'idée fonctionne presque, mais... * Que se passe-t-il lorsque le SE invité émet une instruction sensible? * Quels périphériques matériels (virtuels) I'SE doit-il voir ? * Comment empêcher les applications exécutées sur Windows de nuire à Windows? * ou les applications de perturber la VMM... * ou Windows de détruire Linux... ou le VMM... #### La réponse: Trap&emulate, et Goldberg * Le CPU capte les instructions sensibles et les transmet au VMM. * Le VMM émule l'effet d'une instruction sensible sur le matériel virtuel qu'il fournit à ses SE invités au lieu que le système d'exploitation fournisse des abstractions de haut niveau au processus via des appels système(hypercalls) * La VMM fournit une interface HW/SW virtuelle aux SE invités en capturant et émulant les instructions sensibles #### La réponse: Trap&emulate, et Goldberg * Le CPU capte les instructions sensibles et les transmet au VMM. * Le VMM émule l'effet d'une instruction sensible sur le matériel virtuel qu'il fournit à ses SE invités au lieu que le système d'exploitation fournisse des abstractions de haut niveau au processus via des appels système(hypercalls) * La VMM fournit une interface HW/SW virtuelle aux SE invités en capturant et émulant les instructions sensibles * Un VMM peut être construit de manière efficace et sûre si l'ensemble des instructions sensibles est un sous-ensemble des instructions privilégiées. #### Implications en termes de performance de Trap&emulate * Les instructions non-sensibles n'entraînent pratiquement aucune surcharge. * elles s'exécutent directement sur le CPU et ne provoquent pas de traps. * Le code lié au CPU (par exemple, certains programmes scientifiques) s'exécutent à la même vitesse sur une VM que sur une machine physique * Les instructions critiques ont un impact potentiel important sur les performances * elles déclenchent un trap et doivent être dirigées et émulées par la VMM * Les applications à forte intensité d'E/S ou d'appels système sont durement touchées. #### Un problème difficile... * Jusqu' 2005, l'architecture Intel ne répondait pas à l'exigence de Goldberg * 17 instructions n'étaient pas virtualisables * Elles ne trappent pas, et elles se comportent différemment en mode superviseur et en mode utilisateur * Certaines se comportent différemment (par exemple, CALL ou JMP en mode protégé). #### Un problème difficile... * Comment rendre les processeurs x86 virtualisables ? #### Un problème difficile... * Comment rendre les processeurs x86 virtualisables ? * **Vous avez quatre choix** * **Emuler:** ne pas exécuter les instructions directement, mais interpréter chaque instruction. très lent (Rosetta sur le Mac avec les M1 chips) * **Paravirtualiser:** modifier le système d'exploitation invité pour éviter les instructions non virtualisables. * très rapide et sûr, mais pas rétrocompatible nécessite la modification des noyaux * **Utiliser la traduction binaire au lieu de la méthode "trap-and-emulate".** (c'est ce que fait VMware.) (voir annexe A1) * **Corriger les processeurs.** * En 2005/2006, Intel a introduit "VT", et AMD a introduit "Pacifica". * Réimplémentation des idées du support de virtualisation * Ajout d'un nouveau mode de CPU pour distinguer la VMM de la guest/app. * maintenant, construire un VMM est facile ! ### Section 3: Techniques de Virtualisation #### Les techniques de Virtualisation * **Modifiés** * **Paravirtualisation** * **Non modifiés** * **Virtualisation Totale** * **Virtualisation assistée par le matérielle** * **Processus** * **Virtualisation au niveau du SE** #### Les techniques de Virtualisation ##### Para-virtualisation * Dans cette technique, les appels système sont effectués par le noyau du système d'exploitation invité via des appels d' API, et ces appels sont directement traités par l'hyperviseur qui, à son tour, accomplit toutes les tâches. * Les appels entre l'hyperviseur et le noyau du système d'exploitation invité sont appelés hypercalls. * **Nécessitent la modification des noyaux des SES** #### Les techniques de Virtualisation ##### Para-virtualisation #### Les techniques de Virtualisation ##### Virtualisation complète (Full Virtualization using binary translation) * Développée par VMware en 1988, la technique de translation binaire permet de placer les VMM dans le RING 0 et de déplacer les SE hébergés dans le RING 1 ce qui garantit un niveau de privilège supérieur à celui des processus s'exécutant dans le RING 3 * Le SE invité n'ont pas conscience qu'il s'exécute sur une VM. * Les appels sont généralement contrôlés et surveillés par l'hyperviseur qui fournit une émulation de CPU pour gérer et modifier les privilèges. * Les instructions critiques sont capturées et traduite à l'aide de la << binary translation >>. * Mais ce scénario n'est pas très efficace et entraîne une dégradation des performances du système par rapport à la paravirtualisation. #### Les techniques de Virtualisation ##### Virtualisation complète (Full Virtualization using binary translation) #### Les techniques de Virtualisation ##### Virtualisation assistée par le matériel (Hardware assisted virtualization) * Avec l'arrivée des derniers processeurs sur le marché, INTEL (VT-x) et AMD (AMD-V) ont conçu de nouveaux processeurs qui permettent de fournir une couche supplémentaire au-dessus de RING 0 qui aide l'hyperviseur à fonctionner et à prendre le contrôle du système d'exploitation invité. * le système d'exploitation invité a un accès direct aux ressources * Cela élimine la surcharge de l'émulation des instructions de CPU. #### Les techniques de Virtualisation ##### Virtualisation au niveau du SE ou Isolateur / cloisonnement * Isole l'exécution des applications dans des contextes d'exécution. * Chaque instance d'espace utilisateur représente un environnement d'exécution virtuel autonome appelé container, partition, ou jail, selon la technologie utilisée (Docker, openVZ, LXC ...). * Les environnements utilisateurs sont entièrement cloisonnés * Exploite les namespaces et les cgroups du système linux * séparer le contexte d'exécution de chaque application. * Solution très performante mais isolation partielle * Exemple: chroot, OpenVZ(Virtuozzo), Docker, LXC (Cgroups)