CRI-O ist eine High-Level-Container-Runtime, die von Red Hat, Intel und SUSE gezielt für Kubernetes entwickelt wurde. Sie implementiert genau die Container Runtime Interface (CRI) — die Schnittstelle, über die das Kubelet mit der Runtime spricht — und sonst nichts. Das macht sie bewusst schlank und vorhersehbar.
Weniger ist mehr
Während containerd eine allgemeine Container-API mitbringt, beschränkt sich CRI-O auf den Kubernetes-Bedarf: Es gibt keine eigene Image-Building-Funktion, keine Standalone-API und keine zusätzlichen Komfort-Werkzeuge. CRI-O nimmt ein OCI-konformes Image, startet den Container über die Low-Level-Runtime runc und meldet Zustand und Logs an Kubernetes zurück.
Vorteile
- Klein und fokussiert: weniger Angriffsfläche und weniger Ressourcenverbrauch als eine allgemeine Runtime.
- OCI-konform: funktioniert mit allen Images, die dem OCI-Standard folgen — auch solchen, die mit Docker gebaut wurden.
- Enge K8s-Anbindung: folgt dem Kubernetes-Veröffentlichungszyklus und wird von den K8s-Maintainern mitgeprüft.
- Direkt fürs Cluster: keine zusätzliche Abstraktionsschicht zwischen Kubelet und Runtime.
Einsatz
CRI-O kommt vor allem dort zum Einsatz, wo ein Cluster möglichst schlank und sicher betrieben werden soll, etwa in OpenShift, der Kubernetes-Distribution von Red Hat. containerd ist dagegen die Standardwahl der meisten anderen Distributionen, weil sie aus dem Docker-Ökosystem stammt und breiter verbreitet ist. Seit Kubernetes 1.24 sind beide die empfohlenen Nachfolger des entfernten Dockershim.
Mehr dazu: containerd, Container-Runtime, runc, Kubelet, Pod, kubectl-Befehle.