La comunità Linux Containers ha pubblicato il rilascio degli strumenti per la gestione dei container isolati LXC 6.0, fornendo un runtime adatto sia per l'esecuzione di container con un ambiente di sistema completo, simile a macchine virtuali, sia per eseguire container non privilegiati di applicazioni singole (OCI). LXC è uno strumento di basso livello che opera a livello dei singoli container. Per la gestione centralizzata dei container distribuiti in un cluster di più server, si stanno sviluppando sistemi basati su LXC come Incus e LXD. La versione LXC 6.0 è classificata come rilascio con supporto a lungo termine, con aggiornamenti previsti per i prossimi 5 anni (fino al 2029). Il codice di LXC è scritto in C e distribuito con licenza GPLv2.
Il pacchetto di LXC include la libreria liblxc, un insieme di utility (lxc-create, lxc-start, lxc-stop, lxc-ls, ecc.), modelli per costruire contenitori e un insieme di binding per vari linguaggi di programmazione. L'isolamento avviene 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 degli spazi dei nomi (namespaces). Per limitare le risorse si applicano i cgroups. Per ridurre i privilegi e limitare l'accesso, vengono utilizzate funzionalità del kernel come profili Apparmor e SELinux, politiche Seccomp, Chroots (pivot_root) e capabilities.
Variazioni principali:
- È stata fornita la possibilità di costruire un file eseguibile universale lxc, che combina in un'unica utility tutti i comandi precedentemente distribuiti come utility separate "lxc-*". Per la creazione del file eseguibile unico è disponibile l'opzione "tools-multicall=true", attivandola tutte le vecchie utility separate vengono create come collegamenti simbolici all'utility lxc. La costruzione di un unico file eseguibile consente di ridurre significativamente il consumo di spazio su disco da parte degli strumenti, il che è particolarmente rilevante per i sistemi embedded.
- Nella libreria liblxc è stata aggiunta la funzione set_timeout, che consente di impostare un timeout per qualsiasi operazione di interazione con LXC monitor.
- Nell'interfaccia dei bridge di rete lxcbr0 è attivata per impostazione predefinita supporto IPv6 con indirizzi dalla sottorete IPv6 ULA (Unique Local Address).
- Nell'utility lxc-usernsexec sono state aggiunte le opzioni "-u" e "-g" per modificare gli identificatori dell'utente e del gruppo (UID e GID).
- Nell'utility lxc-checkconfig è stato garantito che la versione venga mostrata solo in presenza del comando lxc-start ed è stata aggiunta l'informazione sul numero massimo consentito per ogni tipo di spazio dei nomi.
- È stata aggiunta la supporto per le immagini dei container nel formato OCI, nelle quali viene utilizzato il file system Squashfs per la compressione delle informazioni.
- Per l'interazione con systemd tramite D-Bus è stata utilizzata una libreria separata libdbus-1 invece di libsystemd.
- È stata interrotta la supporto per il sistema di inizializzazione Upstart.
Allo stesso tempo è stata pubblicata la versione del progetto Incus, nell'ambito del quale la comunità Linux Containers sta sviluppando un fork del sistema di gestione dei container LXD, creato dal vecchio team di sviluppatori che una volta ha creato LXD. Il codice di Incus è scritto in Go ed è distribuito sotto licenza Apache 2.0. Incus 6.0 è posizionato come la prima versione stabile per la quale sarà garantito un lungo ciclo di aggiornamenti (LTS). Tra le novità di Incus 6.0 c'è la possibilità di creare interfacce di rete tramite l'API bridge.external_interfaces, il miglioramento del supporto per l'autenticazione tramite JWT (JSON Web Token), il supporto USB e la visualizzazione di informazioni dettagliate di sistema nel comando "incus info —resources", supporto per il rilascio di LXD 5.21 nell'utilità lxd-to-incus.
Incus e LXD forniscono strumenti per la gestione centralizzata di container e macchine virtuali, distribuiti sia su un singolo host che in un cluster di diversi. server. Il progetto è implementato come un processo in background, che accetta richieste tramite rete attraverso REST API e supporta vari backend di archiviazione (albero di directory, ZFS, Btrfs, LVM), istantanee con cattura dello stato, migrazione live di container funzionanti da una macchina a un'altra e strumenti per la conservazione di immagini container. Come runtime per l'esecuzione dei container, viene utilizzato il toolkit LXC. L'isolamento è realizzato attraverso i meccanismi nativi del kernel Linux (spazi dei nomi, cgroups, Apparmor, SELinux, Seccomp).
La comunità Linux Containers ha curato lo sviluppo di LXD fino a quando Canonical ha deciso di trasformare LXD in un progetto aziendale. L'obiettivo del fork è fornire un'alternativa gestita dalla comunità indipendente al progetto LXD, controllato da Canonical. La creazione di Incus ha anche reso possibile lavorare per risolvere alcuni errori concettuali presenti nello sviluppo di LXD, che in precedenza non potevano essere corretti senza violare la retrocompatibilità.
La società Canonical ha pubblicato una nuova versione del sistema di gestione dei container LXD 5.21.1. Il ramo LXD 5.21 è contrassegnato come LTS e sarà supportato fino a giugno 2029. Il codice aggiunto a LXD dai dipendenti di Canonical è fornito con licenza AGPLv3, ma il codice degli utenti esterni, per il quale Canonical non detiene diritti di proprietà, rimane sotto Apache 2.0. Tra le modifiche funzionali in LXD 5.21.1 si segnala il passaggio del pacchetto snap da LXD ai rami LXC 6.0 e LXCFS 6.0. È stata aggiunta un'estensione all'API chiamata storage_volumes_all e il relativo handler /1.0/storage_volumes per restituire un elenco di tutte le partizioni di archiviazione. È stata aggiunta un'estensione instances_files_modify_permissions per modificare tramite API i diritti di accesso ai file esistenti.
È disponibile il rilascio del file system virtuale LXCFS 6.0, utilizzato per simulare nei container i pseudo-file system /proc e /sys, così come per una rappresentazione virtualizzata di cgroupfs per le distribuzioni che non supportano gli spazi dei nomi cgroup. Nella nuova versione è stata aggiunta l'opzione «—enable-cgroup», che consente di gestire l'attivazione della funzionalità incorporata per creare un albero virtuale croupfs per i container, utilizzando cgroupv1 (attualmente la maggior parte delle distribuzioni supporta gli spazi dei nomi per cgroup forniti dal kernel, quindi l'attivazione per impostazione predefinita di un'alternativa incorporata non ha più senso ed è ora facoltativa). Inoltre, in LXCFS 6.0 è stata interrotta la filtrazione CPU nella generazione del file /sys/devices/system/cpu, a seconda dello stato online/offline.
Fonte: opennet.ru
