0% ont trouvé ce document utile (0 vote)
38 vues24 pages

Cours P2

Le document présente la virtualisation et la conteneurisation, en mettant l'accent sur les différences entre les machines virtuelles et les conteneurs, ainsi que sur les concepts de namespaces et de control groups. Il explique comment Docker utilise ces technologies pour offrir une isolation et un contrôle des ressources, facilitant le développement et le déploiement d'applications. Enfin, il aborde les bénéfices mutuels pour les développeurs et les opérateurs dans un environnement de conteneurs.

Transféré par

examenprepa2022
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)
38 vues24 pages

Cours P2

Le document présente la virtualisation et la conteneurisation, en mettant l'accent sur les différences entre les machines virtuelles et les conteneurs, ainsi que sur les concepts de namespaces et de control groups. Il explique comment Docker utilise ces technologies pour offrir une isolation et un contrôle des ressources, facilitant le développement et le déploiement d'applications. Enfin, il aborde les bénéfices mutuels pour les développeurs et les opérateurs dans un environnement de conteneurs.

Transféré par

examenprepa2022
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

Introduction Namespaces Control groups Pour finir

Virtualisation - R4.A.08

Isolateurs - Conteneurs
Cours 2

Michel Salomon & David Martinet

IUT Nord Franche-Comté


Département d’informatique

basé sur des supports de Guillaume Urvoy-Keller et Hadrien Pelissier

Michel Salomon & David Martinet Virtualisation 1 / 24


Introduction Namespaces Control groups Pour finir

Les promesses de la conteneurisation


Isolation → les installations (bibliothèques) de différentes
appli. ne créent pas des problèmes de configuration mutuels
Portabilité → déploiement possible sur des archi. variées

Michel Salomon & David Martinet Virtualisation 2 / 24


Introduction Namespaces Control groups Pour finir

Comparaison entre VM et Conteneur - 1


Un même objectif ⇒ isoler des programmes dans des “contextes”

VM → abstraction complète d’une machine (proc., mémoire, etc.)


Conteneur → un découpage dans Linux pour séparer des ressources

Utilisation possible d’un système de quotas pour l’accès


aux ressources matérielles (accès disque, carte réseau, proc.)
Michel Salomon & David Martinet Virtualisation 3 / 24
Introduction Namespaces Control groups Pour finir

Comparaison entre VM et Conteneur - 2

Machines virtuelles
Conteneurs
Pros
Pros
OS complet
Perf. proches du natif
Isolation “parfaite” d’une
Moins complexes et plus
VM par rapport à une autre
standards que les divers
Cons hyperviseurs
Trop “lourdes” pour être Cons
multipliées librement
Fortement lié au kernel hôte
Faible efficacité pour isoler
Sécurité
chaque application

Les conteneurs offrent une meilleur flexibilité que les VMs


Passage à une architecture microservices
La scalabilité nécessaire pour les besoins des services cloud

Michel Salomon & David Martinet Virtualisation 4 / 24


Introduction Namespaces Control groups Pour finir

Comparaison entre VM et Conteneur - 3

Une machine virtuelle


Comporte un système d’exploitation invité complet
Inclut l’application, les bibliothèques ou binaires
Nécessite plus de ressources

Un conteneur
Partage le noyau (kernel) du système d’exploitation hôte avec
d’autres conteneurs
Inclut l’application et ses dépendances
Est exécuté en tant que processus isolé dans l’espace
utilisateur sur le système hôte (pas le cas d’un conteneur
Hyper-V → un conteneur dans une VM spécifique)

Michel Salomon & David Martinet Virtualisation 5 / 24


Introduction Namespaces Control groups Pour finir

Qu’est-ce qu’un conteneur ? - 1


Un groupe de processus associé à un ensemble de permissions

Genèse du concept de conteneur


Un vieux concept d’isolation des processus
permis par la philosophie “tout est fichier”
chroot → changer de racine - dans les OS Unix depuis 1979
“Comme tout est fichier, en changeant la racine d’un
processus, c’est comme le faire changer de système.”
jail → intro. par FreeBSD en 2002 pour compléter chroot
chroot isolait un processus qu’au niveau du système de fichiers
jail permet une isolation réelle (et sécurisée) des processus

namespaces → limiter ce qu’un processus peut voir de l’OS


Implémentent le concept de jail dans Linux

cgroups → limiter les ressources matérielles d’un processus


Michel Salomon & David Martinet Virtualisation 6 / 24
Introduction Namespaces Control groups Pour finir

Qu’est-ce qu’un conteneur ? - 2


Un conteneur c’est
un groupe de processus
associé à un ensemble de permissions sur le système

1 conteneur = 1 groupe de processus Linux


des namespaces → séparation entre ces groupes
des cgroups → quotas en ressources matérielles

Des LXC (LinuX Containers) à Docker


Projet LXC démarré en 2008
Rassembler les cgroups, le chroot et les namespaces
Docker
Basé initialement sur LXC qui a été abandonné ultérieurement
Standardisation ; Robustesse ; Interface d’utilisation simple
Cloud pour diffuser les images - Docker Hub
Michel Salomon & David Martinet Virtualisation 7 / 24
Introduction Namespaces Control groups Pour finir

Bloquer un système hôte depuis un conteneur est possible

Comment ?
Utilisation d’une fork bomb dans un conteneur non privilégié
Résultat → blocage de Docker, voire du système hôte

Solution
Limiter la création de processus via une option du noyau
Exemple
docker run -it --ulimit nproc=3 --name fork-bomb bash

Attention
L’isolation des conteneurs n’est pas absolue, mais
avec un bon paramétrage elle est robuste, mature et testée

Michel Salomon & David Martinet Virtualisation 8 / 24


Introduction Namespaces Control groups Pour finir

Pourquoi utiliser Docker ?


Pensé à l’origine pour faire des conteneurs applicatifs
Isoler les modules applicatifs
Gérer les dépendances en les embarquants dans le conteneur
Se baser sur l’immutabilité
Config. conteneur pas faite pour être modifiée après la création
Avoir un cycle de vie court
Logique DevOps → “bétail vs. animal de compagnie”

Modifie la “logistique” applicative


Uniformisation
Face aux divers langages de prog., config. et briques logicielles
Installation sans accroc et automatisation
Simplifie l’intégration, la livraison, le déploiement continus
Rapproche monde du développement et des opérations
Michel Salomon & David Martinet Virtualisation 9 / 24
Introduction Namespaces Control groups Pour finir

Positionnement de Docker sur le marché

Docker est la techno. ultra-dominante de conteneurisation


Simplicité et standardisation
Format ouvert standardisé → Open Container Initiative
Logique du conteneur fonctionnelle, bonne doc. et écosystème

Des alternatives existent


LXC existe toujours et fonctionne bien en liaison avec LXD
Positionnement différent → conteneurs système
Mesos permet de gérer un cluster en se passant de Docker
Propose quand même un support des conteneurs OCI (Docker)
Podman permet un un mode rootless et daemonless
Même syntaxe que Docker, fait fonctionner des conteneurs OCI
systemd-nspawn exécute des conteneurs à l’image de LXC

Michel Salomon & David Martinet Virtualisation 10 / 24


Introduction Namespaces Control groups Pour finir

Terminologie Docker - 1
Quelques termes
Image conteneur (image container)
Package de toutes les dépendances et informations nécessaires
pour créer un conteneur
Dockerfile
Fichier texte contenant des instructions pour la création
d’une image Docker
Création (build)
Action de créer une image conteneur sur la base des info. et
du contexte fournis par le fichier Dockerfile associé, plus des
fichiers supplémentaires dans le dossier où l’image est créée
Conteneur (container)
Instance d’une image Docker
Volume
Système de fichiers accessible en écriture par le conteneur
Les images sont UNIQUEMENT en lecture seule
Michel Salomon & David Martinet Virtualisation 11 / 24
Introduction Namespaces Control groups Pour finir

Terminologie Docker - 2

Quelques termes
Balise (tag)
Marque ou étiquette que l’on peut appliquer aux images
Dépot (repository)
Collection d’images Docker associées, identifiées par une balise
qui indique la version de chaque image
Registre (registry)
Service qui fournit l’accès aux dépôts. Le registre par défaut
utilisé pour la plupart des images publiques est Docker Hub
Docker Hub
Registre public dans lequel on peut charger et manipuler
des images Docker. Fournit un hébergement d’images,
des registres publics ou privés, ...

Michel Salomon & David Martinet Virtualisation 12 / 24


Introduction Namespaces Control groups Pour finir

Terminologie Docker - 3

Michel Salomon & David Martinet Virtualisation 13 / 24


Introduction Namespaces Control groups Pour finir

Namespaces (espaces de noms)


Un concept informatique pour parler simplement de...
groupes séparés auxquels on donne un nom, d’ensembles
de choses sur lesquelles on colle une étiquette
on parle aussi de contexte

Généralités
Apparus en 2002 dans le noyau 2.4.19
Réellement utilisés en 2013 dans le noyau 3.8
Limite ce qu’un processus peut voir du système
6 namespaces → PID, NETwork, MOUNT, USER, UTS et IPC
Chaque processus est dans un namespace de chaque type
Les namespaces sont natifs dans Linux
Même si il n’y a pas de conteneur de créé ou Docker installé,
chaque processus créé est associé à 6 namespaces (par défaut)

Michel Salomon & David Martinet Virtualisation 14 / 24


Introduction Namespaces Control groups Pour finir

Namespace PID

PID - Rôle
fournit l’isolation pour l’allocation des identifiants de processus
(PIDs), la liste des processus et de leurs détails

Principes
Les processus d’un namespace “parent” voient les processus
dans les namespaces “enfants”, mais avec des numéros
de PID différents
Un processus voit les processus de son namespace PID
Un processus est aussi visible dans le namespace par défaut
(il a un numéro dans les 2, mais différents)
Chaque namespace PID a sa propre numérotation à partir de 1
Si le PID 1 disparaît, le namespace est détruit

Michel Salomon & David Martinet Virtualisation 15 / 24


Introduction Namespaces Control groups Pour finir

Namespace NET

NET - Rôle
isole le contrôleur de l’interface réseau (physique ou virtuel),
les règles de pare-feu iptables, les tables de routage, etc.

Principes
Le processus ne voit que la pile réseau de son namespace
Ses interfaces (différentes de l’hôte)
Sa table de routage séparée
Ses règles iptables
Ses sockets

Michel Salomon & David Martinet Virtualisation 16 / 24


Introduction Namespaces Control groups Pour finir

Namespace MOUNT

MOUNT - Rôle
permet de créer différents modèles de systèmes de fichiers,
ou de créer certains points de montage en lecture-seule

Principes
Un namespace MOUNT
Dispose de son propre rootfs (concept proche d’un chroot)
Peut disposer de son propre /proc, /sys
Peut aussi avoir ses montages “privés”
Son /tmp (par utilisateur, par service)

Michel Salomon & David Martinet Virtualisation 17 / 24


Introduction Namespaces Control groups Pour finir

Namespaces USER, UTS et IPC


Rôles
USER → isole l’allocation des IDs user / group (UIDs/GIDs)
UTS → détermine le nom de l’hôte (get / set hostname)
IPC → permet à un groupe de processus d’avoir des
mécanismes de communication qui leur sont propres

Principes
Un namespace USER mappe UID/GID vers différents
utilisateurs de l’hôte
Un namespace IPC permet à un groupe de processus d’avoir
des sémaphores
des files de messages
de la mémoire partagée
sans risque de conflit avec d’autres groupes d’autres namespaces

Michel Salomon & David Martinet Virtualisation 18 / 24


Introduction Namespaces Control groups Pour finir

Manipulation des namespaces

Manipulations
Création à l’aide des commandes clone ou unshare
man namespaces, man clone, man unshare
Matérialisés par des pseudo-fichiers dans /proc/$PID/ns

Exemple

Michel Salomon & David Martinet Virtualisation 19 / 24


Introduction Namespaces Control groups Pour finir

Control groups - 1

Une façon de...


tagger les demandes processeur et les appels systèmes
pour les grouper et les isoler

Généralités
Apparus en 2008 dans le noyau 2.6.24
Limite les ressources matérielles d’un processus
processeur, mémoire, réseau et entrées / sorties

Namespaces versus cgroups


Namespaces → permettent une séparation logique des conteneurs
Cgroups → permettent de spécifier les ressources phys. consommables

Michel Salomon & David Martinet Virtualisation 20 / 24


Introduction Namespaces Control groups Pour finir

Control groups - 2

Principes
Une hiérarchie par ressource (ou groupe de ressources)
Hiérachie processeur, mémoire

Groupes matérialisés par des pseudos-fichiers


Généralement montés dans /sys/fs/group

Processus de PID 1 placé à la racine de chaque hiérarchie


Nouveaux processus démarrés dans le groupe de leur parent

Comment placer un processus dans un cgroup ?


On écrit le numéro du processus dans un fichier spécial

Michel Salomon & David Martinet Virtualisation 21 / 24


Introduction Namespaces Control groups Pour finir

Fin de la rivalité “development vs. operations”


Équipe de développement ⇒ focalisée sur l’“intérieur”
Packaging de l’application → les fichiers nécessaires à
son exécution (code, runtime, outils système, biblio. et paramètres)
Équipe d’exploitation ⇒ focalisée sur l’“extérieur”
Gestion de conteneurs → s’occupe de l’env. autour
des conteneurs (réseau, logs, monitoring, configuration dynamique)

Michel Salomon & David Martinet Virtualisation 22 / 24


Introduction Namespaces Control groups Pour finir

Bénéfices mutuels attendus


Pour les développeurs en charge d’une application
Un conteneur pouvant s’exécuter sur différentes infrastructures
Moins de problèmes
Dépendances / paquets manquant(e)s, soucis de versions
Compatibilité des plateformes d’exécution
Cohérence de l’environnement de développement
Les développeurs utilisent le même OS, les mêmes biblio.,
langages quel que soit le système d’exploitation hôte

Pour les opérateurs (admin. sys.) en charge de son déploiement


Déploiement plus efficace, rapide, fiable et reproductible
Élimination des incohérences entre les environnements
de développement, de test, de production
Amélioration des perf. et de la portabilité, réduction des coûts

Michel Salomon & David Martinet Virtualisation 23 / 24


Introduction Namespaces Control groups Pour finir

Au cœur de Docker

Utilisation des conteneurs Linux et des facilités du noyau


Namespaces / control groups → isolation / contrôle ressources
AuFS → union mount évitant la duplication de fichiers
Couche de virtu. Linux entre Windows / MacOS et runtime Docker

Michel Salomon & David Martinet Virtualisation 24 / 24

Vous aimerez peut-être aussi