Contenu connexe Similaire à Introduction aux conteneurs - Agaetis (20) Introduction aux conteneurs - Agaetis2. Agaetis 2020 © Reproduction et diffusion interdite sans autorisation préalable 2
● Un peu d’histoire
● Un conteneur en bref
● Les standards
○ Open Container Initiative - Image Spec
○ Open Container Initiative - Runtime Spec
● Docker et les container engines
● Les runtimes
○ Native runtimes
○ Sandbox runtimes
○ Virtualized runtimes
○ Windows runtime
● Les builders
● Kubernetes Container Runtime Interface
● Les OS optimisés pour les conteneurs
● Les autres outils
● Articles
Sommaire
3. Agaetis 2020 © Reproduction et diffusion interdite sans autorisation préalable 3
● 2000 : FreeBSD jails
○ Première initiative de conteneurisation d’une application
● 2001 : naissance du projet Linux-VServer
○ Isolation au niveau du Kernel
● 2005 : Solaris Zones
○ Environnement OS virtualisé
● 2007 : introduction des cgroups dans le kernel linux
○ Initialement développé par Google
○ Limitations des ressources CPU, RAM…
● 2008 : naissance de LXC, outillage bas-niveau pour conteneurs
○ Combine les différents outils bas niveau pour faciliter la création de conteneurs
● 2013 : naissance de Docker
○ Nommé dotCloud à cette époque
○ Au début, outillage autour de LXC pour le rendre plus user-friendly
● 2015 : Docker et les autres acteurs majeurs fondent l’OCI
○ Open Container Initiative, hébergé par la Linux Foundation
○ Docker donne libcontainer et runc
○ Pose les base des futurs standards
Un peu d’histoire
4. Agaetis 2020 © Reproduction et diffusion interdite sans autorisation préalable 4
Qu’est-ce qu’un conteneur ?
5. Agaetis 2020 © Reproduction et diffusion interdite sans autorisation préalable 5
Le principe : une application packager et isolée
Comment : une composition de fonctionnalités du kernel Linux :
● Les namespaces : isolation des PIDs, mounts, interfaces réseaux…
● Les cgroups : isolation des ressources CPU et RAM
● Les Linux Security Modules comme seccomp, SELinux, AppArmor...
Les bénéfices :
● Reproductibilité
● Portabilité
● Facilité d’utilisation et de partage
● Flexibilité et facilité d’administration
Un conteneur applicatif
6. Agaetis 2020 © Reproduction et diffusion interdite sans autorisation préalable 6
Les standards de l’Open Container Initiative
7. Agaetis 2020 © Reproduction et diffusion interdite sans autorisation préalable 7
● Une OCI Image est composée de:
○ Un système de fichiers disposés en couche
○ Un manifest d’image (compatibilité OS, référence au filesystem...)
○ Une configuration d’image (arguments de l’application, variables d’environnements...)
● Cette image est construite par un builder
OCI - Image spec
8. Agaetis 2020 © Reproduction et diffusion interdite sans autorisation préalable 8
● L’OCI image est décompressée en un OCI Filesystem Bundle
● l’OCI Filesystem Bundle est alors exécuté par l’OCI Runtime
Exemple d’utilisation de runc, le runtime officiel d’OCI :
OCI - Runtime spec
9. Agaetis 2020 © Reproduction et diffusion interdite sans autorisation préalable 9
Docker et les autres container engines
10. Agaetis 2020 © Reproduction et diffusion interdite sans autorisation préalable 10
Des outils en ligne de commande pour gérer toutes les étapes des standards de l’OCI
● Docker
○ L’incontournable by Moby
○ Utilise Containerd en interne
○ Utilise son propre manifest d’image (docker image v2.2)
● Podman
○ Le challenger by Red Hat
○ Daemonless et rootless
○ Docker CLI compatible
● Containerd
○ Donné à la CNCF par Docker
○ OCI et CRI compliant
○ Hébergé par la CNCF
● PouchContainer
○ By Alibaba
○ OCI et CRI compliant
○ Utilise containerd et BuildKit en interne
● LXD
○ Surcouche de LXC by Canonical
○ Se concentre sur les conteneurs systèmes, pas applicatifs
Container Engines
11. Agaetis 2020 © Reproduction et diffusion interdite sans autorisation préalable 11
Containerd
12. Agaetis 2020 © Reproduction et diffusion interdite sans autorisation préalable 12
Les runtimes
13. Agaetis 2020 © Reproduction et diffusion interdite sans autorisation préalable 13
Les natives runtimes font tourner des OCI Filesystem Bundle en ré-utilisant le kernel de
l’OS hôte
● runc
○ L’implémentation de référence de l’OCI
○ Donnée par Docker à la création de l’OCI
○ Écrit en Go
○ Utilisé par défaut par Containerd et CRI-O, et donc par Docker et PouchContainer par extension
● crun
○ Le challenger by Red Hat
○ Écrit en C
○ Plus performant que runc
○ Supporte cgroups v2
○ Runtime par défaut sous RHEL 8
○ Runtime par défaut de podman sur les système supportant les cgroups v2
● lxc
○ L’historique by Canonical
○ Se concentre sur les conteneurs systèmes, pas applicatifs
Native runtimes
14. Agaetis 2020 © Reproduction et diffusion interdite sans autorisation préalable 14
Les sandbox runtimes font tourner des OCI Filesystem Bundle en utilisant la technique du
kernel proxy layer
Le but est d’isoler un peu plus la machine hôte des containers pour des raisons de
sécurité en limitant les appels au kernel et en ajoutant une couche d’interface
Induit une perte de performance mais malgré tout plus efficace qu’un hyperviseur
classique
● gVisor
○ Implémente un grande partie des interfaces d’un kernel Linux
○ Combine l’approche de la VM avec celle d’un SELinux ou AppArmor (rule-based security policies)
○ L’OCI runtime est appelé runsc
● Nabla containers
○ N’implémente que 7 appels système du kernel linux
○ L’OCI runtime est appelé runnc
Sandbox runtimes
15. Agaetis 2020 © Reproduction et diffusion interdite sans autorisation préalable 15
Les virtualized runtimes font tourner des OCI Filesystem Bundle dans une micro VM
La micro VM tourne directement sur l’hyperviseur et dispose de son propre kernel.
Induit une perte de performance mais malgré tout plus efficace qu’un hyperviseur
classique
● Kata containers
○ Compatible CRI
○ Fusion d’Intel Clear Containers et d’Hyper.sh RunV
○ Hébergé par l’Open Infrastructure Foundation, anciennement OpenStack Foundation
○ Utilisé en prod par les géants chinois (Alibaba, Huawei, Baidu, Tencent...); Intel, Apple et Red Hat
impliqués
● OSv
○ N’est pas compatible avec les spécifications OCI
○ Financé par l’Union Européenne et lancé en 2015
● Firecracker
○ VMM dédié au MicroVMs, utilise KVM, alternative à QEMU
○ Supporte entre autres containerd, Kata containers, OSv
○ Par AWS et utilisé dans Fargate et Lambda
○ Focalisé sur la rapidité : 125ms pour déployer une app, 150 microVM / s / VM hôte
○ Écrit en Rust
Virtualized runtimes
16. Agaetis 2020 © Reproduction et diffusion interdite sans autorisation préalable 16
Hcsshim by Microsoft…
voilà, je n’ai pas envie de gratter plus que ça
Windows runtime
17. Agaetis 2020 © Reproduction et diffusion interdite sans autorisation préalable 17
Les builders
18. Agaetis 2020 © Reproduction et diffusion interdite sans autorisation préalable 18
Un builder permet de créer une OCI Image à partir d’un Dockerfile/Containerfile, ou pas
● BuildKit
○ Le builder de Docker Engine
○ Composé d’un daemon et d’un client
Les builders rootless et daemonless :
● umoci
○ Implémentation de référence de l’OCI
○ Très bas niveau, n’utilise pas le format containerfile/Dockerfile
● Buildah
○ Permet de créer des images en utilisant les commandes de la machine hôte (bash, dnf...)
○ Le builder de Podman par Red Hat
● Kaniko
○ Le container de build par Google
● img
○ Build stages en parallèle
○ Utilise une partie de BuildKit
● Jib
○ Plugin maven pour build des containers
○ Par Google
● Bazel
○ Via docker_rules
Les Builders
19. Agaetis 2020 © Reproduction et diffusion interdite sans autorisation préalable 19
Kubernetes Container Runtime Interface
20. Agaetis 2020 © Reproduction et diffusion interdite sans autorisation préalable 20
L’interface entre Kubernetes et un OCI Runtime. CRI pour les intimes.
● dockershim
○ La première implémentation
○ Couche d’abstraction sur docker
○ Déprécié à partir de Kubernetes v1.20
● Containerd
○ Permet d’utiliser beaucoup d’autres runtime comme runc (par défaut), Firecracker, gVisor, Kata...
● Cri-o
○ Implémentation légère de CRI by Red Hat
○ Utilise crun sur les OS supportant cgroups v2, sinon runc
○ CNCF Incubating
● Kata container
○ Via Kata Shim v2
● PouchContainer
○ Support natif à CRI, CSI, CNI...
● Frakti
○ Officieusement déprécié en faveur de Containerd et Kata containers
Kubernetes Container Runtime Interface
21. Agaetis 2020 © Reproduction et diffusion interdite sans autorisation préalable 21
Les OS optimisés pour les conteneurs
22. Agaetis 2020 © Reproduction et diffusion interdite sans autorisation préalable 22
OS optimisés pour les conteneurs, c’est à dire :
● Avec des mécanismes de mise à jour automatique
● Les mises à jours sont atomiques et réversibles
● L’OS est immutable
Les principaux acteurs :
● Fedora CoreOS et RHEL CoreOS
○ Fusion de CoreOS Container Linux et d’Atomic Host
○ CoreOS Container Linux était la référence avant le rachat par Red Hat
● OpenSUSE MicroOS et Kubic
○ Similaire à CoreOS, mais par SUSE
● VMWare Photon OS
○ Optimisé pour VSphere
○ Semble un peu vieillissant
● Rancher OS
○ Tout est basé sur Docker
○ Ne semble plus trop mis en avant par Rancher
Les OS optimisés pour les conteneurs
23. Agaetis 2020 © Reproduction et diffusion interdite sans autorisation préalable 23
Les autres outils
24. Agaetis 2020 © Reproduction et diffusion interdite sans autorisation préalable 24
Pour la manipulation des images Docker et OCI
● Skopeo
○ by Red Hat
○ Permet entre autres de convertir des manifests d’images docker en OCI
Pour l’introspection des images Docker et OCI
● Dive
○ Inspection du conteneur d’une image OCI ou Docker couche par couche
Les autres outils
25. Agaetis 2020 © Reproduction et diffusion interdite sans autorisation préalable 25
Conclusion
26. Agaetis 2020 © Reproduction et diffusion interdite sans autorisation préalable 26
Docker n’est maintenant qu’un outils parmi tant d’autres dans un écosystème très riche.
l’OCI a posé des bases saines pour une diversification des outils
Kubernetes est aussi omniprésent que l’étais Docker à ses débuts.
Conclusion
27. Agaetis 2020 © Reproduction et diffusion interdite sans autorisation préalable 27
Présentations globales de l’écosystème des conteneurs
● A Comprehensive Container Runtime Comparison by Capital One
○ A Comprehensive Container Runtime Comparison
● Demystifying Containers by Suse
○ Demystifying Containers - Part I: Kernel Space | SUSE Communities
○ Demystifying Containers – Part II: Container Runtimes | SUSE Communities
○ Demystifying Containers – Part III: Container Images | SUSE Communities
○ Demystifying Containers – Part IV: Container Security | SUSE Communities
● Build containers the hard way
○ Build Containers the Hard Way (WIP) - Build Containers the Hard Way
● Tuto podman, buildah et Kaniko
○ Docker Images Without Docker - A Practical Guide
Les articles