La fin de Docker avec Kubernetes ?

Début décembre, Kubernetes a annoncé la fin du support de Docker à partir de la version 1.20. Pourquoi ? Et qu’est-ce que cela change ? Nous allons voir cela dans cet article.
Kubernetes et les CRI
Kubernetes utilise une API normée appelée « CRI » (Container Runtime Interface) afin de gérer les conteneurs. Seulement, le produit de base « Docker » n’intègre pas entièrement cette spécification contrairement à containerd, cri-o ou podman (liste non exhaustive).
Pour fonctionner, Kubernetes utilise dockershim qui est une interface non normée permettant de faire la même chose qu’un CRI. Cependant, il est trop compliqué de maintenir à jour cette interface spécifique dans kubernetes alors qu’ils maintiennent déjà l’interface CRI.
C’est pourquoi containerd sera utilisé (ou autre) a la place de Docker (qui l’utilisait déjà)
Auparavant, k8s appelait dockershim pour se servir de containerd via Docker, maintenant il appellera directement containerd.

Ils simplifient donc juste l’appel de containerd en évitant de passer par dockershim et Docker.
Compatibilité avec les images docker
Les images Docker sont au format OCI (Open Container Initiative), elles sont compatibles avec containerd ou cri-o, donc pas de soucis de compatibilité avec les images existantes.
Conclusion
Docker n’est qu’un utilitaire pour humain se servant de containerd en fond, Kubernetes veut simplement éviter de maintenir à jour l’interface dockershim qui ne respecte pas entièrement le format CRI pour se servir directement de containerd (ou autre) qui lui, respecte pleinement le format CRI.
Dockershim sera déprécié a partir de la version 1.20 et son support retiré entièrement à partir de la version 1.23.
Au final, ça ne change pas grand chose au niveau workload ou management (l’outil CLI docker est remplacé par l’outil ctr de containerd qui lui ressemble beaucoup)
Liens utiles (en anglais)
Article officiel de Kubernetes: https://kubernetes.io/blog/2020/12/02/dont-panic-kubernetes-and-docker/
FAQ concernant la fin de la prise en charge de dockershim: https://kubernetes.io/blog/2020/12/02/dockershim-faq/