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.