Before CRI (Container Runtime Interface): Kubernetes directly integrated with Docker Engine. This tight coupling caused maintenance and dependency issues.
Introduction of CRI: CRI was introduced to standardize the interface between Kubernetes and container runtimes. This allowed Kubernetes to work with various runtimes (like containerd, CRI-O, etc.) without needing to be rewritten for each one.
Docker Engine and CRI: Docker Engine itself does not implement the CRI. It's a full-fledged container platform with many features beyond what Kubernetes needs. To use Docker Engine with a CRI-compliant Kubernetes setup, you need an intermediary component called dockershim
. This dockershim
translated CRI calls into Docker Engine commands.
Deprecation of dockershim: dockershim
has been removed from Kubernetes as of v1.24. This means you can no longer directly use Docker Engine as a runtime for Kubernetes. You need to use a CRI-compliant runtime like containerd (which is now the default in many Kubernetes distributions) or CRI-O.