È stato presentato il primo rilascio del progetto Incus, nell'ambito del quale la comunità Linux Containers sviluppa un fork del sistema di gestione dei contenitori LXD, creato dall'ormai ex team di sviluppatori che ha realizzato LXD. Il codice di Incus è scritto in Go e distribuito con licenza Apache 2.0.
Ricordiamo che la comunità Linux Containers ha gestito lo sviluppo di LXD fino a quando la Canonical ha deciso di sviluppare LXD separatamente come progetto aziendale. L'obiettivo del fork è fornire un'alternativa gestita dalla comunità indipendente al progetto LXD, sotto il controllo della Canonical. Nell'ambito del progetto Incus si prevede anche di correggere alcune incongruenze concettuali che erano state introdotte nello sviluppo di LXD e che non potevano essere corrette in precedenza senza compromettere la retrocompatibilità.
Incus fornisce strumenti per la gestione centralizzata di container e macchine virtuali, distribuiti sia su un singolo host che in un cluster di più nodi. server. Il progetto è realizzato come un processo in background, che riceve richieste su rete tramite API REST e supporta diversi backend di archiviazione (albero di directory, ZFS, Btrfs, LVM), snapshot con cattura dello stato, migrazione live di container in esecuzione da una macchina all'altra e strumenti per la memorizzazione delle immagini dei container. Come runtime per l'esecuzione dei container viene utilizzato l'insieme di strumenti LXC, che include la libreria liblxc, un insieme di utility (lxc-create, lxc-start, lxc-stop, lxc-ls, ecc.), modelli per la costruzione di container e un insieme di binding per diversi linguaggi di programmazione. L'isolamento è effettuato mediante i meccanismi standard del kernel Linux (spazi dei nomi, cgroups, Apparmor, SELinux, Seccomp).
In termini di funzionalità, il primo rilascio di Incus corrisponde all'aggiornamento recentemente rilasciato di LXD 5.18 ed è focalizzato principalmente sulla ridenominazione e riorganizzazione della base di codice, oltre alla rimozione delle funzionalità obsolete. Nella nuova versione si notano anche modifiche specifiche per Incus nell'interfaccia della riga di comando e nell'API, che non è stato possibile includere in LXD a causa delle esigenze di mantenimento della retrocompatibilità. In futuro, gli sviluppatori programmano di trasferire dalla base di codice di LXD miglioramenti e correzioni utili, aggiungendo anche le loro innovazioni originali, che, se desiderato, possono essere portate in LXD dall'azienda Canonical.
Le modifiche più significative:
- È stato effettuato il passaggio al motore SQL incorporato Cowsql - un fork di Dqlite, creato dall'autore originale di Dqlite per gli stessi motivi che hanno portato a Incus (uscita dall'influenza di Canonical). Cowsql è compatibile con SQLite, supporta la replica dei dati, il ripristino automatico dopo i guasti e assicura la resilienza operativa distribuendo i gestori su più nodi.
- È stato aggiunto il comando «incus snapshot» nell'interfaccia della riga di comando per gestire i snapshot (sostituisce i singoli comandi lxc snapshot e restore). Tramite «incus snapshot» è possibile avviare operazioni di creazione, cancellazione, visualizzazione dell'elenco, rinominazione e ripristino di uno snapshot.
- È stata modificata la logica di gestione dei comandi «incus config trust add» e «incus cluster add», che ora accettano un argomento con il nome e restituiscono un token corretto. Le operazioni relative al certificato tramite il comando «incus config trust add» sono state trasferite in un comando separato «incus config trust add-certificate».
- È stato aggiunto il comando «incus admin», liberando l'amministratore dalla necessità di fare riferimento direttamente ai comandi lxc e lxd. Sono disponibili i seguenti sottocomandi:
- incus admin cluster
- incus admin init
- incus admin recover
- incus admin shutdown
- incus admin waitready
- Sono stati rimossi i punti di accesso obsoleti all'API /1.0/containers e /1.0/virtual-machines, sostituiti da /1.0/instances.
- Dispositivo /dev/lxd sostituito con /dev/incus, le menzioni nel codice di lxd sono state cambiate in incus.
- Tipo configurazione del server sostituito con «map[string]string». È stato dismesso il metodo di autenticazione obsoleto core.trust_password (sostituito dall'autenticazione basata su token), che impediva l'uso del tipo «map[string]string».
- Sono state rimosse le funzioni obsolete *Container dall'API, sostituite dalle funzioni *Instance dopo l'implementazione della gestione delle macchine virtuali (ad esempio, invece di CreateContainer, utilizzare CreateInstance).
- È stato aggiunto l'utilità lxd-to-incus per la migrazione da LXD a Incus (supporta la conversione automatica dei file di configurazione, a partire dalla versione LXD 4.0 fino alla 5.18). Il trasferimento dei cluster non è ancora supportato.
- La versione minima supportata del linguaggio Go è stata dichiarata nella versione 1.20.
- È stata interrotta la supporto per alcune funzionalità legate a Ubuntu o dipendenti da software obsoleto o non supportato:
- Rimossa la supporto per i wrapper Ubuntu Fan (bridge.mode, fan.overlay_subnet, fan.underlay_subnet, fan.type), che dipendono da patch del kernel utilizzate solo in Ubuntu.
- Rimossa la supporto per shiftfs, legata ai pacchetti del kernel per la virtual file system di Ubuntu per mappare i punti di montaggio agli spazi dei nomi degli identificatori utente (user namespace).
- Rimossa la supporto per il sistema di autenticazione Candid, specifico per i prodotti Canonical.
- Rimossa la supporto per l'implementazione proprietaria del meccanismo di autenticazione RBAC (Role Based Access Control), creato da Canonical basato su Macaroons e Candid.
- Rimossi i componenti per l'integrazione con MAAS (Metal-as-a-Service), uno strumento per il rapido dispiegamento delle configurazioni di Ubuntu.
- Rimossa la concezione di accesso al server tramite una password di fiducia (core.trust_password).
Fonte: opennet.ru
