containerd e CRI-O: i runtime che succedono a Docker in Kubernetes

containerd donato a CNCF (marzo 2017) e CRI-O (Red Hat, 2016-2017): runtime di container estratti da Docker e progettati per Kubernetes via Container Runtime Interface (CRI). Il passaggio del mercato oltre docker-in-k8s.

Open SourceWeb containerdCRI-OContainer RuntimeKubernetesCNCFDockerOpen Source

Separare il runtime dal client

Docker ha vinto la prima fase del movimento container (2013-2016), ma il suo design monolitico (CLI + daemon + image management + runtime + networking) genera attrito quando Kubernetes cresce come orchestratore. I componenti low-level che fanno davvero girare i container possono essere estratti e standardizzati.

Nel marzo 2017 Docker dona containerd al CNCF come progetto Incubating. containerd è il runtime core di Docker: gestisce ciclo di vita del container (create, start, stop, exec, snapshot del filesystem), pull di immagini OCI, ma senza la CLI Docker né le feature high-level.

In parallelo Red Hat e un consorzio (Intel, SUSE, Hyper) sviluppano CRI-O come runtime Kubernetes-specific: implementazione pulita del Container Runtime Interface (CRI) di K8s, senza ambizioni più ampie. Prima release 1.0.0 nell’ottobre 2017.

Container Runtime Interface (CRI)

Kubernetes 1.5 (2016) ha introdotto CRI: API gRPC standard tra kubelet e container runtime. Abilita il pluggable runtime model:

  • kubelet parla CRI
  • Il runtime (containerd, CRI-O, docker-shim ponte verso Docker) implementa CRI
  • K8s non vincolato a Docker

containerd — da Docker a standalone

containerd 1.0 (dicembre 2017) è un binario Go con:

  • API gRPC con CRI plugin built-in
  • Pull/push di immagini OCI
  • Snapshot plugins (overlayfs, btrfs, zfs, native)
  • ctr CLI minimale per debug
  • Plugin architecture per estensioni

containerd è destinato a diventare il runtime di default in molte distribuzioni Kubernetes managed nei prossimi anni.

CRI-O — progettato per K8s

CRI-O è più piccolo di containerd, pensato per fare solo quello che K8s chiede via CRI:

  • Image pull/unpack
  • Pod sandbox management
  • Container lifecycle
  • Streaming server per kubectl exec/attach/logs

È il runtime di default di OpenShift 4 e Fedora CoreOS. Licenza Apache 2.0.

Nel contesto italiano

Chi adotta K8s in Italia sta osservando la direzione del runtime: molti deploy recenti partono ancora con Docker via dockershim, ma l’orientamento CNCF spinge verso containerd/CRI-O nel medio periodo.


Riferimenti: containerd donato a CNCF (marzo 2017). CRI-O 1.0 (ottobre 2017), Red Hat-led. Kubernetes CRI (1.5, 2016).

Vuoi supporto? Sei sotto attacco? Stato dei servizi
Vuoi supporto? Sei sotto attacco? Stato dei servizi