zet

Containerd vs CRI-O

This is a place to summarize difference between the two biggest container engine competitors (k8s 1.24 requires one or the other):

Containerd is a full drop-in run-time replacement for docker, CRI-O is not. There is no way to run a container with CRI-O. Containerd comes with ctr but it is not at all like docker. I hear good things about nerdctl which is supposed to be more like docker command.

CRI-O has big backing and support from IBM, RedHat, Intel, SUSE and lots of other enterprise-y things, containerd is driven by Docker and a broader, more FOSS-y community.

CRI-O was specifically designed and optimized for k8s, containerd for docker, it’s important to note that Docker (as a company) has been through many financial troubles and business problems and frankly should not be considered stable, at all, the founder left “to pursue other interests”.

Containerd is simpler with usability as a priority; CRI-O is more complex, maybe faster, but less focused on usability.

Containerd does not have specific versions compatible with specific k8s versions; CRI-O was so buggy it was unusable before 2022 but seems better now even though different versions of CRI-O are still required for different k8s version, but k8s 1.24 (which banishes docker entirely) is a huge milestone and will be the baseline for a long times

Both end up running containers using runc (libcontainer written in Go).

Sources: