Cgroups e namespaces: cosa sono (in modo facile)

  • Di
  • 2024-09-26 - 3 minuti
banner

La nascita dei container non avviene di recente, ma ha origine da una serie di concetti appartenenti al mondo Linux che sono stati riportati in auge e utilizzati per fare da base al mondo dei container. Tra questi, ci sono i cgroups e i namespaces.

Cgroups e namespaces: come funziona la gestione delle risorse in un sistema operativo Unix-like?

Cosa vedrai

Cosa sono i cgroups

Ok, immaginiamo di avere un mucchio di processi all’interno del tuo sistema e di volerli tenere in ordine.

I cgroups sono come delle scatole o degli scaffali che usi per tenere in ordine i tuoi processi. Ad esempio, diciamo che hai un gruppo di processi prioritari che necessitano di CPU e quindi c’è bisogno di perimetrare le risorse per questi processi.

Con i cgroups, puoi assicurarti che questi processi non utilizzino tutta la CPU (o la memoria, o le altre risorse) a disposizione del sistema, ma solo quella stabilita.

Lo scopo ultimo è infatti quello di limitare le risorse di uno o più processi, stabilendo il loro perimetro di azione.

Esempio di due cgroups per gestire le risorse di un host

Cosa sono i namespaces

Consentono di creare istanze o “viste” separate di risorse di sistema come ID di processo, interfacce di rete e altro.

In altre parole, un namespace è funzionalità del kernel Linux che permette di isolare e separare risorse di sistema tra diversi processi. In pratica, un namespace crea un ambiente virtuale in cui un gruppo di processi vede un insieme limitato di risorse, come se fosse un piccolo sistema operativo separato.

In effetti, i principali tipi di namespace sono:

  • Namespace PID: isolano gli ID di processo, in modo che i processi in diversi namespace PID abbiano i propri spazi di numerazione PID separati.
  • Namespace di rete: forniscono stack di rete separati con le proprie interfacce, tabelle di routing e regole del firewall.
  • Namespace di mount: forniscono una vista isolata della gerarchia del filesystem. I processi in diversi namespace di mount vedono un set diverso di filesystem montati.
  • Namespace utente: mappano gli ID utente e gruppo, consentendo ai processi di avere ID effettivi e di file system diversi all’interno del namespace rispetto all’esterno.
  • Namespace UTS: isolano il nome host e il nome di dominio NIS.
  • Namespace IPC: isolano le risorse di comunicazione interprocesso (IPC) come gli oggetti IPC System V e le code di messaggi POSIX.

I processi all’interno di un namespace sono in grado di avere una certa visibilità su determinate risorse e interagire solo con quelle che appartengono a tale namespace.

I namespace sono un elemento fondamentale per i container, consentendo ad ognuno di avere la propria “porzione” isolata del sistema. Docker e altri runtime per container fanno largo uso dei namespace per fornire l’isolamento e le garanzie di sicurezza dei container.

Differenze tra cgroups e namespaces

A questo punto, possiamo riassumere le differenze tra questi concetti in questo modo: intanto, lo scopo è ben diverso, perché i cgroup forniscono la gestione e controllo delle risorse e consentono di limitare, gestire e dare priorità alle risorse (CPU, memoria, I/O su disco, rete, ecc.) per un gruppo di processi. Al contrario, i namespace forniscono isolamento dei processi e creano una “vista” separata e indipendente delle risorse di sistema (PID, interfacce di rete, punti di mount, ecc.) per un gruppo di processi.

Inoltre, i cgroups non forniscono isolamento tra i processi, ma appunto controllano e limitano solo l’utilizzo delle risorse. L’isolamento viene invece garantito dai namespace, che forniscono un forte isolamento, rendendo i processi all’interno di un namespace inconsapevoli delle risorse esterne al loro namespace.

Come cgroups e namespaces lavorano all’interno di un host

Funzionamento di cgroups e namespaces in un ambiente basato su container

Grazie a Gabriele Santomaggio per avermi ispirato a scrivere questo articolo!

Post correlati

Partners

Community, aziende e persone che supportano attivamente il blog

Logo di Codemotion
Logo di GrUSP
Logo di Python Milano
Logo di Schrodinger Hat
Logo di Python Biella Group
Logo di Fuzzy Brains
Logo di Django Girls
Logo di Improove
Logo del libro open source
Logo di NgRome
Logo de La Locanda del Tech
Logo di Tomorrow Devs
Logo di UseCaseConf

Non perderti gli ultimi aggiornamenti, iscriviti a TheRedCode Digest!

La tecnologia corre, e tu devi correre più veloce per rimanere sempre sul pezzo! 🚀

Riceverai una volta al mese (o anche meno) con codici sconto per partecipare agli eventi del settore, quiz per vincere dei gadget e i recap degli articoli più interessanti pubblicati sul blog

Ci sto!

#TheRedComics

Edizione di Agosto

A cura di Sophie Aiello, copy di Chiara Romano

Fumetto di agosto di Sophie Aiello

Vuoi diventare #tech content writer? 🖊️

Se vuoi raccontare la tua sul mondo #tech con dei post a tema o vuoi condividere la tua esperienza con la community, sei nel posto giusto! 😉

Manda una mail a collaborazioni[at]theredcode.it con la tua proposta e diventa la prossima penna del blog!

Ma sì, facciamolo!