1
0
Fork 0
trainings/cloud/slides/index.html

554 lines
24 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Virtualisation et OpenStack - Arnaud Morin</title>
<meta name="description" content="Un cours simple sur la virtualisation et OpenStack">
<meta name="author" content="Arnaud Morin">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="dist/reset.css">
<link rel="stylesheet" href="dist/reveal.css">
<link rel="stylesheet" href="dist/theme/white.css" id="theme">
<!-- Theme used for syntax highlighting of code -->
<link rel="stylesheet" href="plugin/highlight/monokai.css">
<link rel="stylesheet" href="custom.css">
</head>
<body>
<div class="reveal">
<!-- Any section element inside of this container is displayed as a slide -->
<div class="slides">
<!-- intro -->
<section data-markdown>
# Virtualisation et OpenStack
![OpenStack](openstack.png)
#### Arnaud Morin
</section>
<section data-markdown>
### Objectifs
* Virtualisation
* Cloud
* OpenStack
</section>
<!-- Virtu -->
<section>
<section data-markdown>
# Virtualisation
</section>
<section data-markdown>
### Objectifs
* Principes et intérêts
* Vocabulaire
* Vue d'ensemble des solutions dispo
</section>
<section>
<h3>Définition</h3>
<p class="fragment">Selon wikipedia : <br/>La virtualisation consiste à faire fonctionner un ou plusieurs systèmes dexploitation comme un simple logiciel, sur un ou plusieurs ordinateurs (serveurs), au lieu de ne pouvoir en installer quun seul par machine.</p>
</section>
<section>
<h3>Principes de Popek et Goldberg</h3>
<p>En 1974, Popek et Goldberg sont deux chercheurs qui ont introduits des conditions pour quun système supporte la virtualisation :</p>
<ul>
<li class="fragment"><span style="color: orange">équivalence</span> : fonctionnement identique dans une VM comme sur une machine physique</li>
<li class="fragment"><span style="color: orange">efficacité</span> : une part majoritaire dinstructions doit être éxécutée directement sans intervention de lhyperviseur</li>
<li class="fragment"><span style="color: orange">contrôle</span> : l'hyperviseur garde le contrôle des ressources et les partage entre les VM</li>
</ul>
</section>
<section>
<h3>Historique</h3>
<ul>
<li><span style="color: orange">1946</span> - Premiers ordinateurs "Turing-complet" (ex : ENIAC)</li>
<li><span style="color: orange">1958</span> - Ordinateurs multitaches (Gamma 60 de Bull) : faire tourner plusieurs programmes en même
temps, concept proche de la virtualisation.</li>
<li><span style="color: orange">1972</span> - IBM Mainframe Virtual Machine Facility/370 : premier système de "full virtualisation" !</li>
</ul>
</section>
<section>
<h3>Historique</h3>
<ul>
<li><span style="color: orange">1990</span> - Emulation de processeurs x86, mac sur Amiga (pionnier du genre)</li>
<li><span style="color: orange">1999</span> - VMWare Worsktation, puis Qemu, KVM, bochs, Xen, etc.</li>
<li><span style="color: orange">2004</span> - Intel VT-x Les VM ont directement accès au CPU. Les hyperviseurs ne font plus démulation mais controllent qui a accès au CPU</li>
</ul>
</section>
<section>
<h3>Les principes de Popek et Goldberg sont respectés depuis <span style="color: orange">2004</span> seulement !</h3>
</section>
<section>
<h3>Intérêts de la virtualisation</h3>
<ul>
<li class="fragment"><span style="color: orange">Sécurité</span> : isolation / cloisonement</li>
<li class="fragment"><span style="color: orange">Coût</span> : mutualisation / allocation temporelle</li>
<li class="fragment"><span style="color: orange">Criticité</span> : sauvegarde / clonagee / migration</li>
<li class="fragment"><span style="color: orange">Performance</span> : allocation dynamique de resources</li>
</ul>
</section>
</section>
<!-- Comprendre la virtu -->
<section>
<section data-markdown>
# Comprendre la virtualisation
</section>
<section data-markdown>
### CPU x86: les anneaux de protections
![CPU rings](rings.svg)
</section>
<section data-markdown>
### Les anneaux de protections
* Le "noyau" linux (ou windows) tourne dans le ring 0
* Les "logiciels" utilisateurs tournent dans le ring 3
* On passe d'un ring a l'autre en faisant un "sys call" (SYSENTER)
</section>
<section data-markdown>
### Rappel
La virtualisation consiste à faire fonctionner un ou plusieurs systèmes dexploitation comme un simple logiciel
</section>
<section data-markdown>
### Les anneaux de protections
* L'hyperviseur tourne dans le ring 0
* Les machines virtuelles dans le ring 3 (simples logiciels)
</section>
<section>
<img class="r-stretch" src="virtu-emulation.svg" />
</section>
<section>
<p>La VM tourne comme un simple logiciel (ring 3).</p>
<p>Principe de Popek et Goldberg : </p>
<ul>
<li>équivalence : <span style="color: green">OK</span></li>
<li>efficacité : <span style="color: red">KO</span></li>
<li>contrôle : <span style="color: green">OK</span></li>
</ul>
</section>
<section>
<h3>Ce n'est pas de la virtualisation !</h3>
<p>On parle dans ce cas d'<span style="color: orange">émulation</span></p>
</section>
<section data-markdown>
### Emulation
Pros:
* Bonne isolation entre les OS invités
* Cohabitation darchitecture CPU et OS hétérogènes
Cons:
* Pas très performant : l'émulation provoque beaucoup d'overhead
</section>
<section>
<h3>Ring -1</h3>
<p>2004 : Intel et AMD ont ajouté à leurs processeurs des instructions CPU supplémentaires pour aider à la virtualisation :</p>
<ul>
<li>Intel VT-x</li>
<li>AMD-V</li>
</ul>
<p>Ces nouvelles instructions sont regroupées dans le <span style="color: orange">Ring -1"</span></p>
</section>
<section>
<img class="r-stretch" src="virtu-hypervisor.svg" />
</section>
<section>
<h3>Virtualisation</h3>
<p>La VM à accès au ring 0.</p>
<p>Principe de Popek et Goldberg : </p>
<ul>
<li>équivalence : <span style="color: green">OK</span></li>
<li>efficacité : <span style="color: green">OK</span></li>
<li>contrôle : <span style="color: green">OK</span></li>
</ul>
</section>
<section>
<h3>Containers</h3>
<img class="r-stretch" src="virtu-container.svg" />
</section>
<section>
<h3>Containers</h3>
<p>Ce n'est pas de la virtualisation.</p>
<p>Principe de Popek et Goldberg : </p>
<ul>
<li>équivalence : <span style="color: red">KO</span></li>
<li>efficacité : <span style="color: green">OK</span></li>
<li>contrôle : <span style="color: green">OK</span></li>
</ul>
</section>
<section>
<h3>Les modeles de virtu</h3>
<img class="r-stretch" src="modeles.svg" />
</section>
<section>
<video data-preview-video>
<source data-src="micode-emulation-virtualisation.webm" type="video/webm" />
</video>
</section>
</section>
<!-- Cloud -->
<section>
<section data-markdown>
# Cloud
</section>
<section data-markdown>
### Cloud
* Principes et intérêts
* Vocabulaire et philosohie
* Vue d'ensemble des solutions dispo
</section>
<section>
<h3>Le cloud c'est large !</h3>
<ul>
<li>Calcul / Virtualisation</li>
<li>Stockage</li>
<li>Abstraction du matériel</li>
<li>Service et facturation à la demande</li>
<li>Accès par des <span style="color: orange">API REST</span></li>
<li><span style="color: orange">Flexibilité</span>, <span style="color: orange">élasticité</span></li>
</ul>
</section>
<section>
<h3>What you want as a service</h3>
<p>Principalement :</p>
<ul>
<li><span style="color: orange">IaaS</span> : Infrastructure as a Service</li>
<li><span style="color: orange">PaaS</span> : Platform as a Service</li>
<li><span style="color: orange">SaaS</span> : Software as a Service</li>
</ul>
</section>
<section>
<p>Mais aussi :</p>
<ul>
<li>Database as a Service</li>
<li>Network as a Service</li>
<li>Firewall as a Service</li>
<li>Load Balancer as a Service</li>
<li>DNS as a Service</li>
<li>... </li>
</ul>
</section>
<section>
<h3>Type de cloud</h3>
<ul>
<li><span style="color: orange">Cloud Public</span> : fourni par un hébergeur à des clients (OVHcloud, AWS, GCP, Azure, Dropbox, etc.)</li>
<li><span style="color: orange">Cloud Privé</span> : interne a une entreprise</li>
<li><span style="color: orange">Cloud Hybride</span> : utilisation de ressources public au sein d'un cloud privé</li>
</ul>
</section>
<section data-markdown>
### Pourquoi faire du cloud
Coté business :
* Baisse des coûts par mutualisation
* Utilisation uniquement des ressources nécessaires
</section>
<section data-markdown>
### Pourquoi faire du cloud
Coté tech :
* Accès par des API / automatisation / agilité
* Reproductibilité
* Architectures résiliantes et scalables
* Abstraction des couches basses
</section>
<section>
<h3>Cloud Providers</h3>
<img class="r-stretch" src="cloud-providers.svg" />
</section>
<section>
<h3>Virtualisation dans le cloud</h3>
<p>Le cloud computing repose souvent sur la virtualisation.</p>
<p>Le plus souvent en se basant sur l'hyperviseur Open Source <img src="qemu.png" alt="QEMU" style="margin: 0px"/> / <img src="kvm.png" alt="KVM" style="margin: 0px"/></p>
</section>
<section>
<h3>Stockage dans le cloud</h3>
<p>On distingue deux types de stockage : le <span style="color: orange">block</span> storage et l'<span style="color: orange">object</span> storage
</section>
<section>
<h3>Block storage</h3>
<p>Stockage <span style="color: orange">bas</span> niveau</p>
<ul>
<li>Utilisé pour créer des disques virtuels (raw devices e.g. /dev/vdb)</li>
<li>Compatible avec n'importe quel systeme de fichier</li>
<li>Latence faible, idéal pour optimiser les I/O</li>
<li>E.G. Amazon EBS, OpenStack Cinder</li>
</ul>
</section>
<section>
<h3>Object storage</h3>
<p>Stockage <span style="color: orange">haut</span> niveau</p>
<ul>
<li>Accessible via une API HTTP</li>
<li>Utilisé pour les fichiers non structurés (images, videos, logs, etc.)</li>
<li>Optimisé pour la scalabilité et la durabilité</li>
<li>E.G. Amazon S3, OpenStack Swift</li>
</ul>
</section>
</section>
<!-- Vocabulaire cloud -->
<section>
<section data-markdown>
### Lexique du Cloud : Les Mots Clés à Maîtriser
</section>
<section data-markdown>
### API REST
Interface pour interagir avec les services cloud via des requêtes HTTP (GET, POST, etc.).
> Comme un "menu de restaurant" : tu commandes (GET /instances) et tu reçois une réponse (liste des instances).
</section>
<section data-markdown>
### API de metadata/userdata
API interne permettant à une instance cloud daccéder dynamiquement à des informations de configuration ou des scripts au démarrage, généralement accessible à lURL 169.254.169.254.
> Comme une "boîte aux lettres" accessible depuis une instance : les metadata sont les courriers administratifs alors que les userdata sont des colis personnels.
</section>
<section data-markdown>
### cloud-init
Outil pour initialiser une instance (ex: créer un utilisateur, installer des paquets). Il récupère les informations depuis l'API de metadata/userdata.
> Comme un "assistant de première configuration" : il prépare la machine à ton arrivée.
</section>
<section data-markdown>
### Image
Modèle préconfiguré dun système dexploitation (OS) ou dune application, utilisé pour démarrer des instances.
> Comme une "clé USB bootable" : permet de démarrer une machine avec un OS déjà installé (ex: Debian, Ubuntu, CentOS).
</section>
<section data-markdown>
### Instance
Machine virtuelle (VM) ou conteneur exécutant un OS ou une application, créée à partir dune image.
> Une "boîte" avec CPU, RAM, disque, port.
</section>
<section data-markdown>
### Flavor
Modèles prédéfinis de ressources (CPU, RAM, disque) pour une instance.
> Comme des "menus" au restaurant : petit (1 CPU, 2 Go RAM), moyen (4 CPU, 8 Go RAM), etc. Plus c'est gros, plus c'est cher !
</section>
<section data-markdown>
### Volume
Disques durs virtuels persistants, attachables/détachables à des instances. Se repose sur une technologie de block storage.
> Comme un "disque dur externe" : on peut l'attacher sur n'importe quelle instance.
</section>
<section data-markdown>
### Floating IP
Adresses IP publique flottante, attachable à une instance pour un accès internet.
> Comme un "numéro de téléphone portable" : on peut le transférer dun appareil à un autre.
</section>
<section data-markdown>
### Security-group
Règles de pare-feu pour contrôler le trafic réseau vers/entre les instances.
> Comme un "videur de boîte de nuit" : il autorise ou bloque laccès selon des règles.
</section>
<section data-markdown>
### Keypair
Clés SSH publiques/privées pour une connexion sécurisée aux instances.
> Comme une "clé et une serrure" : la clé privée ouvre la porte (instance) verrouillée par la clé publique.
</section>
</section>
<!-- OpenStack -->
<section>
<section data-markdown>
# OpenStack
![OpenStack](openstack.png)
</section>
<section data-markdown>
Suite logicielle Open Source pour construire un cloud.
![Projects](openstack-projects.png)
</section>
<section>
<h3>Histoire</h3>
Projet démarré en 2010 suite a la fusion d'un projet de la <img src="nasa.svg" alt="NASA" style="margin: 0px"/> (cloud computing) et d'un projet de <img src="rackspace.png" alt="Rackspace" style="margin: 0px"/> (cloud object storage)
</section>
<section>
<p>Développé en <img src="python.png" alt="Python" style="margin: 0px"/> et distribué sous licence libre <img src="apache.png" alt="Apache 2.0" style="margin: 0px"/></p>
</section>
<section>
<p>Cycle de de 2 releases par an</p>
<p>Les dernières releases :</p>
<ul>
<li>2025.1 (epoxy)</li>
<li>2025.2 (flamingo)</li>
<li>2026.1 (gazpacho) - prévu pour avril</li>
</ul>
</section>
<section data-markdown>
### Les 4 opens
* Open Source
* Open Design
* Open Development
* Open Community
</section>
<section>
<h3>Overview</h3>
<img class="r-stretch" src="openstack-overview.png" />
</section>
<section>
<h3>Principaux projets</h3>
<ul>
<li>Compute : Nova <img src="nova.png" alt="nova" style="margin: 0px"/></li>
<li>Network : Neutron <img src="neutron.png" alt="neutron" style="margin: 0px"/></li>
<li>Image : Glance <img src="glance.png" alt="glance" style="margin: 0px"/></li>
<li>Volume : Cinder <img src="cinder.png" alt="cinder" style="margin: 0px"/></li>
<li>Authentication : Keystone <img src="keystone.png" alt="keystone" style="margin: 0px"/></li>
<li>Object Storage : Swift <img src="swift.png" alt="swift" style="margin: 0px"/></li>
</ul>
</section>
<section>
<h3>Mais aussi</h3>
OpenStack ne pourrait pas fonctionner sans d'autres briques Open Source, comme par ex. :
<ul>
<li>Block storage : <img src="ceph.png" alt="ceph" style="margin: 0px"/> (pour cinder / volumes)</li>
<li>Base de données : <img src="mariadb.png" alt="mariadb" style="margin: 0px"/></li>
<li>Bus de messages : <img src="rabbitmq.png" alt="rabbitmq" style="margin: 0px"/></li>
<li>etc.</li>
</ul>
</section>
<section data-markdown>
### Installation d'OpenStack
Installer OpenStack est relativement simple :
```bash
$ pip install nova
$ pip install neutron
# etc.
```
La complexité réside dans la configuration et l'imbrication des différents éléments entre eux.
Beaucoup d'options sont possibles et nécessitent une forte expertise.
</section>
<section data-markdown>
### Utilisation d'OpenStack
Pour discuter avec un Cloud OpenStack, le plus simple est d'installer et utiliser le client officiel :
```bash
$ pip install python-openstackclient
```
Ce client permet de faire des requêtes HTTP aux differentes API REST du cloud OpenStack.
</section>
<section data-markdown>
### Fichier openrc
Le client `openstack` nécessite des paramètres pour se connecter au cloud OpenStack.
A minima, il faut :
* L'`URL` de l'API `keystone`
* Un `login`
* Un `mot de passe`
* Un identifiant `project`
</section>
<section data-markdown>
### Exemple de fichier openrc
```bash
$ cat openrc
export OS_AUTH_URL="https://auth.cloud.ovh.net/v3/"
export OS_TENANT_ID="0d899a6f76e74760a06919533ed0ec52"
export OS_USERNAME="user"
export OS_PASSWORD="password"
```
</section>
<section data-markdown>
### Catalog
La premiere requête que nous pouvons faire avec le client `openstack` est une requête aupres du service `keystone` pour récupérer le `catalog` et ainsi découvrir les autres API disponibles dans notre cloud.
```bash
$ openstack catalog list
```
</section>
<section data-markdown>
### Liste des instances
Si le service `nova` (compute) est disponible sur le cloud, il devient possible de lister les instances :
```bash
$ openstack server list
```
</section>
<section data-markdown>
### Liste des images
Si le service `glance` (image) est disponible sur le cloud, il devient possible de lister les images :
```bash
$ openstack image list
```
</section>
<section data-markdown>
### Liste des réseaux
Si le service `neutron` (network) est disponible sur le cloud, il devient possible de lister les réseaux :
```bash
$ openstack network list
```
</section>
<section data-markdown>
### etc.
Beaucoup d'autres requêtes peuvent être faite.
Comme par ex. booter une nouvelle instance
```bash
# Création d'une nouvelle instance
$ openstack server create \
--flavor small \
--image 'Debian 13' \
--net public \
mon-instance
```
etc.
</section>
<section>
<h3>Interface web</h3>
<p>Il est aussi possible de piloter OpenStack à partir d'une interface web.</p>
<img class="r-stretch" src="skyline.webp" />
</section>
<section data-markdown>
### ...ou via du code
```terraform
# Exemple avec du code terraform
resource "openstack_compute_instance_v2" "mon_instance" {
name = "mon-instance"
image_name = "Debian 13"
flavor_name = "small"
network {
name = "public"
}
}
```
</section>
</section>
<section data-markdown data-background="camion_plot.gif">
## Questions ?
</section>
</div>
<!-- end slides -->
</div>
<script src="dist/reveal.js"></script>
<script src="plugin/zoom/zoom.js"></script>
<script src="plugin/notes/notes.js"></script>
<script src="plugin/search/search.js"></script>
<script src="plugin/markdown/markdown.js"></script>
<script src="plugin/highlight/highlight.js"></script>
<script>
// Also available as an ES module, see:
// https://revealjs.com/initialization/
Reveal.initialize({
controls: true,
progress: true,
center: true,
hash: true,
// Learn about plugins: https://revealjs.com/plugins/
plugins: [ RevealZoom, RevealNotes, RevealSearch, RevealMarkdown, RevealHighlight ]
});
</script>
</body>
</html>