CRI-O: cos’è?

CRI-O è un’implementazione della Container Runtime Interface (CRI) per Kubernetes, che utilizza immagini e ambienti di runtime della “Open Container Initiative” (OCI). Il progetto è stato avviato nel 2016 dalla società “Red Hat” e consegnato alla “Cloud Native Computing Foundation” (CNCF) nella primavera del 2019.

Managed Kubernetes di IONOS

Il modo semplice per gestire i carichi di lavoro dei container. Configurazione completamente automatizzata dei cluster Kubernetes, massima trasparenza e controllo dei cluster K8.

Memoria persistente
Assistenza 24/7 per K8
Configurazione automatizzata dei cluster

Come funziona CRI-O?

Per capire come funziona CRI-O e come interagisce con le tecnologie correlate, è utile dare un’occhiata allo sviluppo storico della virtualizzazione basata su contenitori. La base per la sua nascita è stato il software Docker, che ha reso popolare la virtualizzazione di singole app basata su contenitori leggeri. Prima, la virtualizzazione si basava principalmente sull’uso di macchine virtuali. Una macchina virtuale contiene un sistema operativo completo, mentre i contenitori multipli accedono a un kernel di sistema operativo condiviso.

Da Docker a CRI-O passando per Kubernetes

Un contenitore di solito contiene una singola app, che spesso fornisce un microservizio. Nell’uso pratico, per realizzare un’applicazione completa è necessario controllare simultaneamente un gran numero di contenitori. La gestione coordinata di interi gruppi di contenitori è conosciuta come orchestrazione.

L’orchestrazione è realizzabile anche tramite Docker e strumenti come Docker Swarm, tuttavia ora si è affermato l’uso di Kubernetes come alternativa a Docker. Kubernetes raggruppa diversi contenitori in quello che viene chiamato pod. I pod a loro volta girano su macchine chiamate nodi, che possono essere fisiche o virtuali.

Uno dei problemi principali di Docker era la sua architettura monolitica. Il demone di Docker girava con i privilegi di root ed era responsabile di una varietà di compiti diversi: dal download delle immagini dei contenitori, alla loro esecuzione nell’ambiente di runtime, alla creazione di nuove immagini. Questa fusione di aree in realtà indipendenti viola il principio di sviluppo software della “separation of concerns” (separazione degli interessi), oltre a poter comportare problemi di sicurezza. Per questo motivo si è ritenuto importante disaccoppiare i singoli componenti.

Inizialmente il demone di Kubernetes kubelet includeva un runtime Docker hardcoded. Tuttavia, la necessità di supportare altri runtime divenne presto evidente. La modularizzazione di ogni aspetto ha infatti permesso di semplificarne gli ulteriori sviluppi e di aumentare la sicurezza. Per rendere diversi runtime compatibili con Kubernetes, è stata definita un’interfaccia: la Container Runtime Interface (CRI). CRI-O è un’implementazione specifica di questa interfaccia.

Consiglio

Con il servizio Managed Kubernetes di IONOS potete amministrare Kubernetes in modo sempre produttivo ed efficiente.

Architettura e funzionalità di CRI-O

Appartengono a CRI-O i seguenti componenti:

  • La libreria software containers/image, per scaricare immagini di contenitori da varie fonti online.
  • La libreria software containers/storage, per gestire i livelli dei contenitori e creare il file system per i contenitori di un pod.
  • Un runtime compatibile con OCI, per eseguire i contenitori; il runtime predefinito è runC, ma è possibile utilizzare altri runtime compatibili con OCI come Kata Containers.
  • L’interfaccia di rete per contenitori (“container networking interface”, CNI), per creare la rete per un pod usando plug-in per Flannel, Weave e OpenShift SDN.
  • Lo strumento per monitorare i container conmon, per il monitoraggio continuo dei contenitori.

CRI-O è anche spesso utilizzato insieme allo strumento di gestione dei pod Podman. Infatti Podman si avvale delle stesse librerie a cui fa riferimento CRI-O per scaricare le immagini dei contenitori e gestirne i livelli.

La procedura di base per l’utilizzo di CRI-O consiste nei seguenti passaggi:

  1. Download di un’immagine del contenitore OCI
  2. Decompressione dell’immagine in un bundle del file system del runtime OCI
  3. Esecuzione del contenitore attraverso un runtime OCI

Dove si usa CRI-O?

CRI-O è attualmente utilizzato principalmente come parte della linea di prodotti OpenShift di Red Hat. Esistono implementazioni di OpenShift per le piattaforme cloud di tutti i principali provider. Inoltre, il software può essere eseguito come parte della OpenShift Container Platform in data center pubblici o privati. Di seguito una panoramica dei vari prodotti OpenShift:

Prodotto Infrastruttura Gestito da Supportato da
Red Hat OpenShift Dedicated AWS, Google Cloud Red Hat Red Hat
Microsoft Azure Red Hat OpenShift Microsoft Azure Red Hat e Microsoft Red Hat e Microsoft
Amazon Red Hat OpenShift AWS Red Hat e AWS Red Hat e AWS
Red Hat OpenShift on IBM Cloud IBM Cloud IBM Red Hat e IBM
Red Hat OpenShift Online Red Hat Red Hat Red Hat
Red Hat OpenShift Container Platform Cloud privato, cloud pubblico, macchina fisica, macchina virtuale, Edge Cliente Red Hat, altri
Red Hat OpenShift Kubernetes Engine Cloud privato, cloud pubblico, macchina fisica, macchina virtuale, Edge Cliente Red Hat, altri

Come si differenzia CRI-O dagli altri runtime?

CRI-O è uno strumento relativamente nuovo nel campo della virtualizzazione dei contenitori e l’offerta per runtime alternativi per i contenitori è sempre stata piuttosto ampia. Il punto forte di CRI-O è il suo focus sull’ambiente Kubernetes. Con CRI-O, infatti, Kubernetes può eseguire direttamente i contenitori senza strumenti aggiuntivi né personalizzazioni speciali del codice. CRI-O stesso supporta i runtime esistenti e compatibili con OCI. Di seguito una panoramica dei runtime più utilizzati:

Runtime Tipologia Descrizione
runC Runtime OCI low-level Runtime standard de facto derivato da Docker e scritto in Go
crun Runtime OCI low-level Runtime performante; implementato in C invece che in Go
Kata Containers Runtime OCI virtualizzato Utilizza una macchina virtuale (VM) leggera
containerd Runtime CRI di alto livello Utilizza runC per impostazione predefinita
CRI-O Runtime CRI leggero Può utilizzare runC, crun, Kata Containers e molti altri
Per offrirti una migliore esperienza di navigazione online questo sito web usa dei cookie, propri e di terze parti. Continuando a navigare sul sito acconsenti all’utilizzo dei cookie. Scopri di più sull’uso dei cookie e sulla possibilità di modificarne le impostazioni o negare il consenso.