Aller au contenu

Incus

Dans cet article :

Information :

Incus est un gestionnaire de conteneurs système et de machines virtuelles open-source. C'est une dérivation de LXD et fournit un outil simple mais puissant pour gérer des conteneurs Linux et des machines virtuelles sur une plateforme unique.

Incus. Fonctionnalités Clés

  • Gestion des Conteneurs et VM : Incus permet d'exécuter des conteneurs système Linux et des machines virtuelles QEMU/KVM complètes à travers une seule interface.
  • Isolation du Processus : les conteneurs fonctionnent dans un environnement isolé avec leurs propres systèmes de fichiers, interfaces réseau et processus.
  • Capacités Réseau : support intégré pour divers types de réseaux - ponts, NAT, VLANs, réseaux en overlay pour les conteneurs.
  • Gestion du Stockage : système flexible de pools de stockage supportant différents backends - dir, btrfs, ZFS, LVM.
  • Snapshots et Migration : création de snapshots de l'état des conteneurs, migration en direct entre hôtes sans arrêter les services.
  • Profils de Configuration : profils réutilisables pour le déploiement rapide de conteneurs avec des paramètres prédéfinis.
  • Limitation des Ressources : contrôle précis du CPU, de la mémoire, des opérations d'E/S disque et de la bande passante réseau pour chaque conteneur.
  • API REST : API HTTP complète pour l'automatisation et l'intégration avec des systèmes externes.
  • Interface Web : panneau de gestion web intégré pour le contrôle visuel de l'infrastructure.
  • Bibliothèque d'Images : accès à une vaste collection d'images prêtes à l'emploi de diverses distributions Linux.
  • Clustering : possibilité de combiner plusieurs hôtes en un seul cluster pour la gestion distribuée.

Fonctionnalités de Déploiement

ID Système d'exploitation compatible VM BM VGPU GPU Min CPU (Cœurs) Min RAM (Go) Min HDD/SSD (Go) Actif
234 Debian 13 + + + + 2 2 50 COMMANDER

Chemins et Fichiers Principaux d'Incus :

  • Fichier de Configuration Principal : /etc/default/incus
  • Répertoire des Données : /var/lib/incus
  • Pools de Stockage : /var/lib/incus/storage-pools/
  • Conteneurs : /var/lib/incus/containers/
  • Images : /var/lib/incus/images/
  • Fichier de Journalisation : /var/log/incus/incusd.log
  • Services Système : /usr/lib/systemd/system/incus*.service
  • Configuration Sysctl : /etc/sysctl.d/50-incus.conf
  • Configuration Utilisateur : /root/.config/incus/

Remarque :

Sauf indication contraire, nous installons par défaut la dernière version du logiciel à partir du site des développeurs ou des dépôts de l'OS.

Premiers Pas Après le Déploiement d'Incus

Après le paiement, une notification par e-mail sera envoyée à l'adresse spécifiée lors de l'inscription indiquant que le serveur est prêt à fonctionner. Elle inclura l'adresse IP du VPS et les identifiants d'accès. Les clients de notre entreprise gèrent l'équipement via le panneau de gestion de serveur et l'APIInvapi.

Les données d'authentification peuvent être trouvées soit dans l'onglet Info >> Tags du panneau de gestion du serveur, soit dans l'e-mail envoyé :

  • Lien pour Accéder à l'Interface Web Incus : dans l'étiquette webpanel (port 8443, HTTPS)

Important :

Pour accéder à l'interface web, vous devez utiliser HTTPS et accepter le certificat auto-signé dans votre navigateur.

Lors de la première connexion à l'interface web d'Incus, le navigateur avertira d'une connexion non sécurisée en raison du certificat auto-signé. Il est nécessaire d'accepter le certificat pour continuer :

Après avoir accepté le certificat, la page de connexion s'ouvrira. Cliquez sur le bouton Login with TLS pour démarrer le processus d'authentification :

Le système vous redirigera vers la page pour ajouter un certificat existant :

Sélectionnez l'onglet Trust token et suivez les instructions :

  1. Dans le terminal du serveur, exécutez la commande pour générer un jeton :

    incus config trust add myclient
    

  2. Le système va générer un jeton qui doit être copié :

  3. Collez le jeton obtenu dans le champ de texte correspondant sur la page d'authentification et cliquez sur Import.

Après une authentification réussie, la page principale de l'interface web avec la liste des instances s'ouvrira.

Création d'un Nouveau Conteneur via l'Interface Web

Pour créer un nouveau conteneur, cliquez sur le bouton Create instance dans le coin supérieur droit de l'interface :

Un formulaire de création d'instance avec plusieurs sections de configuration s'ouvrira. Pour sélectionner une image de base, cliquez sur le bouton Browse images. Une fenêtre de sélection des images avec des filtres par distribution, version, variante, architecture et type s'ouvrira :

Les sections de configuration suivantes sont disponibles :

  • Main configuration — paramètres de base du conteneur : nom, description, type d'instance (conteneur ou machine virtuelle), image de base et profils attribués ;
  • Devices — gestion des appareils du conteneur :
  • Disk — configuration de l'appareil disque et point de montage ;
  • Network — configuration de l'interface réseau ;
  • GPU — connexion d'accélérateurs graphiques ;
  • Proxy — configuration de la redirection de port entre hôte et conteneur ;
  • Other — types d'appareils supplémentaires ;
  • Resource limits — limitation des ressources : processeur (CPU), RAM, opérations d'E/S disque ;
  • Security policies — politiques de sécurité : configuration de l'isolation, privilèges et profils de sécurité (AppArmor, SELinux) ;
  • Snapshots — gestion des snapshots de l'état du conteneur pour sauvegarde et restauration ;
  • Migration — paramètres de migration de conteneur entre hôtes ;
  • Boot — paramètres de démarrage : ordre des périphériques de démarrage, démarrage automatique au démarrage du système ;
  • Cloud init — configuration de l'initialisation automatique du conteneur via cloud-init (utilisateurs, réseau, paquets, scripts).

Sélectionnez l'image souhaitée en cliquant sur le bouton Select à côté :

Après avoir sélectionné une image, remplissez les paramètres de base :

  • Instance name — nom du conteneur ;
  • Description — description (optionnel) ;
  • Instance type — type d'instance (Container ou Virtual Machine) ;
  • Profiles — profils de configuration.

Pour démarrer le conteneur immédiatement après la création, cliquez sur Create and start. Pour créer sans démarrer, utilisez le bouton Create.

Surveillance du Statut des Conteneurs

Pendant le déploiement du conteneur, le progrès de téléchargement de l'image est affiché. Le statut "Setting up" avec indication du progrès de téléchargement montre la progression actuelle de création de l'instance. Après installation terminée, le statut changera en "Running" avec un indicateur vert :

Gestion du Service

Vérification du Statut :

systemctl status incus

Redémarrage du Service :

systemctl restart incus

Arrêt du Service :

systemctl stop incus

Démarrage du Service :

systemctl start incus

Affichage des Journaux :

journalctl -u incus -f
tail -f /var/log/incus/incusd.log

Configuration Initiale de l'Infrastructure

Après le déploiement du serveur, il est recommandé d'effectuer la configuration initiale de l'infrastructure Incus.

Création d'un Pool de Stockage

Un pool de stockage définit où les données des conteneurs seront stockées :

incus storage create default dir source=/var/lib/incus/storage-pools/default

Vérification des pools de stockage créés :

incus storage list

Pour afficher des informations détaillées sur un pool :

incus storage show default

Configuration Réseau

Création d'un pont NAT pour les conteneurs avec assignation automatique d'adresse IPv4 :

incus network create incusbr0 ipv4.address=auto ipv6.address=none

Vérification des paramètres réseau :

incus network list

Affichage de la configuration du réseau :

incus network show incusbr0

Configuration du Profil par Défaut

Le profil default définit la configuration de base pour les nouveaux conteneurs. Ajout d'un disque racine au profil :

incus profile device add default root disk path=/ pool=default

Ajout d'une interface réseau au profil :

incus profile device add default eth0 nic network=incusbr0

Vérification de la configuration du profil :

incus profile show default

Création et Gestion des Conteneurs

Création d'un Conteneur

Exemple de création d'un conteneur Debian 12 avec des limites de ressources :

incus launch images:debian/12 deb12 --profile default \
  -c limits.cpu=2 -c limits.memory=2GiB

Paramètres de la commande :

  • images:debian/12 - image du dépôt public
  • deb12 - nom du conteneur
  • --profile default - utilisation du profil par défaut
  • -c limits.cpu=2 - limitation à 2 cœurs CPU
  • -c limits.memory=2GiB - limitation de mémoire de 2 Go

Affichage des Conteneurs

Liste de toutes les instances :

incus list

La sortie contiendra des informations sur le statut, les adresses IP et le type de chaque conteneur.

Gestion de l'État des Conteneurs

Démarrage d'un conteneur :

incus start <name>

Arrêt d'un conteneur :

incus stop <name>

Redémarrage d'un conteneur :

incus restart <name>

Suppression d'un conteneur (nécessite un arrêt) :

incus delete <name>

Suppression forcée d'un conteneur en cours d'exécution :

incus delete <name> --force

Accès au Conteneur

Connexion via bash :

incus exec deb12 -- bash

Connexion à la console TTY :

incus console deb12

Pour quitter la console, utilisez la combinaison de touches Ctrl+a q.

Redirection de Ports

Pour accéder aux services à l'intérieur d'un conteneur depuis un réseau externe, le mécanisme de redirection de ports via un dispositif proxy est utilisé :

incus config device add deb12 web proxy \
  listen=tcp:0.0.0.0:8080 connect=tcp:127.0.0.1:80

Cette commande redirige le port 8080 de l'hôte vers le port 80 du conteneur.

Exemple pour plusieurs ports :

HTTP :

incus config device add mycontainer http proxy \
  listen=tcp:0.0.0.0:80 connect=tcp:127.0.0.1:80

HTTPS :

incus config device add mycontainer https proxy \
  listen=tcp:0.0.0.0:443 connect=tcp:127.0.0.1:443

SSH :

incus config device add mycontainer ssh proxy \
  listen=tcp:0.0.0.0:2222 connect=tcp:127.0.0.1:22

Gestion de la Configuration du Conteneur

Affichage de la Configuration

Affichage de la configuration complète et développée d'un conteneur :

incus config show <name> --expanded

Affichage de la configuration de base sans profils :

incus config show <name>

Modification des Paramètres

Définition de paramètres de configuration :

Limitation CPU :

incus config set <name> limits.cpu=4

Limitation Mémoire :

incus config set <name> limits.memory=4GiB

Limitation E/S Disque :

incus config set <name> limits.disk.priority=5

Démarrage Automatique du Conteneur :

incus config set <name> boot.autostart=true

Ajout d'Appareils

Syntaxe générale d'ajout d'appareils :

incus config device add <name> <device-name> <type> key=value

Exemples :

Ajout d'un disque supplémentaire :

incus config device add mycontainer data disk \
  source=/data/mycontainer pool=default

Ajout d'une interface réseau supplémentaire :

incus config device add mycontainer eth1 nic \
  network=incusbr1 name=eth1

Montage d'un répertoire hôte dans un conteneur :

incus config device add mycontainer shared disk \
  source=/host/path path=/container/path

Suppression d'un appareil :

incus config device remove <name> <device-name>

Travail avec les Snapshots et la Migration

Création de Snapshots

Les snapshots permettent de sauvegarder l'état du conteneur pour une restauration ultérieure :

incus snapshot <name> <snapshot-name>

Exemple :

incus snapshot deb12 before-update

Liste des snapshots du conteneur :

incus info <name>

Restauration depuis un Snapshot

incus restore <name> <snapshot-name>

Exemple :

incus restore deb12 before-update

Suppression d'un snapshot :

incus delete <name>/<snapshot-name>

Renommage et Copie

Renommage d'un conteneur :

incus move <name> <newname>

Copie d'un conteneur sur le même hôte :

incus copy <name> <newname>

Copie d'un conteneur vers un autre hôte Incus :

incus copy <name> <remote>:<newname>

Pour travailler avec des hôtes distants, il est nécessaire d'ajouter au préalable un remote :

incus remote add myremote https://remote-ip:8443

Gestion des Images

Affichage des Images

Liste des images locales :

incus image list

Liste des images dans un dépôt distant :

incus image list images:

Recherche d'une distribution spécifique :

incus image list images: debian
incus image list images: ubuntu

Copie des Images

Copie d'une image depuis un dépôt public avec mise à jour automatique :

incus image copy images:debian/12 local: --auto-update

Copie d'une image avec un alias :

incus image copy images:debian/12 local: --alias debian12

Création d'une Image depuis un Conteneur

incus publish <container-name> --alias my-custom-image

Suppression des Images

incus image delete <image-fingerprint>

ou par alias :

incus image delete <alias>

Interaction Réseau

Gestion des Réseaux

Liste des réseaux :

incus network list

Affichage de la configuration du réseau :

incus network show <network-name>

Création d'un nouveau réseau :

# Création d'un réseau bridge
incus network create mybr0 \
  ipv4.address=10.10.10.1/24 \
  ipv4.nat=true \
  ipv6.address=none

# Création d'un réseau macvlan
incus network create mymacvlan \
  type=macvlan \
  parent=eth0

Édition d'un réseau :

incus network edit <network-name>

Suppression d'un réseau :

incus network delete <network-name>

Règles de Redirection Réseau

Création d'une règle de redirection pour la redirection de ports :

incus network forward create incusbr0 <external-ip>
incus network forward port add incusbr0 <external-ip> tcp 80 <container-ip> 80

Gestion du Stockage

Gestion des Pools de Stockage

Liste des pools :

incus storage list

Affichage des informations sur un pool :

incus storage show <pool-name>

Création d'un pool de stockage :

Pool basé sur Dir :

incus storage create mypool dir source=/var/lib/incus/pools/mypool

Pool Btrfs :

incus storage create mybtrfs btrfs source=/dev/sdb

Pool ZFS :

incus storage create myzfs zfs source=/dev/sdc

Édition d'un pool :

incus storage edit <pool-name>

Suppression d'un pool :

incus storage delete <pool-name>

Gestion des Volumes

Création d'un volume utilisateur :

incus storage volume create <pool-name> <volume-name>

Liste des volumes dans un pool :

incus storage volume list <pool-name>

Attachement d'un volume à un conteneur :

incus config device add <container> <device-name> disk \
  pool=<pool-name> \
  source=<volume-name> \
  path=/mount/path

Copie d'un volume :

incus storage volume copy <pool>/<volume> <pool>/<new-volume>

Suppression d'un volume :

incus storage volume delete <pool-name> <volume-name>

Configuration de NAT et Routage

Dans certains cas, une configuration manuelle de NAT et de règles de routage peut être nécessaire pour assurer l'accès réseau des conteneurs au réseau externe.

Basculement vers nftables

update-alternatives --set iptables /usr/sbin/iptables-nft
update-alternatives --set ip6tables /usr/sbin/ip6tables-nft
update-alternatives --set arptables /usr/sbin/arptables-nft
update-alternatives --set ebtables /usr/sbin/ebtables-nft

Activation du Forwarding IP

sysctl -w net.ipv4.ip_forward=1

Pour une application permanente, ajoutez dans /etc/sysctl.conf :

net.ipv4.ip_forward=1

Redémarrage d'Incus après les modifications :

systemctl restart incus

Configuration de la Table NAT

Création de la table NAT et de la chaîne POSTROUTING :

nft add table ip nat
nft add chain ip nat POSTROUTING '{ type nat hook postrouting priority srcnat; }'

Ajout de la règle de masquerade pour le sous-réseau des conteneurs :

nft add rule ip nat POSTROUTING oifname "ens1" ip saddr 10.1.4.0/24 counter masquerade

Remarque :

Remplacez ens1 par le nom de votre interface réseau externe et 10.1.4.0/24 par le sous-réseau de votre pont Incus.

Configuration de la Chaîne FORWARD

Création de la table filter et de la chaîne FORWARD :

nft add table ip filter
nft add chain ip filter FORWARD '{ type filter hook forward priority 0; policy accept; }'

Ajout de règles pour autoriser le trafic :

Autoriser le trafic depuis les conteneurs vers l'extérieur :

nft insert rule ip filter FORWARD iifname "incusbr0" oifname "ens1" accept

Autoriser le trafic established/related de retour :

nft insert rule ip filter FORWARD iifname "ens1" oifname "incusbr0" ct state established,related accept

Vérification des Règles nftables

Affichage de toutes les règles :

nft list ruleset

Sauvegarde des règles (pour Debian/Ubuntu) :

Installation du paquet pour sauvegarder les règles :

apt-get install nftables

Sauvegarde des règles actuelles :

nft list ruleset > /etc/nftables.conf

Activation du chargement automatique :

systemctl enable nftables

Remarque :

Des informations détaillées sur toutes les fonctionnalités d'Incus se trouvent dans la documentation officielle des développeurs.

Commander un serveur avec Incus via l'API

Pour installer ce logiciel en utilisant l'API, suivez ces instructions.


Une partie du contenu de cette page a été créée ou traduite à l'aide de l'IA.