CRI (Container Runtime Interface)

Définition

Le CRI (Container Runtime Interface) est une spécification d’API Kubernetes qui définit comment les systèmes d’orchestration comme Kubernetes communiquent avec les runtimes de conteneurs. Il fournit une interface gRPC standardisée entre le kubelet et les runtimes de conteneurs, permettant à tout runtime de fonctionner avec Kubernetes.

Le CRI a remplacé les intégrations antérieures (Docker shim, rkt) par une interface unique et vendor-neutral.

Architecture CRI

Kubernetes API Server
    ↓
kubelet (sur chaque node worker)
    ↓
CRI API (gRPC)
    ↓
Runtime de conteneur (containerd, CRI-O, etc.)
    ↓
Conteneurs conformes OCI

Composants CRI

Composant Objectif
RuntimeService Gérer le cycle de vie des conteneurs (create, start, stop, delete)
ImageService Gérer les images de conteneurs (pull, list, inspect)
NetworkPlugin Configurer le networking des conteneurs (CNI)
VolumePlugin Gérer les volumes des conteneurs

Runtimes CRI

Runtime Type Notes
containerd CNCF graduated Le plus populaire, Docker utilise containerd
CRI-O CNCF graduated Runtime CRI léger de Red Hat
dockerd (déprécié) Docker Docker shim supprimé dans K8s 1.24
Frakti Expérimental Conteneurs basés sur hyperviseur (VMs)

CRI vs CNI

Aspect CRI CNI
Objectif Gestion du cycle de vie des conteneurs Networking des conteneurs
Portée Intégration du runtime Configuration réseau
API gRPC Plugins binaires
Standard Spéc Kubernetes Spéc CNCF
Exemple containerd, CRI-O Calico, Flannel

Implémentation CRI

// Exemple : Définition du service gRPC CRI (simplifié)
service RuntimeService {
  rpc Version(VersionRequest) returns (VersionResponse) {}
  rpc RunPodContainer(RunPodContainerRequest) returns (RunPodContainerResponse) {}
  rpc StopPodContainer(StopPodContainerRequest) returns (StopPodContainerResponse) {}
  rpc RemovePodContainer(RemovePodContainerRequest) returns (RemovePodContainerResponse) {}
  // ... plus de méthodes
}

service ImageService {
  rpc ListImages(ListImagesRequest) returns (ListImagesResponse) {}
  rpc PullImage(PullImageRequest) returns (PullImageResponse) {}
  rpc RemoveImage(RemoveImageRequest) returns (RemoveImageResponse) {}
  // ... plus de méthodes
}

Termes associés

  • Kubernetes — runtime CRI le plus populaire
  • CRI-O — runtime CRI léger de Red Hat
  • Docker — standards d’images et de runtimes de conteneurs

Références