La società Canonical ha rilasciato la versione 5.0 del gestore di container LXD e del file system virtuale LXCFS 5.0. Il codice di LXD è scritto in Go e distribuito sotto la licenza Apache 2.0. La versione 5.0 è classificata come rilascio a lungo termine — gli aggiornamenti saranno forniti fino a giugno 2027.
Come runtime per l'esecuzione dei container viene utilizzato l'insieme di strumenti LXC, che comprende la libreria liblxc, un insieme di utility (lxc-create, lxc-start, lxc-stop, lxc-ls, ecc.), modelli per la creazione di container e un insieme di binding per vari linguaggi di programmazione. L'isolamento è realizzato tramite i meccanismi standard del kernel Linux. Per isolare processi, stack di rete, ipc, uts, identificatori utente e punti di montaggio viene utilizzato il meccanismo dei namespace. I cgroup sono usati per limitare le risorse. Le funzionalità del kernel come i profili Apparmor e SELinux, le politiche Seccomp, Chroots (pivot_root) e capabilities vengono utilizzate per ridurre i privilegi e limitare l'accesso.
Oltre a LXC, in LXD vengono utilizzati anche componenti dei progetti CRIU e QEMU. Se LXC è uno strumento a basso livello per gestire i singoli container, LXD fornisce strumenti per la gestione centralizzata dei container distribuiti in un cluster di più macchine. serverLXD è implementato come un processo in background che accetta richieste di rete tramite REST API e supporta diversi backend di archiviazione (alberi di directory, ZFS, Btrfs, LVM), snapshot dello stato, migrazione live dei container attivi da una macchina all'altra e strumenti per l'archiviazione delle immagini dei container. LXCFS è utilizzato per simulare nei container il pseudo-FS /proc e /sys, e la rappresentazione virtualizzata di cgroupfs per dare ai container l'aspetto di un sistema indipendente.
Miglioramenti chiave:
- Possibilità di collegare e scollegare dischi e dispositivi USB in modo hotplug. Nella macchina virtuale, un nuovo disco è identificato dall'emergere di un nuovo dispositivo sul bus SCSI, mentre un dispositivo USB è identificato dalla generazione di un evento di hotplug USB.
- È stata fornita la possibilità di avviare LXD anche in assenza di una connessione di rete, ad esempio a causa della mancanza di un dispositivo di rete necessario. Invece di restituire un errore durante l'avvio, LXD ora avvia il massimo numero possibile di ambienti nelle attuali condizioni, mentre gli altri ambienti vengono avviati dopo il ripristino della connessione di rete.
- È stata aggiunta una nuova ruolo dei membri del cluster - ovn-chassis, destinato ai cluster che utilizzano OVN (Open Virtual Network) per la comunicazione di rete (assegnando il ruolo di ovn-chassis è possibile riservare server per funzioni di router OVN).
- È stata proposta una modalità ottimizzata per l'aggiornamento dei contenuti delle partizioni di archiviazione. Nelle versioni precedenti, l'aggiornamento consisteva nel copiare inizialmente un'istanza di un container o di una partizione, ad esempio utilizzando la funzionalità send/receive in zfs o btrfs, dopodiché la copia creata veniva sincronizzata avviando il programma rsync. Per migliorare l'efficienza dell'aggiornamento di macchine virtuali nella nuova versione è stata implementata una logica avanzata di migrazione, in cui, nel caso in cui il server sorgente e quello di destinazione utilizzino lo stesso pool di archiviazione, invece di rsync vengono automaticamente utilizzati snapshot e operazioni send/receive.
- È stata riprogettata la logica di identificazione degli ambienti in cloud-init: invece di nomi di ambienti, ora viene utilizzato UUID come instance-id.
- Aggiunta la supporto per l'intercettazione della chiamata di sistema sched_setscheduler, consentendo ai container senza privilegi di modificare le priorità dei processi.
- Implementata l'opzione lvm.thinpool_metadata_size, che controlla la dimensione dei metadati nel thinpool.
- Riprogettato il formato del file con le informazioni di rete per lxc. Aggiunto supporto per i dati sul binding delle interfacce, ponti di rete, VLAN e OVN network.
- Aumentati i requisiti per le versioni minime dei componenti: kernel Linux 5.4, Go 1.18, LXC 4.0.x e QEMU 6.0.
- In LXCFS 5 è stato aggiunto il supporto per una gerarchia unificata dei cgroup (cgroup2), implementati /proc/slabinfo e /sys/devices/system/cpu; per la raccolta è stato utilizzato l'insieme di strumenti meson.
Fonte: opennet.ru
