Bei CRI-O handelt es sich um eine Im­ple­men­tie­rung des Container Runtime Interface (CRI) für Ku­ber­netes, unter Nutzung von „Open Container In­itia­ti­ve” (OCI) Images und Lauf­zeit­um­ge­bun­gen (Runtimes). Das Projekt wurde im Jahr 2016 von der Firma „Red Hat“ gestartet und im Frühjahr 2019 an die „Cloud Native Computing Foun­da­ti­on“ (CNCF) übergeben.

Managed Ku­ber­netes
Ku­ber­netes als Managed Service von IONOS Cloud

Die ideale Plattform für per­for­man­te und hoch­ska­lier­ba­re Container-An­wen­dun­gen. Umfassend ins IONOS Cloud Ökosystem in­te­griert und rund um die Uhr pro­fes­sio­nell betreut.

Wie funk­tio­niert CRI-O?

Um die Funk­ti­ons­wei­se von CRI-O und das Wech­sel­spiel mit ver­wand­ten Tech­no­lo­gien zu verstehen, lohnt sich ein Blick auf die his­to­ri­sche Ent­wick­lung der con­tai­ner­ba­sier­ten Vir­tua­li­sie­rung. Grundlage für die Ent­ste­hung war die Software Docker, die die Vir­tua­li­sie­rung einzelner Apps auf Basis leicht­ge­wich­ti­ger Container in den Main­stream brachte. Vorher verstand man unter Vir­tua­li­sie­rung vor allem den Einsatz vir­tu­el­ler Maschinen. Eine virtuelle Maschine enthält ein kom­plet­tes Be­triebs­sys­tem, wo­hin­ge­gen mehrere Container auf einen gemeinsam genutzten Be­triebs­sys­tem-Kernel zugreifen.

Von Docker über Ku­ber­netes zu CRI-O

Ein Container enthält für ge­wöhn­lich eine einzelne App, die oft einen Mi­cro­ser­vice zur Verfügung stellt. Im prak­ti­schen Einsatz muss in der Regel eine Vielzahl von Con­tai­nern zusammen gesteuert werden, um eine komplette Anwendung zu rea­li­sie­ren. Die ko­or­di­nier­te Ver­wal­tung ganzer Gruppen von Con­tai­nern ist als Or­ches­trie­rung bekannt.

Auch wenn die Or­ches­trie­rung mit Docker und Tools wie Docker Swarm machbar ist, hat sich mit Ku­ber­netes eine Al­ter­na­ti­ve zu Docker durch­ge­setzt. Ku­ber­netes fasst mehrere Container in einem so­ge­nann­ten Pod zusammen. Die Pods wiederum laufen auf Nodes genannten Maschinen – dabei kann es sich sowohl um physische als auch um virtuelle Maschinen handeln.

Eines der aus­schlag­ge­ben­den Probleme mit Docker war die mo­no­li­thi­sche Ar­chi­tek­tur der Software. Der Docker-Daemon lief mit Root-Rechten und war für eine Vielzahl un­ter­schied­li­cher Aufgaben zuständig: vom Her­un­ter­la­den der Container-Images, über die Aus­füh­rung in der Lauf­zeit­um­ge­bung, bis zum Erstellen neuer Images. Diese Ver­qui­cking ei­gent­lich un­ab­hän­gi­ger Bereiche verstößt gegen das Software-Ent­wick­lungs-Prinzip „Se­pa­ra­ti­on of concerns“ („Trennung der Belange“) und führt in der Praxis u. a. zu Si­cher­heits­pro­ble­men. Daher folgten An­stren­gun­gen, die einzelnen Kom­po­nen­ten zu ent­kop­peln.

Beim Er­schei­nen von Ku­ber­netes enthielt der Ku­ber­netes-Daemon kubelet eine hart­co­dier­te Docker-Lauf­zeit­um­ge­bung. Jedoch zeigte sich schon bald die Not­wen­dig­keit, auch andere Runtimes zu un­ter­stüt­zen. Eine Mo­du­la­ri­sie­rung der einzelnen Aspekte versprach eine ver­ein­fach­te Wei­ter­ent­wick­lung sowie erhöhte Si­cher­heit. Um ver­schie­de­ne Runtimes mit Ku­ber­netes kom­pa­ti­bel zu machen, wurde eine Schnitt­stel­le definiert: das Container Runtime Interface (CRI). CRI-O ist eine spe­zi­fi­sche Im­ple­men­ta­ti­on dieser Schnitt­stel­le.

Hinweis

Machen Sie sich Ku­ber­netes heute zunutze — mit Managed Ku­ber­netes von IONOS.

Ar­chi­tek­tur und Funk­ti­ons­wei­se von CRI-O

Folgende Kom­po­nen­ten gehören zu CRI-O:

  • Die Software-Bi­blio­thek con­tai­ners/image zum Her­un­ter­la­den von Container-Images von ver­schie­de­nen Online-Quellen.
  • Die Software-Bi­blio­thek con­tai­ners/storage zum Verwalten der Container-Schichten und Erstellen des Da­tei­sys­tems für die Container eines Pods.
  • Eine OCI-kom­pa­ti­ble Runtime zum Ausführen der Container; die Standard-Runtime ist runC, es können jedoch auch andere OCI-kom­pa­ti­ble Runtimes wie die Kata Con­tai­ners genutzt werden.
  • Die Container-Netzwerk-Schnitt­stel­le („container net­wor­king interface“, CNI) zum Erstellen des Netzwerks für einen Pod; zum Einsatz kommen Plug-ins für Flannel, Weave und OpenShift-SDN.
  • Das Container-Mo­ni­to­ring-Tool conmon zur kon­ti­nu­ier­li­chen Über­wa­chung der Container.

Häufig wird CRI-O auch im Zu­sam­men­spiel mit dem Pod-Ma­nage­ment-Tool Podman ein­ge­setzt. Dies funk­tio­niert, da Podman auf dieselben Bi­blio­the­ken zum Her­un­ter­la­den der Container-Images und Verwalten der Container-Schichten aufsetzt wie CRI-O.

Der grund­le­gen­de Ablauf bei der Nutzung von CRI-O besteht aus den folgenden Schritten:

  1. Her­un­ter­la­den eines OCI-Container-Images
  2. Entpacken des Images in ein OCI-Runtime-Da­tei­sys­tem-Bundle
  3. Ausführen des Con­tai­ners durch eine OCI-Runtime

Wo kommt CRI-O zum Einsatz?

CRI-O kommt derzeit vor allem als Be­stand­teil von Red Hats OpenShift-Pro­dukt­se­rie zum Einsatz. Es exis­tie­ren OpenShift-Im­ple­men­ta­tio­nen für die Cloud-Platt­for­men aller großen Anbieter. Des Weiteren lässt sich die Software als Teil der OpenShift Container Platform in öf­fent­li­chen oder privaten Re­chen­zen­tren betreiben. Hier eine Übersicht der ver­schie­de­nen OpenShift-Produkte:

Produkt In­fra­struk­tur Verwaltet durch Support von
Red Hat OpenShift Dedicated AWS, Google Cloud Red Hat Red Hat
Microsoft Azure Red Hat OpenShift Microsoft Azure Red Hat und Microsoft Red Hat und Microsoft
Amazon Red Hat OpenShift AWS Red Hat und AWS Red Hat und AWS
Red Hat OpenShift on IBM Cloud IBM Cloud IBM Red Hat und IBM
Red Hat OpenShift Online Red Hat Red Hat Red Hat
Red Hat OpenShift Container Platform Private Cloud, öf­fent­li­che Cloud, physische Maschine, virtuelle Maschine, Edge Kunde Red Hat, weitere
Red Hat OpenShift Ku­ber­netes Engine Private Cloud, öf­fent­li­che Cloud, physische Maschine, virtuelle Maschine, Edge Kunde Red Hat, weitere

Wie un­ter­schei­det sich CRI-O von anderen Runtimes?

Bei CRI-O handelt es sich um eine relativ neue Ent­wick­lung auf dem Gebiet der Container-Vir­tua­li­sie­rung. His­to­risch bedingt existiert eine Reihe an al­ter­na­ti­ven Container-Runtimes. Das wohl aus­ch­lag­ge­bends­te Al­lein­stel­lungs­merk­mal von CRI-O ist der singuläre Fokus auf Ku­ber­netes als Umgebung. Mit CRI-O wird Ku­ber­netes in die Lage versetzt, Container ohne weitere Tools oder spezielle Code-An­pas­sun­gen direkt aus­zu­füh­ren. CRI-O selbst un­ter­stützt die exis­tie­ren­den, OCI-kom­pa­ti­blen Runtimes. Hier eine Übersicht aktiv ent­wi­ckel­ter und häufig ein­ge­setz­ter Runtimes:

Runtime Typ Be­schrei­bung
runC Low-level OCI-Runtime Aus Docker her­vor­ge­gan­ge­ne, in Go ge­schrie­be­ne De-facto-Standard-Runtime
crun Low-level OCI-Runtime Per­for­man­te Runtime; im­ple­men­tiert in C statt Go
Kata Con­tai­ners Vir­tua­li­sier­te OCI-Runtime Nutzt leicht­ge­wich­ti­ge virtuelle Maschine (VM)
con­tai­nerd High-level CRI-Runtime Nutzt stan­dard­mä­ßig runC
CRI-O Leicht­ge­wich­ti­ge CRI-Runtime Kann u. a. runC, crun, Kata Con­tai­ners nutzen
Zum Hauptmenü