CRI-O est une im­plé­men­ta­tion de l’interface d’en­vi­ron­ne­ment d’exécution de con­te­neurs (Container Runtime Interface, CRI) pour Ku­ber­netes, qui utilise les images et les en­vi­ron­ne­ments d’exécution (runtimes) de « l’Open Container Ini­tia­tive » (OCI). Le projet a été lancé en 2016 par l’en­tre­prise « Red Hat » et transféré en 2019 à la « Cloud Native Computing Foun­da­tion » (CNCF).

Managed Ku­ber­netes de IONOS Cloud
Or­ches­trez vos charges de travail en toute sécurité

Managed Ku­ber­netes est la pla­te­forme idéale pour des ap­pli­ca­tions de con­te­neurs per­for­mantes et hautement évo­lu­tives.

Comment fonc­tionne CRI-O ?

Pour com­prendre le fonc­tion­ne­ment de CRI-O et son in­te­rac­tion avec les tech­no­lo­gies utilisées, il faut revenir sur l’his­to­rique du dé­ve­lop­pe­ment de la vir­tua­li­sa­tion basée sur les con­te­neurs. Le logiciel Docker, qui a po­pu­la­risé la vir­tua­li­sa­tion d’ap­pli­ca­tions in­di­vi­duelles grâce à des con­te­neurs légers, a servi de base à la création du logiciel. Avant Docker, la vir­tua­li­sa­tion se faisait prin­ci­pa­le­ment à l’aide de machines vir­tuelles. Une machine virtuelle contient un système d’ex­ploi­ta­tion complet, tandis que plusieurs con­te­neurs accèdent à un noyau de système d’ex­ploi­ta­tion partagé.

De Docker à CRI-O en passant par Ku­ber­netes

Un conteneur contient en général une ap­pli­ca­tion qui met, la plupart du temps, un mi­cro­ser­vice à dis­po­si­tion. Dans la pratique, un grand nombre de con­te­neurs doivent, en général, être contrôlés ensemble pour réaliser une ap­pli­ca­tion complète. La gestion coor­don­née de grands groupes de con­te­neurs est appelée or­ches­tra­tion.

Même s’il est possible d’effectuer l’or­ches­tra­tion avec Docker et des outils comme Docker Swarm, Ku­ber­netes a réussi à s’imposer comme une al­ter­na­tive à Docker. Ku­ber­netes regroupe plusieurs con­te­neurs dans un pod. Ces pods fonc­tion­nent sur des machines appelées nœuds qui peuvent être aussi bien des machines vir­tuelles que physiques.

L’un des prin­ci­paux problèmes de Docker résidait dans l’ar­chi­tec­ture mo­no­li­thique du logiciel. Le daemon docker fonc­tion­nait avec des pri­vi­lèges ad­mi­nis­tra­teurs et était res­pon­sable d’un grand nombre de tâches : du té­lé­char­ge­ment des images des con­te­neurs à la création de nouvelles images en passant par l’exécution de l’en­vi­ron­ne­ment d’exécution. Cet amalgame de tâches nor­ma­le­ment in­dé­pen­dantes va à l’encontre du principe de dé­ve­lop­pe­ment de logiciel : la « sé­pa­ra­tion des préoc­cu­pa­tions » (Se­pa­ra­tion of concerns) et provoque notamment des problèmes de sécurité. Des efforts ont donc été faits pour découpler les dif­fé­rentes com­po­santes.

Lors de la création de Ku­ber­netes, le daemon Ku­ber­netes kubelet a été doté d’un en­vi­ron­ne­ment d’exécution codé en dur. Mais la nécessité de prendre en charge d’autres en­vi­ron­ne­ments d’exécution s’est ra­pi­de­ment fait sentir. Une mo­du­la­ri­sa­tion des aspects in­di­vi­duels pro­met­tait un dé­ve­lop­pe­ment simplifié et plus de sécurité. Afin de rendre dif­fé­rents en­vi­ron­ne­ments d’exécution com­pa­tibles avec Ku­ber­netes, une interface a été définie : Container Runtime Interface (CRI). CRI-O est une im­plé­men­ta­tion spé­ci­fique de cette interface.

Note

Utilisez Ku­ber­netes dès main­te­nant avec Managed Ku­ber­netes de IONOS.

Ar­chi­tec­ture et fonc­tion­ne­ment de CRI-O

CRI-O est composé des éléments suivants :

  • La bi­blio­thèque de logiciel con­te­neurs/image pour le té­lé­char­ge­ment des images con­te­neurs des dif­fé­rentes sources en ligne.
  • La bi­blio­thèque de logiciel con­te­neurs/stockage pour gérer les couches de con­te­neurs et créer le système de fichiers des con­te­neurs d’un pod.
  • Un espace d’exécution com­pa­tible OCI pour exécuter les con­te­neurs. runC est un espace d’exécution standard, mais il est également possible d’utiliser d’autres espaces d’exécution com­pa­tibles comme Kata Con­tai­ners.
  • L’interface de réseau de con­te­neurs (« container net­wor­king interface », CNI) pour la création d’un réseau, uti­li­sa­tion de plug-ins pour Flannel, Weave et OpenShift-SDN.
  • L’outil de sur­veil­lance des con­te­neurs conmon pour une sur­veil­lance continue des con­te­neurs.

CRI-O est également souvent utilisé en synergie avec l’outil de gestion des pods Podman. Cela fonc­tionne, car Podman utilise les mêmes bi­blio­thèques de té­lé­char­ge­ment d’images et de gestion de couches de con­te­neurs que CRI-O.

Les processus suivants s’ef­fec­tuent lors de l’uti­li­sa­tion de CRI-O :

  1. Té­lé­char­ge­ment d’une image conteneur OCI
  2. Dé­com­pres­sion de l’image dans un paquet du système de fichier de l’en­vi­ron­ne­ment d’exécution OCI.
  3. Exécution du conteneur via un en­vi­ron­ne­ment d’exécution OCI

Quand utilise-t-on CRI-O ?

À l’heure actuelle CRI-O est surtout utilisé comme élément de la série de produits OpenShift de Red Hat. Il existe des im­plé­men­ta­tions OpenShift pour toutes les grandes pla­te­formes Cloud. En outre, le logiciel peut être utilisé dans des centres de données publics ou privés comme composant de la pla­te­forme de con­te­neurs OpenShift. Voici un aperçu des dif­fé­rents produits OpenShift :

Produit In­fras­truc­ture Géré par Pris en charge par
Red Hat OpenShift Dedicated AWS, Google Cloud Red Hat Red Hat
Microsoft Azure Red Hat OpenShift Microsoft Azure Red Hat et Microsoft Red Hat et Microsoft
Amazon Red Hat OpenShift AWS Red Hat et AWS Red Hat et AWS
Red Hat OpenShift on IBM Cloud IBM Cloud IBM Red Hat et IBM
Red Hat OpenShift Online Red Hat Red Hat Red Hat
Red Hat OpenShift Container Platform Cloud privé, cloud public, machines physiques, machines vir­tuelles, Edge Clients Red Hat, autres
Red Hat OpenShift Ku­ber­netes Engine Cloud privé, cloud public, machines physiques, machines vir­tuelles, Edge Clients Red Hat, autres

Qu’est-ce qui dif­fé­ren­cie CRI-O des autres en­vi­ron­ne­ments d’exécution ?

CRI-O est un dé­ve­lop­pe­ment re­la­ti­ve­ment récent dans le domaine de la vir­tua­li­sa­tion de con­te­neurs. His­to­ri­que­ment, il existe un certain nombre d’autres en­vi­ron­ne­ments d’exécution des con­te­neurs. Le principal argument de vente de CRI-O est pro­ba­ble­ment sa fo­ca­li­sa­tion sur Ku­ber­netes en tant qu’en­vi­ron­ne­ment. Avec CRI-O, Ku­ber­netes sera en mesure d’exécuter di­rec­te­ment les con­te­neurs sans avoir recours à des outils ou à une mo­di­fi­ca­tion spéciale du code. CRI-O lui-même prend en charge les en­vi­ron­ne­ments d’exécution com­pa­tibles OCI existants. Voici un aperçu des en­vi­ron­ne­ments d’exécution ac­ti­ve­ment dé­ve­lop­pés et fré­quem­ment utilisés :

En­vi­ron­ne­ment d’exécution Type Des­crip­tion
runC En­vi­ron­ne­ment d'exé­cu­tion OCI de bas niveau Runtime standard de facto dérivé de Docker et écrit en Go.
crun En­vi­ron­ne­ment d'exé­cu­tion OCI de bas niveau Runtime per­for­mant ; im­plé­menté en C au lieu de Go
Kata Con­tai­ners En­vi­ron­ne­ment d’exécution OCI vir­tua­lisé Utilise une machine virtuelle légère (MV)
con­tai­nerd En­vi­ron­ne­ment d'exé­cu­tion CRI de haut niveau Utilise runC par défaut
CRI-O En­vi­ron­ne­ment d’exécution CRI léger Peut utiliser notamment runC, crun, Kata Con­tai­ners
Aller au menu principal