Guida Incus Container

Guida Incus Container

Guida Incus Container

Indice

  1. Introduzione: Cos’è Incus
  2. Storia e origini del progetto
  3. A cosa serve e quando utilizzarlo
  4. Incus vs Docker, Podman e LXD
  5. Caratteristiche e funzionalità principali
  6. Installazione di Incus
  7. Inizializzazione e primi passi
  8. Client e Server
  9. Gestione delle Istanze
  10. Storage
  11. Network
  12. Immagini
  13. Progetti
  14. Clustering
  15. API REST
  16. Security
  17. Consigli pratici per l’utilizzo
  18. Pro e Contro
  19. L’importanza della formazione continua

1. Cos’è Incus

Incus è un gestore moderno, sicuro e potente di container di sistema e macchine virtuali che offre un’esperienza unificata per eseguire e gestire sistemi Linux completi all’interno di container o macchine virtuali. A differenza dei container applicativi come Docker, Incus si concentra sui cosiddetti “system container”, che simulano un sistema operativo completo con tutti i suoi servizi, inclusi systemd, SSH e altri demoni di sistema.

Incus supporta immagini per un gran numero di distribuzioni Linux ed è costruito attorno a una potente API REST. La soluzione scala da una singola istanza su una macchina fino a un cluster in un intero rack di datacenter, rendendola adatta sia per ambienti di sviluppo che di produzione.

2. Storia e origini del progetto – Guida Incus Container

Incus, il cui nome deriva dalla nuvola Cumulonimbus incus o nuvola a incudine, è nato come fork comunitario di LXD di Canonical in seguito all’acquisizione del progetto LXD da parte di Canonical dalla comunità Linux Containers. Questa decisione, presa nel luglio 2023, ha generato reazioni contrastanti nella comunità open source.

Il progetto è stato poi adottato dalla comunità Linux Containers, riprendendo il posto lasciato vuoto dalla partenza di LXD. Il fork è stato avviato dallo sviluppatore SUSE Aleksa Sarai, con il supporto di Stéphane Graber, ex lead engineer di LXD presso Canonical. Incus è un vero progetto comunitario open source, privo di CLA (Contributor License Agreement) e rilasciato sotto licenza Apache 2.0, mantenuto dallo stesso team di sviluppatori che ha creato originariamente LXD.

La versione LTS corrente è Incus 6.0 ed è supportata fino a giugno 2029. Le release feature vengono pubblicate circa ogni mese con nuove funzionalità e correzioni di bug.

3. A cosa serve e quando utilizzarlo – Guida Incus Container

Incus è progettato per chi necessita di eseguire sistemi operativi completi in ambienti isolati ma performanti. A differenza dei container applicativi che eseguono singole applicazioni, i system container di Incus forniscono un ambiente completo simile a una macchina virtuale, ma con le performance quasi native dei container.

Dovresti considerare l’utilizzo di Incus se vuoi containerizzare diversi ambienti o eseguire macchine virtuali, o in generale gestire la tua infrastruttura in modo economicamente vantaggioso. È particolarmente adatto per:

  • Ambienti di sviluppo e testing che richiedono sistemi operativi completi
  • Hosting multi-tenant dove ogni utente necessita di un sistema isolato
  • Migrazione da macchine virtuali tradizionali con minore overhead
  • Laboratori di formazione e sandbox
  • Infrastrutture private cloud

4. Incus vs Docker, Podman e LXD – Guida Incus Container

La differenza fondamentale tra Incus e Docker/Podman sta nel tipo di container gestito. Docker è un container a livello applicativo che tipicamente avvia ed esegue una singola applicazione come Apache o un server MySQL, mentre Incus si concentra principalmente sui container di sistema, fornendo un ambiente completo simile a una macchina virtuale.

I container applicativi sono transitori, non vengono mai aggiornati e memorizzano tutti i dati in altri container o su server a cui accedono tramite rete, mentre i system container hanno storage locale, vengono aggiornati e si comportano come istanze di un sistema operativo Linux completo.

Puoi effettivamente eseguire container Docker all’interno di un container di sistema Incus, ma non viceversa. Questo rende Incus particolarmente utile per costruire ambienti di sviluppo o per troubleshooting.

Per quanto riguarda LXD, Incus e LXD presentano diverse differenze: LXD usa il gruppo “lxd” mentre Incus utilizza i gruppi “incus” e “incus-admin”, LXD usa il bridge di rete predefinito lxdbr0 mentre Incus usa incusbr0, e LXD usa il suffisso di dominio .lxd per i container mentre Incus usa .incus per impostazione predefinita. Incus ha inoltre rimosso diverse dipendenze da tecnologie Ubuntu e Canonical.

5. Caratteristiche e funzionalità principali – Guida Incus Container

Le principali caratteristiche di Incus includono:

System Container e Virtual Machine: Incus supporta sia container di sistema (basati su LXC) che macchine virtuali (basate su QEMU), gestendoli attraverso la stessa interfaccia unificata.

API REST: Tutta la comunicazione tra Incus e i suoi client avviene tramite una API RESTful su HTTP, incapsulata tramite TLS per operazioni remote o un socket Unix per operazioni locali.

Clustering: Incus può operare in modalità cluster distribuendo il carico di lavoro su più server che condividono lo stesso database distribuito.

Storage flessibile: Supporta molteplici driver di storage inclusi ZFS, Btrfs, LVM, Ceph e directory semplici.

Network avanzato: Offre supporto per bridge, OVN (Open Virtual Network), macvlan, SR-IOV e configurazioni di rete fisica.

Gestione immagini: Sistema integrato per scaricare, gestire e creare immagini di container e VM da server remoti.

Progetti: Permette l’isolamento logico delle risorse attraverso i progetti.

6. Installazione di Incus

L’installazione di Incus varia in base alla distribuzione Linux utilizzata. Ecco alcuni esempi:

Su Debian/Ubuntu (tramite repository ufficiali):

apt install incus

Su sistemi Debian, l’esecuzione di apt install incus installerà Incus con tutte le dipendenze necessarie per eseguire container e macchine virtuali. Se desideri eseguire solo container in Incus, puoi eseguire solo apt install incus-base.

Su Arch Linux:

pacman -S incus
systemctl enable incus.socket

Su Fedora:

dnf install incus

Dopo l’installazione di Incus, assicurati di avere un gruppo incus-admin sul tuo sistema. Gli utenti in questo gruppo possono interagire con Incus.

Per aggiungere il tuo utente al gruppo:

sudo usermod -aG incus-admin nomeutente
newgrp incus-admin

7. Inizializzazione e primi passi – Guida Incus Container

Prima di poter utilizzare Incus, è necessario inizializzarlo. Per avviare il processo di configurazione interattiva, esegui il comando incus admin init:

incus admin init

Il processo di inizializzazione ti guiderà attraverso diverse configurazioni:

  • Clustering: Puoi connettere il server a un cluster esistente o crearne uno nuovo
  • Networking: Puoi lasciare che Incus crei un nuovo bridge (consigliato) o utilizzare un bridge o interfaccia di rete esistente
  • Storage pools: Per scopi di test puoi creare un pool di storage loop-backed, ma per uso produttivo dovresti utilizzare una partizione vuota o un disco completo

Una volta completata l’inizializzazione, puoi verificare che Incus sia funzionante:

incus version
incus info

8. Client e Server

Incus implementa un paradigma server-client, dove le operazioni vengono eseguite da incusd che agisce come server Incus, solitamente in esecuzione in background, e incus come interfaccia a riga di comando per comunicare con il server Incus.

Il server (incusd) gestisce tutte le operazioni relative a container, VM, storage e networking. Il client (incus) comunica con il server tramite l’API REST, sia localmente tramite socket Unix che remotamente tramite TLS.

È possibile gestire server Incus remoti aggiungendoli al client:

incus remote add nome-server https://indirizzo-server:8443

9. Gestione delle Istanze

Le istanze in Incus possono essere container di sistema o macchine virtuali. Ecco alcuni comandi base:

Creare e avviare un container:

incus launch images:ubuntu/22.04 mio-container

Creare una VM:

incus launch images:ubuntu/22.04 mia-vm --vm

Elencare le istanze:

incus list

Fermare un’istanza:

incus stop mio-container

Eliminare un’istanza:

incus delete mio-container

Eseguire comandi in un’istanza:

incus exec mio-container -- apt update
incus exec mio-container -- bash

Creare snapshot:

incus snapshot mio-container snapshot-nome

Limitare risorse:

incus launch images:debian/12 limited --config limits.cpu=2 --config limits.memory=2GiB

10. Storage

Tutti i membri di un cluster devono avere pool di storage identici. Le uniche chiavi di configurazione che possono differire tra i pool su membri diversi sono source, size, zfs.pool_name, lvm.thinpool_name e lvm.vg_name.

Creare un pool di storage:

incus storage create pool-locale dir source=/data/incus

Per pool ZFS:

incus storage create pool-zfs zfs source=tank/incus

Elencare i pool di storage:

incus storage list

Creare volumi personalizzati:

incus storage volume create pool-locale mio-volume

11. Network

Incus offre diverse opzioni di networking. Il bridge predefinito (incusbr0) viene creato automaticamente durante l’inizializzazione.

Creare un nuovo bridge:

incus network create br-custom ipv4.address=10.0.1.1/24 ipv4.nat=true

Elencare le reti:

incus network list

Collegare un’istanza a una rete:

incus config device add mio-container eth0 nic network=br-custom

12. Immagini

Incus utilizza immagini per creare nuove istanze. Le immagini possono essere scaricate da server remoti o create localmente.

Elencare server di immagini disponibili:

incus remote list

Cercare immagini disponibili:

incus image list images: | less

Scaricare un’immagine:

incus image copy images:alpine/3.18 local: --alias alpine-3.18

Elencare immagini locali:

incus image list

13. Progetti

I progetti in Incus permettono di isolare logicamente le risorse e le configurazioni.

Creare un nuovo progetto:

incus project create progetto-dev

Cambiare progetto:

incus project switch progetto-dev

Elencare progetti:

incus project list

14. Clustering

Un cluster Incus è composto da un server bootstrap e almeno altri due membri del cluster, memorizzando il suo stato in un database distribuito Cowsql replicato usando l’algoritmo Raft.

Sebbene sia possibile creare un cluster con solo due membri, è fortemente raccomandato che il numero di membri del cluster sia almeno tre, con questa configurazione il cluster può sopravvivere alla perdita di almeno un membro e stabilire comunque il quorum per il suo stato distribuito.

Creare un cluster:

# Sul primo nodo (bootstrap)
incus admin init
# Selezionare "yes" per clustering e "new cluster"

# Sui nodi successivi
incus admin init
# Selezionare "yes" per clustering e "join existing cluster"

Visualizzare lo stato del cluster:

incus cluster list

15. API REST

Incus ha una specifica Swagger auto-generata che descrive i suoi endpoint API. L’API può essere interrogata facilmente utilizzando il comando incus query:

incus query /1.0
incus query /1.0/instances

Per operazioni remote, è necessario configurare l’autenticazione TLS e esporre il server sulla rete:

incus config set core.https_address "[::]:8443"

L’API REST permette l’integrazione con strumenti di terze parti e automazione avanzata dell’infrastruttura.

16. Security

La sicurezza di un’installazione Incus richiede di mantenere il sistema operativo aggiornato, utilizzare solo versioni supportate di Incus, restringere l’accesso al daemon e all’API remota, non utilizzare container privilegiati a meno che non sia necessario e configurare le interfacce di rete in modo sicuro.

L’accesso locale a Incus attraverso il socket Unix garantisce sempre accesso completo a Incus, inclusa la possibilità di collegare percorsi del filesystem o dispositivi a qualsiasi istanza e modificare le funzionalità di sicurezza su qualsiasi istanza, quindi dovresti concedere tale accesso solo agli utenti di cui ti fideresti con accesso root al tuo sistema.

Best practice di sicurezza:

  • Utilizzare container non privilegiati quando possibile
  • Limitare l’accesso al gruppo incus-admin
  • Configurare firewall appropriati
  • Utilizzare TLS per connessioni remote
  • Mantenere Incus e il sistema operativo aggiornati
  • Implementare network isolation tra progetti

17. Consigli pratici per l’utilizzo

1. Usa profili per standardizzare le configurazioni: Invece di configurare ogni istanza singolarmente, crea profili riutilizzabili:

incus profile create webserver
incus profile edit webserver
# Aggiungi configurazioni comuni

2. Automatizza con preseed: Per deployment ripetibili, utilizza il file preseed YAML con incus admin init --preseed.

3. Monitora le risorse: Utilizza incus info nome-istanza per monitorare l’utilizzo di risorse.

4. Backup regolari: Crea snapshot prima di modifiche importanti e esporta le istanze critiche:

incus export mio-container backup.tar.gz

5. Organizza con progetti: Utilizza i progetti per separare ambienti (dev, staging, prod).

6. Storage pool dedicati: Per ambienti produttivi, utilizza ZFS o Btrfs per funzionalità avanzate come snapshot e compressione.

7. Documentazione: Incus è molto ben documentato su linuxcontainers.org – consulta regolarmente la documentazione ufficiale.

18. Pro e Contro

PROCONTRO
System container performanti quasi come nativeCurva di apprendimento iniziale per chi viene da Docker
Gestione unificata di container e VMMeno diffuso di Docker/Podman nell’ecosistema
API REST potente e ben documentataCommunity più piccola rispetto a Docker
Clustering integratoMeno immagini preconfigurate rispetto a Docker Hub
Progetto comunitario open source senza CLADocumentazione meno abbondante di tutorial terze parti
Supporto LTS a lungo termine (5 anni)Richiede più risorse per system container rispetto a app container
Storage e networking avanzatiConfigurazione iniziale più complessa rispetto a Docker
Migrazione facile da LXDNecessita di competenze sistemistiche più approfondite
Ideale per ambienti multi-tenantMeno integrazione nativa con orchestratori come Kubernetes

19. L’importanza della formazione continua: i corsi di Innovaformazione

Nel panorama IT in continua evoluzione, tecnologie come Incus rappresentano opportunità significative per migliorare l’efficienza infrastrutturale e ridurre i costi operativi. Tuttavia, l’adozione efficace di nuove tecnologie richiede che i team IT e DevOps siano adeguatamente formati e aggiornati.

La formazione continua del team IT e di DevOps è l’unico modo per tenere aggiornato il personale IT e per assicurare una ottima qualità dei progetti, evitando errori che spesso sono causa di ritardi, penali e danni con i clienti. Un team non formato su tecnologie emergenti come Incus rischia di implementare soluzioni sub-ottimali, incorrere in problemi di sicurezza o semplicemente non sfruttare appieno le potenzialità della piattaforma.

Innovaformazione.net è il partner ideale per la formazione del tuo team IT. Con un vasto catalogo corsi disponibile sul sito QUI, Innovaformazione offre formazione specializzata su tutte le principali tecnologie DevOps e infrastrutturali.

Su richiesta, Innovaformazione può attivare un corso dedicato su Incus Container per le aziende, personalizzato sulle specifiche esigenze del vostro team. Il corso viene erogato in modalità online in classe virtuale con calendario da concordare, permettendo la massima flessibilità organizzativa senza sacrificare la qualità dell’interazione con i docenti.

Per le aziende aderenti a Fondimpresa o altri fondi interprofessionali, Innovaformazione può gestire l’intero piano formativo finanziato, dalla presentazione del piano fino alla rendicontazione, eliminando gli oneri burocratici e massimizzando l’accesso ai finanziamenti disponibili per la formazione.

I corsi su Incus Container coprono tutti gli aspetti della tecnologia: dall’installazione e configurazione base, alla gestione avanzata di cluster, storage e networking, fino all’integrazione con pipeline CI/CD e best practice di sicurezza. I docenti sono professionisti certificati con esperienza pratica nell’implementazione di soluzioni containerizzate in ambienti enterprise.

Contattaci per maggiori informazioni e per costruire insieme il percorso formativo più adatto alle esigenze del tuo team:

Email: info@innovaformazione.net
Telefono: 3471012275 (Dario Carrassi)

Investire nella formazione significa investire nella qualità dei progetti, nella soddisfazione dei clienti e nella crescita professionale del team. Non lasciare che il gap di competenze rallenti l’innovazione della tua organizzazione.

(fonte) (fonte) (fonte) (fonte)

Vuoi essere ricontattato? Lasciaci il tuo numero telefonico e la tua email, ti richiameremo nelle 24h:

    Ti potrebbe interessare

    Articoli correlati