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