Publicité

Introduction aux conteneurs - Agaetis

Agaetis
10 Sep 2021
Publicité

Contenu connexe

Similaire à Introduction aux conteneurs - Agaetis(20)

Publicité

Introduction aux conteneurs - Agaetis

  1. Les conteneurs François Travais 2021/01/11
  2. 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
  28. François Travais Architecte technique
Publicité