Gestion Avancée instance snapshot, et project
4. Gestion Avancée des Conteneurs
- incus_instance_snapshot : Créer et gérer des snapshots des conteneurs
- incus_profile : Créer et appliquer des profils pour les conteneurs
- incus_project : Organisation des conteneurs en projets
Snapshots avec incus_instance_snapshot
Les snapshots sont une fonctionnalité puissante qui permet de capturer l’état d’un conteneur ou d’une machine virtuelle à un moment donné. Ils offrent la possibilité de revenir à cet état en cas de défaillance ou de besoin de restauration rapide. Cela est particulièrement utile pour les mises à jour, les tests ou les sauvegardes régulières.
- Exemple de Création d’un Snapshot :
resource "incus_instance" "vm-db" {
project = "default"
name = "vm-db-01"
image = "images:ubuntu/22.04"
type = "virtual-machine"
config = {
"boot.autostart" = true
}
limits = {
cpu = 2
}
}
############## Snapshot de l'instance avant upgrade par exemple #########################
resource "incus_instance_snapshot" "vm-snapshot" {
name = "snapshot-before-upgrade"
instance = incus_instance.vm-db.name
project = "default"
stateful = false # false for stateless. Stateful snapshots include runtime state. Defaults to false, db for example."
}
Dans cet exemple :
- Le snapshot snapshot-before-upgrade est créé pour le conteneur ou VM nommé my_container.
- Vous pouvez restaurer cet état en cas de problème pendant une mise à jour ou une maintenance.
- Sauvegarde rapide : Les snapshots prennent peu de place et sont rapides à créer, ce qui en fait une solution idéale pour les sauvegardes fréquentes.
- Reprise après incident : En cas de problème majeur, il est possible de revenir à un état fonctionnel en quelques secondes.
terraform init
terraform apply

Gestion des Profils avec incus_profile
Les profils sont un mécanisme centralisé permettant de définir des configurations réutilisables pour les conteneurs et VM. Cela permet de standardiser les configurations réseau, les limites de ressources et les volumes de stockage à appliquer à plusieurs instances.
- Gestion des environnements de déploiement: dev, prod, staging, preprod
- Gestion des équipes: dev, ops, monitoring
- Gestion des types de déploiement: web server, db, backend
Exemple de Création d’un Profil dev et prod:
resource "incus_profile" "dev-env-profile" {
name = "dev-env-profile"
config = {
"limits.cpu" = 1 # Limite à 2 vCPU
"limits.memory" = "1GB" # Limite à 4 Go de mémoire
"boot.autostart" = true # Démarrage automatique au boot
}
device {
name = "eth0" # donne un nom
type = "nic"
properties = {
nictype = "bridged" # ou "macvlan", selon votre configuration réseau
parent = "incusbr0" # Interface réseau bridge sur l'hôte
}
}
device {
name = "root"
type = "disk"
properties = {
pool = "dev-lvm-incus" # Pool de stockage par défaut
path = "/" # Le chemin racine du disque
size = "1GB" # Taille du disque racine : 1 Go
}
}
}
resource "incus_profile" "prod-env-profile" {
name = "prod-env-profile"
config = {
"limits.cpu" = 8 # Limite à 2 vCPU
"limits.memory" = "16GB" # Limite à 4 Go de mémoire
"boot.autostart" = true # Démarrage automatique au boot
}
device {
name = "eth0" # donne un nom
type = "nic"
properties = {
nictype = "bridged" # ou "macvlan", selon votre configuration réseau
parent = "incusbr0" # Interface réseau bridge sur l'hôte
}
}
device {
name = "root"
type = "disk"
properties = {
pool = "dev-lvm-incus" # Pool de stockage par défaut
path = "/" # Le chemin racine du disque
size = "2GB" # Taille du disque racine : 1 Go
}
}
}
- Le profil dev-env-profile limite l’utilisation à 2 vCPU et 4 Go de mémoire.
- Le profil prod-env-profile limite l’utilisation à 8 vCPU et 16 Go de mémoire.
- Ils définissent un périphérique de disque partagé monté sur /shared, et un volume racine / provenant du pool de stockage par défaut.

Créer une instance avec le profil dev-env-profile
resource "incus_instance" "web_server_instance" {
name = "nginx-container"
image = "images:ubuntu/22.04"
profiles = [incus_profile.dev-env-profile.name] # Application du profil web-server-profile
ephemeral = false
}
Ici, l’instance nginx-container hérite de toutes les configurations définies dans dev-env-profile, notamment les limitations de CPU, de mémoire et les montages de disque.

Organisation des Conteneurs en Projets avec incus_project
La gestion des conteneurs dans des environnements complexes peut devenir difficile à mesure que le nombre de ressources augmente. Les projets permettent de segmenter les conteneurs et les VM en espaces de noms isolés, améliorant l'organisation, la sécurité et la gestion des accès.
Exemple de Création d’un Projet :resource "incus_project" "devops-project" {
name = "devops"
description = "DevOps Team project"
config = {
# Activer les fonctionnalités souhaitées pour le projet
"features.storage.volumes" = true
"features.images" = true
"features.profiles" = false
"features.storage.buckets" = true
# Limites de ressources
"limits.instances" = "4" # Max 10 instances
"limits.containers" = "2" # Max 5 conteneurs
"limits.virtual-machines" = "3" # Max 5 machines virtuelles
"limits.disk" = "20GB" # Max 20 Go d'espace disque
"limits.networks" = "2" # Max 2 réseaux
"limits.cpu" = "4" # Max 16 CPU
"limits.memory" = "8GB" # Max 32 Go de mémoire
# "limits.processes" = "500" # Max 500 processus
}
}
resource "incus_profile" "devops-dev-profile" {
name = "devops-profile"
project = incus_project.devops-project.name # Associe le profil au projet "devops"
config = {
"limits.cpu" = 1 # Limite à 2 vCPU
"limits.memory" = "1GB" # Limite à 4 Go de mémoire
"boot.autostart" = true # Démarrage automatique au boot
}
device {
name = "eth0" # donne un nom
type = "nic"
properties = {
nictype = "bridged" # ou "macvlan", selon votre configuration réseau
parent = "incusbr0" # Interface réseau bridge sur l'hôte
}
}
device {
name = "root"
type = "disk"
properties = {
pool = "dev-lvm-incus" # Pool de stockage par défaut
path = "/" # Le chemin racine du disque
size = "5GB" # Taille du disque racine : 1 Go
}
}
}
resource "incus_instance" "devops_dev_instance" {
name = "devops-dev-instance"
image = "images:ubuntu/22.04"
type = "virtual-machine"
project = incus_project.devops-project.name # Applique le projet avec la limite CPU
profiles = [incus_profile.devops-dev-profile.name] # Applique le profil avec la limite CPU
}
Explication des Limites :
- limits.instances : Nombre maximum d'instances (conteneurs + VMs) dans le projet.
- limits.containers : Nombre maximum de conteneurs que le projet peut créer.
- limits.virtual-machines : Nombre maximum de machines virtuelles que le projet peut créer.
- limits.disk : Espace disque maximum alloué à toutes les instances du projet.
- limits.networks : Nombre maximum de réseaux définis dans le projet.
- limits.cpu : Nombre total de CPU alloués à toutes les instances du projet.
- limits.memory : Quantité maximale de mémoire allouée aux instances dans le projet.
- limits.processes : Nombre maximum de processus pouvant être exécutés dans les instances du projet.
Remarques :
- Héritage et Override : Les limites définies dans le projet peuvent écraser les limites globales configurées au niveau du serveur Incus si vous les définissez explicitement dans le projet.
- Gestion des fonctionnalités : En plus des limites de ressources, vous pouvez activer ou désactiver des fonctionnalités comme les volumes de stockage, les images, ou les profils, comme dans l'exemple ci-dessus.
- Isolation : Chaque projet est un espace de noms indépendant avec ses propres configurations, ressources et utilisateurs.
- Sécurité accrue : Limitez les permissions et les accès à certains projets pour différentes équipes ou environnements (par exemple, Dev, Test, Prod).
- Gestion granulaire : Gérez facilement les ressources de manière séparée, tout en maintenant une isolation stricte entre les projets.

Cleanup:
terraform destroyCommentaires
Aucun commentaire pour le moment.