Maar er is altijd de Container Runtime Interface (CRI) die ervoor zorgt dat de images die gemaakt zijn met docker kunnen (blijven) werken in een Kubernetes cluster.
Dus, waar gaat dit dan over?
De CRI in K8S is verantwoordelijk voor het ophalen en uitvoeren van container images en Docker is daar een populaire kandidaat voor. Echter, Docker is niet bedoeld om embedded in Kubernetes zijn taak te doen.
Docker is een stack dat uit meerdere componenten bestaat. Ter illustratie:
Tussen Kubelet en docker-engine wordt gebruik gemaakt van docker-shim. Dit is een hulpmiddel om kubelet met de docker-engine te kunnen laten werken. ‘shim’ kan vertaald worden als ‘bridge’ om de delen aan elkaar te lijmen.
Zoals je ziet zitten er tussen ‘kubelet’ en ‘containers’ dus componentten die feitelijk overbodig zijn. Waarom kubelet niet rechtstreeks met containerd laten werken? En dat is precies wat Kubernetes nu gedaan heeft!
De docker-shim en docker-engine componenten zijn overbodig geworden omdat Kubernetes niet zelf via docker-commando’s container zal gaan builden, taggen en pushen.
Vanaf v1.20 van Kubernetes is docker ‘deprecated’ en is effectief vanaf v1.22.