L'azienda Canonical ha pubblicato il rilascio del gestore di contenitori LXD 5.0 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 con supporto a lungo termine, con aggiornamenti previsti fino a giugno 2027.
Come runtime per l'esecuzione dei contenitori viene utilizzato l'insieme di strumenti LXC, che include la libreria liblxc, un set di utility (lxc-create, lxc-start, lxc-stop, lxc-ls, ecc.), modelli per la creazione di contenitori e un insieme di binding per diversi linguaggi di programmazione. L'isolamento è realizzato con i meccanismi standard del kernel Linux. Per l'isolamento dei processi, dello stack di rete ipc, uts, degli identificatori utente e dei punti di mount viene utilizzato il meccanismo dei nomi (namespaces). Per limitare le risorse vengono utilizzati i cgroups. Per ridurre i privilegi e limitare l'accesso, vengono impiegate funzionalità del kernel come i profili Apparmor e SELinux, le politiche Seccomp, i Chroot (pivot_root) e le capabilities.
Oltre a LXC, in LXD vengono utilizzati anche componenti dei progetti CRIU e QEMU. Mentre LXC è uno strumento a basso livello per la manipolazione di singoli contenitori, LXD fornisce mezzi per la gestione centralizzata dei contenitori distribuiti in un cluster composto da più. server. LXD è implementato come un processo in background che riceve richieste tramite la rete attraverso l'API REST e supporta diversi backend di archiviazione (albero directory, ZFS, Btrfs, LVM), snapshot con uno stato, migrazione live di contenitori attivi da una macchina all'altra e strumenti per la memorizzazione delle immagini dei contenitori. LXCFS viene utilizzato per simulare nei contenitori un file system pseudo- /proc e /sys, e una rappresentazione virtualizzata di cgroupfs per dare ai contenitori l'aspetto di un sistema indipendente normale.
Miglioramenti chiave:
- Possibilità di collegare e scollegare a caldo dischi e dispositivi USB. Nella macchina virtuale, il nuovo disco viene identificato attraverso l'apparizione di un nuovo dispositivo sul bus SCSI, mentre il dispositivo USB viene riconosciuto tramite la generazione di un evento USB hotplug.
- È stata fornita la possibilità di avviare LXD anche in assenza di connessione di rete, ad esempio, a causa della mancanza del dispositivo di rete necessario. Invece di generare un errore durante l'avvio di LXD, ora avvia il numero massimo possibile di ambienti nelle attuali condizioni, mentre gli altri ambienti vengono avviati non appena la connessione di rete viene stabilita.
- È stata aggiunta un nuovo ruolo per i membri del cluster — ovn-chassis, destinato ai cluster che utilizzano OVN (Open Virtual Network) per l'interazione di rete (assegnando il ruolo di ovn-chassis è possibile riservare server per svolgere funzioni di router OVN).
- È stata proposta una modalità di aggiornamento ottimizzata per il contenuto delle partizioni di archiviazione. Negli scorsi rilasci, l'aggiornamento prevedeva che inizialmente l'istanza del contenitore o la partizione venisse copiata, ad esempio, utilizzando la funzionalità di send/receive in zfs o btrfs, dopodiché la copia creata veniva sincronizzata avviando il programma rsync. Per migliorare l'efficienza dell'aggiornamento macchine virtuali nel nuovo rilascio è stata implementata una logica di migrazione avanzata, nella quale, qualora il server sorgente e quello di destinazione utilizzino lo stesso pool di archiviazione, vengono automaticamente applicati snapshot e operazioni di send/receive invece di rsync.
- È stata rivista la logica di identificazione degli ambienti in cloud-init: invece dei nomi degli ambienti, ora viene utilizzato UUID come instance-id.
- È stata aggiunta la supporto per l'intercettazione della chiamata di sistema sched_setscheduler, che consente ai contenitori non privilegiati di modificare le priorità dei processi.
- È stata realizzata l'opzione lvm.thinpool_metadata_size, che gestisce la dimensione dei metadati nel thinpool.
- È stato rivisitato il formato del file con le informazioni di rete per lxc. È stato aggiunto il supporto per i dati sul binding delle interfacce, ponti di rete, VLAN e reti OVN.
- Sono stati elevati 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 è stata aggiunta la supporto per l'architettura unificata dei cgroup (cgroup2), implementati /proc/slabinfo e /sys/devices/system/cpu, utilizzando gli strumenti di meson.
Fonte: opennet.ru
