È stato presentato il primo rilascio del progetto Incus, un fork del sistema di gestione dei contenitori LXD sviluppato dalla comunità Linux Containers, creato dal vecchio team di sviluppatori che ha originariamente creato LXD. Il codice di Incus è scritto in linguaggio Go e distribuito sotto licenza Apache 2.0.
Ricordiamo che la comunità Linux Containers ha supervisionato lo sviluppo di LXD fino a quando Canonical ha deciso di sviluppare LXD separatamente come progetto aziendale. L'obiettivo del fork è fornire un'alternativa gestita da una comunità indipendente al progetto LXD, che è sotto il controllo dell'azienda Canonical. All'interno del progetto Incus si prevede anche di correggere alcuni errori concettuali che erano stati commessi nello sviluppo di LXD, i quali in precedenza non potevano essere corretti senza compromettere la retrocompatibilità.
Incus offre strumenti per la gestione centralizzata di contenitori e macchine virtuali, distribuiti sia su un singolo host che in un cluster di più host. server. Il progetto è realizzato come un processo in background che riceve richieste tramite REST API e supporta diversi backend di archiviazione (albero delle directory, ZFS, Btrfs, LVM), snapshot dello stato, migrazione live di contenitori attivi da una macchina all'altra e strumenti per la memorizzazione delle immagini dei contenitori. Per l'esecuzione dei contenitori, viene utilizzato il toolkit LXC, che include la libreria liblxc, un insieme di utility (lxc-create, lxc-start, lxc-stop, lxc-ls, ecc.), modelli per la creazione di contenitori e un set di binding per diversi linguaggi di programmazione. L'isolamento è garantito tramite i meccanismi standard del kernel Linux (namespace, cgroups, AppArmor, SELinux, Seccomp).
La prima versione di Incus è focalizzata principalmente sulla ridenominazione e riorganizzazione del codice, in linea con il recente aggiornamento di LXD 5.18, e include anche la rimozione di funzionalità obsolete. Questa nuova versione presenta modifiche specifiche per Incus nell'interfaccia della riga di comando e nell'API, impossibili da integrare in LXD a causa dei requisiti di retrocompatibilità. In futuro, gli sviluppatori pianificano di trasferire miglioramenti e correzioni utili dalla base di codice di LXD, aggiungendo anche le proprie innovazioni originali, che se desiderato dalla Canonical, potrebbero essere portate in LXD.
Le modifiche più significative:
- È stato effettuato il passaggio al motore SQL integrato Cowsql — un fork di Dqlite, creato dall'autore originale di Dqlite per le stesse ragioni di Incus (uscita dall'influenza di Canonical). Cowsql è compatibile con SQLite, supporta la replicazione dei dati, il ripristino automatico dopo guasti e garantisce la resilienza distribuendo i gestori su più nodi.
- Nel'interfaccia della riga di comando è stato aggiunto il comando «incus snapshot» per gestire gli snapshot (sostituisce i comandi lxc snapshot e restore separati). Attraverso «incus snapshot» è possibile avviare operazioni di creazione, eliminazione, visualizzazione, rinomina 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 un nome e restituiscono un token corretto. Le operazioni con il certificato attraverso il comando «incus config trust add» sono state trasferite a un comando separato «incus config trust add-certificate».
- È stato aggiunto il comando «incus admin», eliminando la necessità per l'amministratore di accedere 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.
- Il dispositivo /dev/lxd è stato sostituito con /dev/incus, le menzioni nel codice lxd sono state sostituite con incus.
- Tipo configurazione del server sostituito da «map[string]string». È stato eliminato il metodo di autenticazione obsoleto core.trust_password (sostituito da un'autenticazione basata su token), che ostacolava l'utilizzo del tipo «map[string]string».
- Le funzionalità obsolete *Container sono state rimosse dall'API, sostituite dalle funzioni *Instance che gestiscono le macchine virtuali (ad esempio, al posto di CreateContainer è consigliato utilizzare CreateInstance).
- È stata aggiunta l'utilità lxd-to-incus per la migrazione da LXD a Incus (la conversione automatica dei file di configurazione è supportata a partire dalla versione LXD 4.0 fino alla 5.18). Attualmente non è supportata la migrazione dei cluster.
- La versione minima supportata del linguaggio Go è stata dichiarata 1.20.
- È stata interrotta la supporto per alcune funzionalità legate a Ubuntu o dipendenti da software obsoleto o non supportato:
- Rimossa la supporto per le interfacce Ubuntu Fan (bridge.mode, fan.overlay_subnet, fan.underlay_subnet, fan.type), che dipendono da patch del kernel utilizzate esclusivamente in Ubuntu.
- Rimossa la supporto per shiftfs, collegato a pacchetti con kernel per la virtual file system di Ubuntu per associare i punti di montaggio con gli 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), creata da Canonical sulla base di Macaroons e Candid.
- Rimossi i componenti per l'integrazione con MAAS (Metal-as-a-Service), uno strumento per il rapido deployment delle configurazioni di Ubuntu.
- Eliminato il concetto di accesso al server tramite una password affidabile (core.trust_password).
Fonte: opennet.ru
