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).