1
0

Ajout du cours cloud

Signed-off-by: Arnaud M. <arnaud.choupinette@mailops.fr>
This commit is contained in:
Arnaud M.
2026-01-02 23:27:29 +01:00
parent 33b14472e7
commit b32e7f3c63
97 changed files with 16261 additions and 0 deletions

553
cloud/slides/index.html Normal file
View File

@@ -0,0 +1,553 @@
<!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 <span style="color: orange">QEMU/KVM</span></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écessite 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>