Protégez les machines virtuelles KubeVirt avec Trident Protect
Trident Protect vous permet de sauvegarder et de restaurer des machines virtuelles (VM) KubeVirt exécutées sur OpenShift Virtualization. Vous pouvez protéger toutes les VM d’un ou de plusieurs espaces de noms à la fois, ou utiliser le champ includedVirtualMachines pour cibler des VM spécifiques par leur nom. Trident Protect collecte automatiquement toutes les ressources VM dépendantes lors de la sauvegarde, et lors de la restauration, vous pouvez récupérer l’intégralité de l’archive ou restaurer sélectivement des VM individuelles.
KubeVirt modes de protection
Trident Protect prend en charge deux méthodes pour définir quelles KubeVirt VMs protéger. Choisissez un mode lors de la définition d'une application :
| Mode | Champ | Description |
|---|---|---|
Basé sur les espaces de noms |
|
Protégez toutes les ressources correspondantes dans un ou plusieurs espaces de noms. Utilisez un |
à l’échelle de la VM |
|
Protégez des machines virtuelles KubeVirt spécifiques par espace de noms et par nom. Utilisez ce mode lorsque les machines virtuelles sont réparties sur plusieurs espaces de noms ou lorsque vous ne souhaitez pas protéger toutes les ressources d’un espace de noms. |
Vous devez spécifier exactement un seul champ (includedNamespaces ou includedVirtualMachines) dans le ApplicationSpec. Vous ne pouvez pas utiliser les deux dans la même application.
Les deux modes prennent en charge un filtrage supplémentaire :
-
Utilisez
resourceFilterpour inclure ou exclure des ressources spécifiques. -
Utilisez
includedClusterScopedResourcespour inclure des ressources compatibles à l'échelle du cluster, telles que des objetsStorageClass.
|
|
Trident Protect peut geler et dégeler les systèmes de fichiers des machines virtuelles KubeVirt lors des opérations de protection des données afin de garantir leur cohérence. Pour plus de détails sur la configuration, consultez "Protéger les données avec les machines virtuelles KubeVirt". |
Ressources collectées lors de la sauvegarde et de l'instantané
Lorsque vous créez une sauvegarde ou un instantané pour une application qui inclut des machines virtuelles KubeVirt, Trident Protect collecte les ressources de machines virtuelles sélectionnées et découvre automatiquement leurs ressources dépendantes.
Le comportement de collecte s'applique dans deux cas :
-
Applications à portée de machine virtuelle qui utilisent
includedVirtualMachines. -
Applications basées sur des espaces de noms qui contiennent KubeVirt
VirtualMachineresources.
collection à portée de VM
Pour les applications à portée de machine virtuelle, Trident Protect commence par chaque VirtualMachine répertoriée dans includedVirtualMachines et découvre les ressources dépendantes nécessaires à la restauration de cette machine virtuelle.
| Type de ressource | Portée | Comment il est découvert |
|---|---|---|
|
Associé à un espace de noms |
Correspondance directe à partir de la |
|
Associé à un espace de noms |
Même espace de noms et même nom que la machine virtuelle, si la machine virtuelle est en cours d'exécution. |
|
Associé à un espace de noms |
Référencé par |
|
Cluster |
Référencé par |
|
Associé à un espace de noms |
Référencé par |
|
Cluster |
Référencé par |
|
Associé à un espace de noms |
Cité par |
|
Associé à un espace de noms |
Découvert à partir des PVC de support DataVolume, qui utilisent le même nom que le DataVolume ; références PVC directes dans |
|
Cluster |
Découvert à partir du support PV pour chaque PVC collecté en utilisant |
|
Associé à un espace de noms |
Découverts à partir des secrets de volume dans |
|
Associé à un espace de noms |
Découvert à partir du volume ConfigMaps dans |
|
Associé à un espace de noms |
Découvert à partir de `serviceAccount.serviceAccountName`références de volumes. |
|
Associé à un espace de noms |
Découvert à partir des réseaux Multus |
|
Associé à un espace de noms |
Découvert pour |
Classe de stockage, volumes Trident et backends Trident |
Cluster |
Collectées de la même manière que les applications basées sur les espaces de noms, en fonction des PVC découverts pour la VM. |
|
|
Une fois toutes les ressources d'espace de noms au niveau de la machine virtuelle collectées, Trident Protect applique la méthode standard resourceFilter, si elle est configurée. La collecte des ressources au niveau du cluster se déroule ensuite normalement.
|
Collection basée sur les espaces de noms
Pour les applications basées sur des espaces de noms, Trident Protect analyse les espaces de noms sélectionnés et collecte toutes les ressources correspondantes. Si des KubeVirt VirtualMachine objets sont trouvés, Trident Protect collecte automatiquement leurs ressources dépendantes, notamment les types d’instances, les préférences et virt-launcher Pods, de la même manière que pour les applications à portée de machine virtuelle.
Cela signifie que les ressources spécifiques à la VM sont incluses dans votre sauvegarde ou votre instantané même lorsque l’application est définie avec includedNamespaces.
Protégez les machines virtuelles à l'aide de définitions d'applications basées sur les espaces de noms
Lors de la création d'une application basée sur un espace de noms, Trident Protect analyse les espaces de noms sélectionnés et collecte toutes les ressources, y compris toutes les machines virtuelles KubeVirt. Pour chaque machine virtuelle détectée, Trident Protect collecte également les ressources dépendantes nécessaires à la sauvegarde et à la restauration de cette machine virtuelle.
Exemple de CR d'application basé sur un espace de noms :
apiVersion: protect.trident.netapp.io/v1
kind: Application
metadata:
name: <application_name>
namespace: <application_namespace>
spec:
includedNamespaces:
- namespace: <vm_namespace>
Après avoir créé l'application, utilisez les workflows standard de Trident Protect pour les sauvegardes et les instantanés :
-
Pour des exemples de YAML d'instantané, voir "Créer un snapshot à la demande".
-
Pour des exemples de sauvegarde YAML, voir "Créez une sauvegarde à la demande".
Comportement de restauration pour les applications de machines virtuelles basées sur les espaces de noms
Étant donné que les applications basées sur les espaces de noms collectent les ressources des espaces de noms sélectionnés, la sauvegarde ou l’instantané peut inclure des objets d’exécution KubeVirt et des métadonnées gérées par KubeVirt. Certains de ces objets ne doivent pas être restaurés directement, car ils représentent l’état d’exécution du cluster source.
Lors de la restauration, Trident Protect applique des transformations compatibles KubeVirt pour supprimer les métadonnées du cluster source et ignorer les ressources transitoires KubeVirt. Cela aide KubeVirt à recréer la machine virtuelle proprement dans l’environnement restauré.
| Ressource | Transformer |
|---|---|
VirtualMachine |
Supprime les étiquettes et annotations qui commencent par |
VirtualMachineInstance |
Supprime les étiquettes et annotations qui commencent par |
VirtualMachineInstanceMigration |
Ignoré et non restauré. |
VirtualMachineSnapshot |
Ignoré et non restauré. |
VirtualMachineSnapshotContent |
Ignoré et non restauré. |
Pod ( |
Ignoré lorsque le pod possède le label |
|
|
Trident Protect restaure les ressources KubeVirt dans un ordre défini afin d’éviter les problèmes de dépendance. Les CDI DataVolumes (cdi.kubevirt.io sont restaurés en premier afin que les données disque de la VM soient disponibles avant la création des objets VM. Ensuite, les VirtualMachines (kubevirt.io sont restaurées avant les VirtualMachineInstances.
|
Protection dynamique des machines virtuelles avec sélecteurs d'étiquettes
Si vous souhaitez protéger les machines virtuelles de manière dynamique sans avoir à lister le nom de chaque machine virtuelle, utilisez des définitions d'application basées sur l'espace de noms avec des sélecteurs d'étiquettes.
Seule la ressource VirtualMachine CR nécessite des étiquettes. Les ressources dépendantes telles que DataVolumes, les PVC, les Secrets et les ConfigMaps sont collectées automatiquement.
-
Étiquetez les CR de machines virtuelles avec une étiquette partagée :
kubectl label virtualmachine <vm_name 1> app=<label_value> -n <vm_namespace> kubectl label virtualmachine <vm_name_2> app=<label_value> -n <vm_namespace> -
Créez un CR d'application avec
includedNamespaceset unlabelSelector:apiVersion: protect.trident.netapp.io/v1 kind: Application metadata: name: <application_name> namespace: <application_namespace> spec: includedNamespaces: - namespace: <vm_namespace> labelSelector: matchLabels: app: <label_value> -
Créez des sauvegardes et des restaurations à l'aide du workflow standard Trident Protect.
Détails supplémentaires :
-
Vous pouvez ajouter ou supprimer des machines virtuelles de la protection à tout moment en modifiant les étiquettes :
kubectl label virtualmachine <vm_name_to_add> app=<label_value> -n <vm_namespace>
kubectl label virtualmachine <vm_name_to_remove> app=<different_label_value> -n <vm_namespace>
-
Vous pouvez également utiliser des sélecteurs d'étiquettes dans plusieurs espaces de noms :
spec:
includedNamespaces:
- namespace: <vm_namespace_1>
labelSelector:
matchLabels:
<label_key>: <label_value>
- namespace: <vm_namespace_2>
labelSelector:
matchLabels:
<label_key>: <label_value>
Protégez des machines virtuelles spécifiques avec includedVirtualMachines
Utilisez includedVirtualMachines lorsque vous souhaitez protéger un ensemble nommé de VirtualMachines sur un ou plusieurs espaces de noms et restaurer sélectivement des machines virtuelles spécifiques à partir d'un archivage des sauvegardes.
Les demandes de modification (CR) d'application et de restauration utilisent le même includedVirtualMachines format de sélecteur.
Utilisez ce sélecteur dans différents contextes :
-
Dans une demande de modification d'application, elle définit quelles machines virtuelles sont protégées.
-
Dans une demande de restauration (CR), elle définit quelles machines virtuelles sont restaurées à partir de l'archivage des sauvegardes ou de l'archive de snapshot.
|
|
Lors de la restauration des CR, includedVirtualMachines est facultatif. Si vous ne renseignez pas ce champ, l'archive entière est restaurée. Lorsqu'il est spécifié, seules les machines virtuelles listées et leurs ressources dépendantes sont restaurées.
|
Le code YAML ci-dessous illustre la structure du sélecteur partagé :
includedVirtualMachines:
- namespace: <vm_namespace_1>
names:
- <vm_name_1>
- <vm_name_2>
- namespace: <vm_namespace_2>
names:
- <vm_name_3>
|
|
Plusieurs entrées dans includedVirtualMachines peuvent faire référence à différents espaces de noms, ce qui permet des définitions et des restaurations d’applications compatibles avec les machines virtuelles multi-espaces de noms.
|
| Champ | Type | Description |
|---|---|---|
espace de noms |
chaîne |
Espace de noms Kubernetes contenant les objets de la machine virtuelle cible. |
noms |
liste de chaînes de caractères |
Un ou plusieurs noms de machines virtuelles dans cet espace de noms. |
apiVersion: protect.trident.netapp.io/v1
kind: Application
metadata:
name: <application_name>
namespace: <application_namespace>
spec:
includedVirtualMachines:
- namespace: <vm_namespace_1>
names:
- <vm_name_1>
- <vm_name_2>
- namespace: <vm_namespace_2>
names:
- <vm_name_3>
includedClusterScopedResources:
- group: storage.k8s.io
kind: StorageClass
Restaurer des machines virtuelles KubeVirt spécifiques
Vous pouvez utiliser includedVirtualMachines sur les CR de restauration pour restaurer uniquement les machines virtuelles KubeVirt sélectionnées à partir d'une sauvegarde, d'un instantané ou d'une archive d'instantanés répliqués.
Lorsque includedVirtualMachines est spécifié sur un CR de restauration, Trident Protect ne restaure que les VirtualMachines listées et leurs ressources dépendantes, telles que VirtualMachineInstance, DataVolume, PersistentVolumeClaim, PersistentVolume, Secret, ConfigMap, ServiceAccount et d'autres objets liés aux VM.
Si vous ne spécifiez includedVirtualMachines pas dans la CR de restauration, Trident Protect restaure l'archive complète conformément à la configuration de la CR de restauration.
CR et commandes CLI de restauration prises en charge
Le tableau suivant répertorie les CR de restauration qui prennent en charge includedVirtualMachines et leurs commandes CLI correspondantes.
| Restaurer CR | Commande CLI | Description |
|---|---|---|
|
|
Restaure à partir d'une sauvegarde vers des mappages d'espaces de noms nouveaux ou différents. Prend en charge |
|
|
Restaure à partir d'une sauvegarde dans l'espace de noms ou les espaces de noms d'origine. |
|
|
Restaure à partir d'un instantané vers des mappages d'espaces de noms nouveaux ou différents. Prend en charge |
|
|
Restaure à partir d'un instantané dans l'espace de noms ou les espaces de noms d'origine. |
|
YAML uniquement, ou utilisez la commande CLI prise en charge si elle est disponible dans votre environnement |
Restaure à partir d'un instantané répliqué. Prend en charge |
|
|
L' tridentctl-protect CLI ne propose pas de paramètre pour includedVirtualMachines les commandes de restauration. Pour restaurer des machines virtuelles spécifiques, vous devez appliquer directement un fichier YAML de restauration CR à l'aide de kubectl apply. Vous pouvez rédiger le fichier YAML depuis zéro, ou utiliser la CLI avec --dry-run --output yaml pour générer un fichier de départ, ajouter le champ includedVirtualMachines sous spec, puis l'appliquer.
|
Comportement de restauration à l'échelle de la machine virtuelle
Le `includedVirtualMachines`champ d'une CR de restauration utilise le même format de sélecteur que la CR d'application :
includedVirtualMachines:
- namespace: <source_vm_namespace>
names:
- <vm_name_1>
- <vm_name_2>
Pour les CR de restauration, les valeurs d'espace de noms dans includedVirtualMachines font référence aux espaces de noms sources tels qu'elles existent dans l'archive de sauvegarde, l'instantané ou l'archive d'instantané répliqué.
Si vous utilisez namespaceMapping, Trident Protect sélectionne d'abord les machines virtuelles demandées dans l'archive source, puis applique les mappages d'espace de noms lors de la restauration. Si vous utilisez storageClassMapping, Trident Protect applique les mappages de classe de stockage lors de la phase de transformation de la restauration.
Générez le fichier YAML de restauration avec l'interface de ligne de commande (CLI)
Vous pouvez utiliser tridentctl-protect pour générer un CR de restauration de base, puis modifier le YAML pour ajouter includedVirtualMachines.
tridentctl-protect create <restore_command> <restore_name> \
<restore_options> \
--dry-run --output yaml > <restore_name>.yaml
Modifiez le fichier YAML généré et ajoutez le champ includedVirtualMachines sous spec, puis appliquez le fichier :
kubectl apply -f <restore_name>.yaml
Exemple : Définir une application basée sur une machine virtuelle
L'application suivante protège trois machines virtuelles spécifiques réparties sur deux espaces de noms.
apiVersion: protect.trident.netapp.io/v1
kind: Application
metadata:
name: production-vms
namespace: prod
spec:
includedVirtualMachines:
- namespace: prod
names:
- app-server
- database-server
- namespace: monitoring
names:
- prometheus-vm
includedClusterScopedResources:
- group: storage.k8s.io
kind: StorageClass
Exemple : créer une sauvegarde
La création d'une sauvegarde pour une application basée sur une machine virtuelle utilise le CR de sauvegarde standard. Aucun champ spécifique à la machine virtuelle n'est requis dans le CR de sauvegarde.
apiVersion: protect.trident.netapp.io/v1
kind: Backup
metadata:
name: daily-backup
namespace: prod
spec:
applicationRef: production-vms
appVaultRef: s3-vault
Exemple : Restaurer une seule machine virtuelle à partir d’une sauvegarde
L'exemple suivant restaure uniquement database-server à partir de l'archivage des sauvegardes. Les autres machines virtuelles de l'archive, telles que app-server et prometheus-vm, sont ignorées.
apiVersion: protect.trident.netapp.io/v1
kind: BackupRestore
metadata:
name: restore-db-only
namespace: prod-vms-restore
spec:
appVaultRef: s3-vault
appArchivePath: backups/production-vms/2026-03-10T00-00-00Z
namespaceMapping:
- source: prod
destination: prod-dr
includedVirtualMachines:
- namespace: prod
names:
- database-server
kubectl apply -f restore-db-only.yaml
Seuls database-server et ses ressources dépendantes, telles que DataVolumes, les PVC, les PV, les Secrets, les ConfigMaps et les ressources associées KubeVirt, sont restaurés.
Exemple : Restaurer une seule machine virtuelle sur place à partir d’une sauvegarde
L'exemple suivant restaure uniquement database-server dans son espace de noms d'origine à partir de l'archivage des sauvegardes.
apiVersion: protect.trident.netapp.io/v1
kind: BackupInplaceRestore
metadata:
name: ipr-db-only
namespace: prod
spec:
appVaultRef: s3-vault
appArchivePath: backups/production-vms/2026-03-10T00-00-00Z
includedVirtualMachines:
- namespace: prod
names:
- database-server
kubectl apply -f ipr-db-only.yaml
Exemple : Restaurer une seule machine virtuelle à partir d’un instantané
L'exemple suivant restaure uniquement ubuntu-vm-blue-a627be38 à partir d'une archive de snapshot.
apiVersion: protect.trident.netapp.io/v1
kind: SnapshotRestore
metadata:
name: blue-vm-snap-restore
namespace: blue
spec:
appVaultRef: my-appvault
appArchivePath: snapshots/protectctl-blue-vm/snap-1
includedVirtualMachines:
- namespace: blue
names:
- ubuntu-vm-blue-a627be38
kubectl apply -f blue-vm-snap-restore.yaml
Combinez la restauration de la machine virtuelle avec d'autres filtres
Vous pouvez utiliser includedVirtualMachines avec resourceFilter, namespaceMapping et storageClassMapping dans le même CR de restauration pour affiner ce qui est restauré.
Lorsque vous ajoutez un resourceFilter, Trident Protect sélectionne d'abord les machines virtuelles listées dans includedVirtualMachines et leurs ressources dépendantes. Il applique ensuite le filtre de ressources pour affiner ce qui est inclus ou exclu de ces résultats.
spec:
includedVirtualMachines:
- namespace: <vm_namespace>
names:
- <vm_name>
resourceFilter:
resourceSelectionCriteria: Include
resourceMatchers:
- kinds: ["PersistentVolumeClaim"]
names: ["<pvc_name>"]
Pour BackupRestore, SnapshotRestore et ReplicateSnapshotRestore, namespaceMapping et storageClassMapping fonctionnent conjointement avec includedVirtualMachines. Les références d’espace de noms dans includedVirtualMachines correspondent aux espaces de noms sources tels qu’elles apparaissent dans l’archive. Les mappages d’espace de noms et de classe de stockage sont appliqués lors de la phase de transformation de restauration, une fois le filtrage terminé.
Pour plus de détails sur le comportement de restauration, veuillez vous référer à "Restaurez les applications à l'aide de Trident Protect".
Créez une application à portée de machine virtuelle à l'aide de l'interface de ligne de commande (CLI)
Utilisez le --virtual-machines indicateur pour limiter la portée d'une application à des machines virtuelles KubeVirt spécifiques plutôt qu'à des espaces de noms entiers. Le --virtual-machines indicateur est mutuellement exclusif avec --namespaces.
-
Créez l'application en exécutant l'une des commandes suivantes, en remplaçant les valeurs entre crochets par les informations de votre environnement. Le format pour l'
--virtual-machines`option est `<namespace>(<vm_name>). Pour plusieurs machines virtuelles, utilisez des noms séparés par des virgules entre parenthèses :-
Une seule machine virtuelle dans un espace de noms :
tridentctl-protect create application <application_name> \ -n <application_namespace> \ --virtual-machines "<vm_namespace>(<vm_name>)" -
Plusieurs machines virtuelles réparties dans différents espaces de noms :
tridentctl-protect create application <application_name> \ -n <application_namespace> \ --virtual-machines "<vm_namespace_1>(<vm_name_1>,<vm_name_2>),<vm_namespace_2>(<vm_name_3>)"
-