0% ont trouvé ce document utile (0 vote)
21 vues27 pages

Cloud

Transféré par

arwabenhadhom
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
21 vues27 pages

Cloud

Transféré par

arwabenhadhom
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Virtualisation et Cloud

Annexe

RAID 0 (Striping)

• Fonctionnement : Le RAID 0 divise les données en bandes (stripes)


et les répartit uniformément sur plusieurs disques. Cette technique
permet de traiter les données en parallèle, ce qui améliore la
performance des lectures et écritures.
• Sécurité : Aucun mécanisme de redondance n'est utilisé, donc si un
disque échoue, toutes les données sont perdues.
• Taille de stockage : La capacité totale est égale à la somme des
tailles de tous les disques. Par exemple, si vous avez deux disques
de 1 To, la capacité totale sera de 2 To.

RAID 1 (Mirroring)

• Fonctionnement : Le RAID 1 crée une copie exacte des données


sur deux disques. Cela signifie que chaque donnée écrite sur un
disque est également écrite sur l'autre disque, assurant ainsi une
duplication en temps réel.
• Sécurité : Ce système offre une tolérance aux pannes, car si un
disque tombe en panne, l’autre contient une copie complète des
données.
• Taille de stockage : La capacité totale est égale à la taille d’un seul
disque, car les données sont dupliquées sur chaque disque. Par
exemple, si vous avez deux disques de 1 To, la capacité totale sera
de 1 To.

RAID 5 (Parité distribuée)

• Fonctionnement : Le RAID 5 utilise trois disques ou plus et répartit


les données et la parité (informations permettant de reconstruire les
données en cas de panne) entre les disques. La parité est calculée à
chaque écriture et distribuée à travers les disques, permettant ainsi
une récupération des données en cas de défaillance d’un disque.
• Sécurité : Ce système offre une tolérance à la panne d’un disque. Si
un disque échoue, les données manquantes peuvent être
reconstruites à partir des informations de parité.
• Taille de stockage : La capacité totale est égale à la somme des
tailles des disques moins un disque, car la parité utilise l'espace d'un
disque. Par exemple, avec trois disques de 1 To, la capacité totale
sera de 2 To (1 To étant utilisé pour la parité).

RAID 10 (RAID 1+0)

• Fonctionnement : Le RAID 10 combine le RAID 1 (mirroring) et le


RAID 0 (striping). Les données sont d’abord dupliquées (RAID 1),
puis réparties entre les disques en bandes (RAID 0). Cela permet
d’améliorer à la fois les performances et la sécurité des données.
• Sécurité : Il offre une tolérance à la panne de un ou plusieurs
disques, tant qu'il reste au moins un disque miroir pour chaque
ensemble. Si un disque échoue, l'autre miroir prend le relais.
• Taille de stockage : La capacité totale est égale à la somme de la
moitié des tailles des disques. Par exemple, avec quatre disques de
1 To, la capacité totale sera de 2 To.

RAID 0+1 (RAID 0 + RAID 1)

• Fonctionnement : Le RAID 0+1 est une combinaison de RAID 0


(striping) et RAID 1 (mirroring). Les données sont d'abord réparties
entre les disques en bandes (RAID 0), puis dupliquées sur d'autres
disques en miroir (RAID 1).
• Sécurité : Ce système offre une tolérance à la panne de un disque
par miroir. Si un disque d’un miroir échoue, les données peuvent être
récupérées à partir du disque miroir restant.
• Taille de stockage : La capacité totale est égale à la somme de la
taille des disques divisée par deux, similaire au RAID 10. Par
exemple, avec quatre disques de 1 To, la capacité totale sera de 2
To.
RAID 100 (RAID 10+0)

• Fonctionnement : Le RAID 100 combine le RAID 10 et le RAID 0,


offrant ainsi à la fois les avantages du striping et du mirroring, mais
avec une meilleure performance et une tolérance accrue.
• Sécurité : Comme pour le RAID 10, il peut tolérer la panne de
plusieurs disques tout en maintenant l'intégrité des données.
• Taille de stockage : La capacité totale est similaire à celle du RAID
10, soit la somme de la moitié des tailles des disques.

Résumé des tailles de stockage :

• RAID 0 : Taille totale = Somme des disques


• RAID 1 : Taille totale = Taille d’un seul disque
• RAID 5 : Taille totale = Somme des disques - 1 disque
• RAID 10 : Taille totale = Somme des disques / 2
• RAID 0+1 : Taille totale = Somme des disques / 2
• RAID 100 : Taille totale = Somme des disques / 2 (similaire au RAID
10)

Chapitre 1: Introduction:
Histoire des systèmes distribués

1. Origines : Au début, les ordinateurs ne pouvaient exécuter qu'une


tâche à la fois. Pour exécuter plusieurs tâches simultanément,
plusieurs ordinateurs étaient nécessaires. Cependant, la
communication entre ces ordinateurs est devenue essentielle pour
créer des systèmes distribués.
2. Communication orientée message : Afin de permettre l'échange de
données entre ordinateurs, la communication orientée message a été
introduite, où les données sont partagées sous forme de messages.
3. Architecture orientée service (SOA) : L’avènement des systèmes
multitâches comme Windows et Unix a permis de créer des systèmes
distribués complets. L’architecture SOA permet d’intégrer des
services exécutés sur plusieurs ordinateurs via des interfaces comme
WSDL (pour SOAP) ou WADL (pour REST).
4. API REST : Avec la popularité d’Internet et la simplicité du modèle,
l'API REST est devenue plus courante que SOAP. Cela permet de
créer des interfaces entre les utilisateurs et les services web tout en
assurant la sécurité.
5. Machines virtuelles : L’émergence de systèmes distribués a amené
les ingénieurs à réfléchir à l’idée de créer plusieurs ordinateurs
virtuels sur une seule machine. Cela a donné naissance aux
machines virtuelles, qui permettent d’exécuter plusieurs systèmes
d’exploitation sur un même matériel.
6. Cloud computing : La virtualisation a facilité l’émergence du cloud
computing, où des entreprises comme Amazon, Google, et Microsoft
offrent des services basés sur des datacenters et des
environnements virtuels accessibles via des APIs.

Fonctionnement d'un ordinateur : Matériel

• ROM (Read-Only Memory) : Mémoire non volatile stockant le BIOS,


essentiel pour démarrer l'ordinateur.
• Carte mère : Contient les composants principaux comme le
processeur, la RAM, la ROM, etc.
• Stockage : Disques durs ou SSD utilisés pour le stockage des
données.
• RAM (Random Access Memory) : Mémoire volatile pour stocker les
données et programmes en cours d'exécution.
• Processeur (CPU) : Effectue les calculs et opérations logiques
nécessaires à l’exécution des programmes.

Logiciel

• Logiciel système : Interface entre le matériel et le logiciel


d’application, responsable de la gestion des ressources.
• Logiciel d’application : Logiciels spécifiques aux utilisateurs (ex :
Microsoft Office, Photoshop).
Serveurs

1. Serveurs physiques : Ordinateurs dédiés à des tâches spécifiques


dans les entreprises, avec des types variés (serveur web, serveur de
fichiers, serveur de bases de données, etc.). Ils peuvent être de
formats tour, rack, ou lame.
2. Serveurs virtuels : Utilisent un logiciel spécialisé appelé hyperviseur
pour créer plusieurs machines virtuelles indépendantes sur un seul
serveur physique. Ces serveurs peuvent être migrés facilement vers
des environnements cloud.

Chapitre 2: Virtualisation:
La virtualisation est une technologie clé qui permet d'optimiser les
ressources matérielles et d'améliorer l'efficacité des infrastructures
informatiques. Voici un résumé des points abordés dans votre exposé :

Pourquoi virtualiser ?

• Évolution des serveurs : Les serveurs sont devenus plus


accessibles et plus puissants, ce qui facilite leur utilisation.
• Multiplicité des serveurs : Les éditeurs recommandent souvent une
application ou un service par serveur, ce qui peut conduire à un
grand nombre de serveurs dans les datacenters ou dans les salles
serveurs des entreprises.
• Coûts associés :
o Sous-utilisation des serveurs : De nombreux serveurs ont
une faible utilisation (souvent inférieure à 10%).
o Coûts d’exploitation : Plus de serveurs entraînent des coûts
accrus pour le personnel informatique et pour l'espace (salles
serveurs non extensibles).
o Coûts énergétiques : La climatisation et l'électricité
représentent des dépenses importantes.
Virtualisation : Qu'est-ce que c'est ?

La virtualisation permet de faire tourner plusieurs systèmes d'exploitation


sur une seule machine physique, chacun fonctionnant indépendamment,
comme s'il était sur un ordinateur distinct.

Principes de la virtualisation :

• Cloisonnement : Chaque système d'exploitation fonctionne de


manière indépendante sans interférer avec les autres.
• Transparence : Le fonctionnement d'un système d'exploitation
virtualisé est similaire à celui d’un système classique, sans
modification pour les applications.

Cas d’utilisation de la virtualisation :

• Tester des systèmes d'exploitation sans les installer.


• Assurer la compatibilité d’une application avec différents OS.
• Simuler des environnements multi-OS.
• Partager une machine physique en plusieurs serveurs virtuels pour
optimiser les ressources.

Avantages de la virtualisation :

• Optimisation des ressources : Moins de serveurs physiques sont


nécessaires, permettant une utilisation plus efficace du matériel.
• Économie de coûts : Réduction des dépenses liées aux
équipements, à la maintenance et à l'énergie.
• Haute disponibilité et sécurité : Amélioration de la tolérance aux
pannes et possibilité de migration des serveurs virtuels.
• Réduction de l’impact environnemental : Moins de consommation
d’énergie et réduction de l’encombrement matériel.

Inconvénients de la virtualisation :

• Dépendance à la machine physique : Une panne de la machine


physique peut suspendre tous les services des machines virtuelles.
• Perte de performances : Bien que les machines virtuelles soient
exécutées sur des machines puissantes, des pertes de performance
peuvent survenir, notamment dans des environnements de
virtualisation complète.

Composants d’un système virtuel :

• Hôte (host) : Le système d'exploitation principal qui gère les


ressources de la machine physique.
• Invité (guest) : Le système d'exploitation installé à l’intérieur de la
machine virtuelle.
• Hyperviseur : Logiciel qui permet la virtualisation en allouant des
ressources à chaque machine virtuelle.

Types d'hyperviseurs :

1. Type 1 (Bare Metal) : S’exécute directement sur le matériel, sans OS


hôte. Utilisé en entreprise (exemples : XEN, VMware ESX).
2. Type 2 (Host Metal) : S’exécute au-dessus d’un OS hôte. Utilisé
surtout sur des machines de bureau (exemples : VMware
Workstation, VirtualBox).

Techniques de virtualisation :

• Virtualisation complète : L'OS invité n’a pas conscience d’être


virtualisé et fonctionne indépendamment.
• Paravirtualisation : L'OS invité doit être modifié pour interagir avec
l'hyperviseur, rendant la communication plus rapide mais créant une
dépendance entre les OS.

Types de Virtualisation

1. Virtualisation de l’OS

Permet de faire fonctionner plusieurs systèmes d'exploitation ou postes de


travail sur un même serveur physique. Cela optimise l'utilisation des
ressources et simplifie la gestion.
2. Virtualisation de serveurs

Cela consiste à exécuter plusieurs serveurs virtuels sur un seul serveur


physique, réduisant ainsi la consommation d'énergie, le besoin en espace
et en personnel, tout en améliorant la flexibilité et la disponibilité des
applications.

3. Virtualisation des postes de travail (VDI)

Les environnements de bureau complets sont hébergés sur des machines


virtuelles centralisées, accessibles à distance par les utilisateurs. Cela
permet une gestion centralisée, un accès flexible et une meilleure sécurité
des données.

4. Streaming d’OS

L'OS est streamé depuis un serveur vers un client, permettant ainsi de ne


pas avoir à installer le système d'exploitation localement. Cela réduit le
stockage local et simplifie les mises à jour.

5. Virtualisation d’applications

Cette approche permet d'isoler et d'exécuter des applications dans des


environnements séparés tout en utilisant un même système d'exploitation
sous-jacent, ce qui optimise les ressources.

6. Virtualisation de réseaux

Elle permet de créer des versions virtuelles de ressources réseau, offrant


ainsi une gestion simplifiée et une meilleure flexibilité tout en améliorant la
sécurité des données.

7. Virtualisation de stockage

Permet de regrouper plusieurs périphériques de stockage physique pour


les présenter comme un seul espace de stockage virtuel. Cela permet de
mieux gérer les ressources, d'optimiser les performances et de réduire les
coûts.
Solutions de Virtualisation

• VMWare ESXi : Un hyperviseur qui permet la virtualisation des


serveurs. Il inclut des fonctionnalités comme vMotion pour migrer des
VMs sans interruption et High Availability pour garantir la disponibilité
continue des VMs.
• Citrix Xen : Un hyperviseur open-source permettant la gestion de
machines virtuelles et la gestion des ressources via un domaine
spécial (Dom0).
• QEMU-KVM : Une solution de virtualisation open-source intégrée au
noyau Linux, qui permet à la fois la virtualisation complète et la
paravirtualisation.
• Microsoft Hyper-V : Une solution de virtualisation développée par
Microsoft, qui permet de créer des machines virtuelles sur un serveur
Windows.

Avantages de la Virtualisation

• Optimisation des ressources : Permet une meilleure gestion des


ressources physiques et un meilleur rendement des serveurs.
• Réduction des coûts : Moins de matériel nécessaire, réduction de
l'espace physique, des besoins en climatisation et d'énergie.
• Flexibilité et évolutivité : Facilite l'ajout de nouvelles ressources
sans nécessiter de nouveaux équipements physiques.
• Amélioration de la sécurité et de la gestion : Centralisation de la
gestion, mise à jour simplifiée et réduction des risques de perte de
données.

Chapitre 3: Conteneurisation:
*voir figure page 88*
-Enveloppe pour packager une application avec juste le nécessaire pour
son fonctionnement.
-Facilité de déploiement dans n‘importe quelle machine possédant un
Container Engine.
-Utilise le kernel de l'hôte.
-Isolé de l'hôte mais exécuté directement dessus.
-Décomposition de l’infrastructure applicative en petits éléments légers
faciles à déployer et à réutiliser (comme la figure le montre).
-Plus performants que les VM(Démarrage instantané)
-Portabilité(Multicloud)
-Cohérence entre les environnements Dev, test et prod (l’app marche sur
n’importe quel environnement)
-Modularité facile puisque chaque service fonctionne sous son propre
conteneur.
-Les anciennes applications(Legacy apps) ne proposent pas des
problèmes puisqu’elles ne partagent pas encore le même environnement

Comparaison entre VM et Conteneur:


-La VM virtualise une machine physique et la donne son propre OS cela
impose une énorme consommation de ressources.
-Le conteneur crée un environnement d'exécution des applications en
utilisant le même OS, son kernel et en consommant peu de ressources.

→ Les conteneurs ne sont pas conçus pour remplacer les VM mais pour

coexister et fonctionner ensemble(VM : virtualiser les machines / Container

Engine: isolation des env d’exec dans les VM)

*voir histoire page 93*

Docker:
-Docker fait ce qu’un container engine doit faire(création des env appelées
containers , empaquetage des applications ainsi que leurs dépendances
sur un conteneur virtuel)
*voir histoire de docker page 94*

-Problèmes: Compatibilité avec l' OS , installation des dépendances et des


librairies, installation des différents environnement DEV,TEST,PROD.Cela
prend beaucoup de temps de déploiement ainsi qu’il crée des conflits entre
les développeurs et les opérationnels .
-Solution: Embarquement des app dans des conteneurs et exécution de
chaque service ses propres dépendances dans des conteneurs séparées.

Architecture globale de docker:


-Création de Dockerfile contenant les commandes que docker va exécuter
pour construire une image docker de cette app utilisant $docker build.
-L’image docker continent tout ce dont l'application a besoin pour
s'exécuter correctement.
-Les images Docker peuvent être publiées dans un registre
publique(docker hub) ou privé en utilisant $docker push image_name
-Elles peuvent ainsi être téléchargées dans un Host Docker en utilisant
$docker pull image_name
-Elles peuvent également être exécutées en utilisant $docker run
image_name
→ Si l’image n’existe pas dans le host, elle va procéder au téléchargement

avant d’en créer et exécuter le conteneur docker.

Docker se compose de:


Docker Engine: composant cœur responsable de la création et la
gestion des Docker Containers. Contenant (Docker daemon).
Docker client: peut être exécuté sur n’importe quelle machine(remote
or directly connected) et communique avec le Docker daemon via socket ,
REST api…
Une image est une représentation de la Template des conteneurs en
définissant la structure de ce conteneur par l’application containerisée et
ses dépendances.
Un conteneur est un instance d’une image exécutée par le Docker Host.
Ce qui implique l’exécution de l’application containerisée dans un env isolé
fourni par le conteneur.

-Sans Docker, chaque modification faite par le développeur impose une


modification par l'opérationnel, cela rend très dure la fonctionnalité de ce
dernier et crée une dépendance entre les deux.
-Avec Docker, le développeur crée l’app et construit et publie son image
contenant toutes les dépendances fonctionnelles dans le registre docker et
puis l’opérationnel déploie l’app en instanciant des conteneurs à partir de
l’image cette app.

Les commandes de base de Docker: run et ps:


$docker run image_name: Permet de créer en démarrant un conteneur
contenant une nouvelle instance de l’image(si l’img n’existe pas, elle sera
d’abord téléchargée à partir du docker hub)
$docker run -d image_name: Permet de démarrer le conteneur dans le
background(-d : detached)
Latest: Permet de télécharger le version la plus récente et la plus stable de

l’image appelée (si cette image n’existe pas dans le Docker Host ) (exp:
$docker run MYSQL:latest) → cette valeur est par défaut.
$docker run image_name:tag : Pour spécifier la version(exp: $docker run
mysql:9.2)

$docker ps: Permet de lister les conteneurs en cours d’exécution.Ces


conteneurs sont identifiés chacun par un identifiant unique.
$docker ps -a: Permet de lister tous les conteneurs avec leurs statuts(Up ,
Exited ,Created)
Les commandes de base de docker : mapper les ports pour un
accès externe:
-Puisque, par défaut, l’accès http à un conteneur docker ne peut se faire
qu’à partir de l’intérieur de ce conteneur, la commande -p permet de
mapper le port interne d’un conteneur (exp: 80 pour nginx) à un port
externe (exp: 8082 pour une machine hôte) pour que le service soit
accessible à l'extérieur du conteneur.
L’adresse IP <ip add> est utilisée pour accéder au service en dehors du
conteneur.

Les commandes de base de docker : images et rmi:


$docker images: Permet de lister les images présentes dans le host docker
$docker rmi <<image_name>>: Permet de supprimer une image du host
docker.Pour ce faire il faut s’assurer de stopper et supprimer d’abord tous
les conteneurs instanciés de cette image.
$docker stop<<containerId or name>>: Permet de stopper un conteneur.
$docker rm <<containerId or name>>: Permet de supprimer un conteneur
d’une manière permanente.

Un conteneur docker ne peut pas contenir un OS:


-Lorsque on essaie d’exécuter la commande $docker run ubuntu, le
conteneur sera créé est pas démarré puisque les conteneurs sont conçus
pour contenir des processus et des services et pas des OS entiers.
-Dans certains cas, l’image d’un OS (exp: ubuntu) est faite pour être
l’image de base des autres conteneurs et pas pour l’exécuter en tant
qu’elle.
Quand un service du conteneur s'arrête, le conteneur s'arrête aussi.

*Toujours voir les figures d'exemples d’exécution présentes dans le


cours *

La commande EXEC:
Permet d'exécuter une commande dans un conteneur démarré.
*voir exemple pg 109*
Le paramètre -i (interactive) et -t (tty) permettent respectivement
d'empêcher le STDIN(standard input) de se fermer (interactive) et
d’allouer un terminal pour bien envoyer des requêtes en entrée.

La commande Attach:
Si on lance un conteneur en background avec -d , on est besoin
souvent de lui attacher la console du terminal(communication)
Cette opération se fait par la commande $docker attach
containerID.(voir exp page 110)

Inspecter un conteneur:
On peut afficher des infos basiques sur un conteneur en utilisant la
cmd ps.
Pour + de détails sur les conteneurs au format JSON, on peut utiliser:
$docker inspect <<container_name or container_id>>

Mapping des volumes: persistances des données dans un


conteneur:
Exp:
Le démarrage de MYSQL provoque que les bases de données seront
stockées par défaut dans /var/lib/mysql à l’intérieur du docker
container.
Un docker container a son propre système de fichier.
La suppression du conteneur résulte dans la suppression de tous ses
dossiers entre autres le dossier /var/lib/mysql. Donc il faudrait mapper
les volumes en dehors du conteneur et cela se fait par la commande:
$docker run -v /opt/dataDir : /var/lib/mysql mysql
Quand le conteneur mysql démarre, il monte un dossier en dehors de
lui(/opt/dataDir) qui persiste même si on supprime le conteneur après.

Logs des conteneurs:


On doit visualiser un moment les fichiers log de conteneurs exécutés
en background.Cela se fait par :
$docker logs container_ID
*voir exp page 113*

Configurer Rest API pour Docker:


Il est possible d’exposer les services de docker pour un accès distant
via une API REST.
*voir exemple d'implémentation du tp et de la page 114, 115*

Dockerfile:
C’est fichier .txt qui contient les commandes nécessaires à la
construction d’une image.
Après la création d’un dockerfile , l'administrateur utilise la cmd
$docker build pour créer une image basée sur les commandes du
dockerfile.
On peut configurer les commandes d’un dockerfile pour utiliser des
versions et des dépendances logicielles spécifiques afin de garantir
des déploiement cohérents et stables.
Les commandes utilisées dans dockerfile:
Copy: copier les fichiers d’une source vers le système de fichiers du
conteneur de la machine cible.
Exp: COPY myfile.txt /app/myfile.txt
Add: COPY + d’autres fonctionnalités(extraction d’archives et
téléchargement des fichiers à partir d’un url).
Exp: $ADD myfile.tar.gz /app/ # Extracts myfile.tar.gz into /app/
$ADD https://example.com/file /app/file # Downloads file from URL

Cmd:Exécuter une commande spécifique dans le conteneur


Exp : $CMD ["echo", "Hello, World!"]

Entrypoint: Définit une application qui s’exécute par défaut lors de la


création d’un conteneur.
Exp: $ENTRYPOINT ["echo"]
$CMD ["Hello, World!"]

Env:Définir les variables d’environnement


Exp: $ENV APP_ENV=production
$ENV APP_PORT=8080

Expose: expose un port spécifique pour permettre la mise en réseau


avec le monde extérieur.
exp : $EXPOSE 80
$CMD ["nginx", "-g", "daemon off;"]

From: Définir l’image de base utilisée pour démarrer le processus de


construction
Exp: $FROM python:3.10
$WORKDIR /app
COPY . .
CMD ["python", "app.py"]
La base ici sera l’image python:3.10

Maintainer: Nom complet et l’adresse électronique du créateur de


l’image
Exp: $MAINTAINER John Doe <[email protected]>

Run: Exécute les commandes dans le conteneur lors de la


construction de l’image docker.
Exp: $RUN apt-get update && apt-get install -y curl

User: Définit le nom de l’ utilisateur(UID) qui exécute le conteneur.


Exp: $USER myuser

Volume: Permet l’accès du conteneur à un répertoire sur le machine


host.
Exp: $VOLUME /data
Workdir: Définir le chemin où la commande, définie avec CMD, doit
être exécutée.
Exp: $WORKDIR /app

*voir exp page 119*

Networking dans Docker:


Il existe trois modes réseaux en docker:
Bridge: Par défaut. $docker run nginx.
Ce type est un réseau privé et chaque conteneur, ayant souvent une add ip
172.17.0.x, sur l'hôte peut communiquer avec un autre conteneur de la
même hôte. Pour accéder à un conteneur à l’extérieur il faut mapper le port
de ce conteneur aux ports du docker host.

Host: Le conteneur partage directement le network slack avec la machine


hôte. Un mapping automatique du port de chaque conteneur au meme port
au niveau de l'hôte , ce qui élimine le processus de mapping et le rend plus
rapide que le Bridge. Mais on ne peut pas démarrer plusieurs instances du
même conteneur , car on ne peut pas exposer plusieurs services avec le
même port au niveau du host.

None: Le conteneur n’est attaché à aucun réseau. N'est accessible ni


localement ni de l'extérieur.

En utilisant le type Bridge, on peut créer des réseaux locaux ayant leur
propre masque. Pour que les conteneurs connectés à ce réseaux seront
séparés des conteneurs connectés au Bridge par défaut 172.17.0.x ou
d’autres réseaux locaux.
*voir page 121 pour un exp d’exécution*

Docker name spaces(DNS):


Le DNS est utilisé pour associer un l’add IP du conteneur à son nom.Il est
démarré par défaut en utilisant 172.17.0.11.

Stockage dans Docker:


/var/lib/docker
aufs
containers
image
Volumes
C'est dans ces dossiers où docker stocke, par défaut, toutes ses données.
C'est à dire les fichiers relatifs aux
images, conteneurs, volumes.

Docker Compose:
C’est un outil qui facilite le processus de définir, de gérer et d’exécuter les
applications docker multi-container en s'appuyant sur un fichier docker-
compose.yml qui décrit les services de l’application, le volume et les
réseaux.Cela unifie la configuration et rend l’app plus facile à utiliser en
exécutant la commande docker-compose up plutôt que d’exécuter chaque
conteneur avec RUN.
*voir page 129,130 , 131,132,133,135*

Docker registry:
Espace de stockage des images.
Les images docker publiques sont stockées dans le cloud: Docker
Hub(docker.io)
Exp: $docker run nginx
Nginx: Nom de l’image dans un repository.

Docker registry est un app exposée dans une image docker sur docker
hub.
Installation d’un annuaire privé:$docker run -d -p 5000:5000 –name my-
registry registry:2

Les organisations peuvent créer leur annuaire interne


Dans ce cas là, l’accès passe une opération d’authentification avec:
$ docker login private-registry.io
Pour accéder à une image:
$ docker run private-registry.io/apps/internal-app
Par défaut, un conteneur utilise toutes les ressources disponibles(CPUs et
RAM) dans le host.
Pour restreindre l’utilisation des ressources pour un conteneur:
$docker run - -cpus=0.5 nginx
$docker run - -memory=100m mysql
Chapitre 4: Orchestration des conteneurs:

L’orchestration des conteneurs assure la scalabilité, la tolérance


aux pannes, la haute disponibilité et la montée en charge des
systèmes conteneurisés.
Cette solution est basée sur un ensemble d’outils et de scripts qui
permettent l’automatisation des opérations
Exp: Docker swarm ,Kubernetes, apache MESOS

Docker SWARM:
Docker Swarm is Docker’s native container orchestration tool
that allows you to manage and deploy multiple Docker containers
across a cluster of servers (called nodes).
Il prend en charge la réplication, la distribution des instances de
services d’app dans des hosts distribuées => Haute disponibilité
et équilibrage des charges à travers diff systèmes et hardwares.
Configuration:
*Démarrer de plusieurs hosts docker
*Assigner un host en tant que manager et les autres en tant que
workers.
*exécuter les commandes “docker service” sur le swarm manager
node. $docker service create - -replicate=4 -p 8080:80 may-app
*Voir exp page 142*
*Voir exp d’app page 143,144*

Démarrage d’un swarm: $sudo docker swarm init --advertise-addr


192.168.57.3 --listen-addr 192.168.57.3
Advertise-addr: adresse où swarm manager accepte les connexions à
partir des autres nœuds.
Listen-addr: adresse d’écoute pour accéder au cluster swarm depuis
l’extérieur.Le port par défaut de Swarm est 2377
Pour rejoindre un cluster,on utilise la commande:
$sudo docker swarm join –token SWMTKN -1- my_token
Voir exp page 145,146

Pour lister les nœuds, on utilise: $sudo docker node ls.


Pour créer et démarrer un service swarm, on utilise:
$sudo docker service create --name foo alpine ping 8.8.8.8
Pour lister les services démarrées, on utilise: $sudo docker service ls
Pour afficher les détails des services démarrés, on utilise
$sudo docker service ps foo
Pour consulter le fichier logs d’un service, on utilise
$sudo docker service logs foo

Voir exp page 152,153

Mise à l’échelle d’un service (création d’instances):


$sudo docker service scale back=15
$sudo docker service scale front=2
Mise à jour du service back
$sudo docker service update --update-parallelism 2 --update-delay 10s
back
Mise à jour du service front
$sudo docker service update --image vdemeester/exquisite-web:v2 front
Mise à jour du service front:rollback
$sudo docker service update --rollback front

Suspendre un noeud worker:$sudo docker node update --availability drain


host3
Conditionner le démarrage de services
$sudo docker service create --name svc1 --constraint engine.labe==ssd
nginx

Kubernetes:

Introduction à Kubernetes :

• Kubernetes est un système d'orchestration des conteneurs, inspiré


du projet Borg de Google. Son but est de gérer les applications
indépendamment de l'infrastructure.
• Il permet de déployer, mettre à jour et répliquer des applications
conteneurisées de manière automatisée.
Fonctionnalités principales de Kubernetes :

• Déploiement rapide et prévisible des applications sous forme de


conteneurs.
• Gestion automatique des mises à jour, de la réplication et de
l'équilibrage de charge.
• Détection et résolution des problèmes sans interruption de service.

Concepts de base :

1. Cluster : Ensemble de machines physiques ou virtuelles utilisées


pour exécuter les applications.
2. Node : Machine physique ou virtuelle où des conteneurs sont
déployés, exécutant un moteur de conteneurisation comme Docker.
3. Pod : Groupe de conteneurs déployés ensemble, partageant le
même réseau et des volumes.
4. Namespace : Permet de segmenter les ressources Kubernetes.
5. Kubectl : Outil en ligne de commande pour interagir avec
Kubernetes.

Architecture Kubernetes :

• Kubernetes Master : Composant de contrôle principal qui gère la


charge de travail et la communication.
o Etcd : Stockage distribué persistant.
o API Server : Communication avec les composants internes et
externes.
o Scheduler : Sélectionne le Node pour exécuter un Pod.
o Controller Manager : Gère les contrôleurs Kubernetes.
• Kubernetes Node (Worker) : Exécute les conteneurs sur un Node,
avec des composants comme Kubelet, Kube-proxy et cAdvisor pour
la gestion des ressources et la communication.

Composants supplémentaires :

• Volume : Espace de stockage partagé entre conteneurs dans un


même Pod.
• Déploiement : Fichier décrivant l'architecture cible et la gestion des
mises à jour automatiques.

Déploiement Nginx

1. Nom du déploiement : Le déploiement est nommé nginx, comme indiqué par le champ
metadata:name.
2. Réplicas : Le déploiement spécifie qu'il doit créer trois pods répliqués avec le champ
replicas: 3. Cela signifie que Kubernetes va créer et maintenir trois copies du même
pod pour assurer la haute disponibilité et la tolérance aux pannes.
3. Modèle de Pod :
a. Le champ spec: template définit le modèle de pod.
b. Les pods sont étiquetés avec app:nginx pour faciliter leur identification et leur
gestion. Ces étiquettes peuvent être utilisées par des services ou d'autres
composants pour sélectionner ces pods.
4. Conteneur dans chaque Pod :
a. Chaque pod contient un conteneur nommé nginx qui utilise l’image Docker
nginx:1.7.9 (version spécifique de Nginx).
b. Le conteneur est configuré pour exécuter Nginx et fournir un service web.
5. Ouverture du port 80 :
a. Le déploiement spécifie que le port 80 doit être exposé, permettant ainsi aux
utilisateurs de se connecter à l'application via ce port pour envoyer et recevoir du
trafic HTTP.

Résumé du modèle de pod pour ce déploiement :

• Étiquette du pod : app:nginx


• Conteneur :
o Nom : nginx
o Image : nginx:1.7.9
o Port exposé : 80 (pour gérer les requêtes HTTP)

Cela signifie qu'à chaque fois qu'un pod est créé ou redémarré, il sera configuré avec ces
spécifications : un conteneur exécutant Nginx à la version 1.7.9, étiqueté avec app:nginx, et
écoutant sur le port 80 pour le trafic entrant.

Services Kubernetes :

• Permet d’accéder à des Pods avec une adresse IP statique et de


faire du load balancing.
o Types : ClusterIP, NodePort, LoadBalancer.

Installation et configuration :

• Kubectl : Outil de ligne de commande pour gérer Kubernetes.


• Minikube : Outil pour exécuter un cluster Kubernetes à un nœud
localement.
o Installation via un hyperviseur (comme VirtualBox) et
configuration des variables d'environnement Docker.
Construire l’image docker de l’application

Déployer un conteneur de app-test dans un pod kubernetes


Exposer le port 8080 de l’application pour un accès au pod de l’extérieur

Consulter le service app-test en local

Consulter le service app-test en local

Nettoyage

Vous aimerez peut-être aussi