Virtualizzazione

Cos'è LXC?

Conosciuto anche come: Linux Containers
Definizione

LXC is Linux-native containerisation that isolates processes with namespaces and cgroups while sharing the host kernel. LXC is excellent inside a trust boundary you already own and weak as a multi-tenant boundary, because a kernel escape affects every container on the host.

Perché LXC è importante

LXC è eccellente all'interno di un confine di fiducia che già possiedi, ma debole come confine multi-tenant, perché una fuga dal kernel colpisce ogni container sull'host.

LXC in pratica

Con LXC ottieni un contenitore leggero che condivide il kernel dell'host. Lo gestisci tramite la suite di comandi lxc o l'API, osservando le statistiche cgroup per pressione su CPU e memoria. La messa a punto riguarda principalmente i limiti di namespace e cgroup: fissare i processi, impostare i tetti di memoria. Il costo di sbagliare è l'esposizione: una fuga dal kernel compromette ogni contenitore sull'host, quindi tratti l'host come un unico dominio di fiducia e pianifichi il failover a livello di host, non per contenitore.

Errori comuni su LXC

Le persone trattano LXC come un confine di sicurezza equivalente a KVM. Non lo è: i contenitori condividono un kernel, quindi un difetto in quel kernel può uscire da qualsiasi contenitore. La correzione è che LXC serve per l'isolamento all'interno di un confine di fiducia che possiedi, non per hosting multi-tenant dove gli inquilini possono essere ostili.

LXC — domande frequenti

LXC è uguale a Docker?

No. Docker si basa su primitive di container come LXC ma aggiunge gestione delle immagini, livelli e orchestrazione. LXC è più simile a una VM leggera: esegui una distribuzione completa al suo interno e la gestisci direttamente con systemd o init. Docker riguarda il packaging delle app; LXC riguarda la virtualizzazione dei sistemi.

Posso eseguire LXC con un kernel personalizzato?

Dipende dall'host. Alcuni provider, come OnionVPS, danno root completo e consentono kernel personalizzati, ma con LXC condividi il kernel dell'host, quindi un kernel personalizzato non è per il contenitore stesso. Per quello dovresti usare KVM. LXC è legato alla versione del kernel e alla configurazione fornita dall'host.

Altro da virtualizzazione

KVM
KVM è una virtualizzazione completa dell'hardware integrata nel kernel Linux, che dà a ogni guest il proprio kernel e un isolamento dal hardware di altri tenant.
OpenVZ
OpenVZ è una virtualizzazione basata su container in cui ogni istanza condivide il kernel dell'host, quindi i guest non possono caricare moduli del kernel o eseguire un sistema operativo diverso.
Hypervisor
Un hypervisor è il livello software che crea ed esegue macchine virtuali, allocando CPU fisica, memoria e I/O tra di esse.
Virtualizzazione annidata
La virtualizzazione annidata consente a una macchina virtuale di eseguire a sua volta macchine virtuali, esponendo le estensioni di virtualizzazione del processore al guest.
vCPU
Una vCPU è un processore virtuale presentato a un guest, supportato da tempo di pianificazione su un core o thread fisico.
cloud-init
cloud-init è il meccanismo standard per configurare una macchina virtuale al primo avvio, usando metadati forniti dalla piattaforma.