Skip to content

Containers et VM

https://medium.com/@saschagrunert/demystifying-containers-part-i-kernel-space-2c53d6979504

skpoep oumoci oci

Containers

Un container est une méthode de virtualisation au niveau de l'OS. Le kernel est partagé entre tous les containers, mais tout le reste (filesystem, réseau, mémoire) peut être isolé.

Légèreté: La machine hôte n'a pas besoin d'avoir un hyperviseur. Le container est plus léger qu'une VM puisqu'il ne comprend pas la couche OS.

Kernel commun: un container n'a pas de syslog, cron (qui sont des process kernel)

L'ancêtre: chroot

La première implémentation de container est chroot: permet de modifier le répertoire root du process, et ainsi l'isoler du reste du système (le process n'aura accès qu'à l'arborescence restreinte)

Remote individuals can obtain access to the web server. If the httpd services requests as user root, attackers can obtain root access. If the httpd is run in a chroot() environment, the attacker will be restricted to the chrooted environment. We strongly advise adminstrators to run their web servers as an unpriviliged user in an chrooted environment whenever possible. Secure Networks Inc. - Security Advisory, January 12, 1997

Building blocks

Linux Control Groups (cgroups): grouper des process ensemble dans des arbres pour les monitorer et les limiter. Chaque cgroup est spécialisé (cpu, net, memory, blkio, devices,... voir liste complète dans /sys/fs/cgroup/)

Namespaces: isolement de tout ce qui consncerne le kernel via namespacing. Par ex: on peut avoir plusieurs procss avec l'ID 45 car isolatio

  • plusieurs implémentations par le passé: Chroot (1982), Jails (FreeBSD, 2000), OpenVZ (2005), LXC (2008), CoreOS, runC

systemd-nspawn peut run une commande ou un os dans un lightweight container

Docker a mis tout le monde d'accord car: - on peut creer des images en infra as code - on peut partager les images via le registry - persistance en-dehors du container

le vrai process tree d'un host peut se voir ave systemd-cgls ou systemd-cgtop

sources:

Container runtimes

https://krsoninikhil.github.io/2019/04/05/confusing-terms-in-container-ecosystem/

systemd : init scripts (successeurs de sysV) https://www.socallinuxexpo.org/scale11x-supporting/default/files/presentations/Jerome-Scale11x%20LXC%20Talk.pdf

rkt: fonctionne de base avec systemd et machinectl, bref les utilitaires standard

docker: nécessite le dockerd qui centralise tout, utilisation de l'api docker.

Virtual Machines

Un serveur bare metal + un Hyperviseur peut faire tourner plusieurs OS

Un serveur bare metal + un OS peut faire tourner plusieurs containers