Proteggi le macchine virtuali KubeVirt con Trident Protect
Trident Protect ti permette di eseguire il backup e il ripristino delle macchine virtuali (VM) KubeVirt in esecuzione su OpenShift Virtualization. Puoi proteggere tutte le VM in uno o più namespace contemporaneamente, oppure usare il campo includedVirtualMachines per selezionare VM specifiche per nome. Trident Protect raccoglie automaticamente tutte le risorse VM dipendenti durante il backup e, durante il ripristino, puoi recuperare l'intero archivio o ripristinare selettivamente singole VM.
Modalità di protezione KubeVirt
Trident Protect supporta due modalità per definire quali KubeVirt VM proteggere. Scegli una modalità quando definisci un'applicazione:
| Modalità | Campo | Descrizione |
|---|---|---|
Basato sul namespace |
|
Proteggi tutte le risorse corrispondenti in uno o più namespace. Usa un |
Con ambito VM |
|
Proteggi specifiche KubeVirt VM per namespace e nome. Usa questa modalità quando le VM sono distribuite tra namespace diversi o quando non vuoi proteggere tutte le risorse di un namespace. |
Devi specificare esattamente un campo (includedNamespaces o includedVirtualMachines nel ApplicationSpec. Non puoi usare entrambi nella stessa applicazione.
Entrambe le modalità supportano filtri aggiuntivi:
-
Usa
resourceFilterper includere o escludere risorse specifiche. -
Usa
includedClusterScopedResourcesper includere risorse compatibili con ambito cluster, come oggettiStorageClass.
|
|
Trident Protect può bloccare e sbloccare i filesystem delle VM KubeVirt durante le operazioni di protezione dei dati per garantire la coerenza. Per i dettagli di configurazione, vedi "Protezione dei dati con le macchine virtuali KubeVirt". |
Risorse raccolte durante il backup e lo snapshot
Quando crei un backup o uno snapshot per un'applicazione che include KubeVirt VM, Trident Protect raccoglie le risorse VM selezionate e scopre automaticamente le risorse da cui dipendono.
Il comportamento di raccolta si applica in due casi:
-
Applicazioni con ambito VM che usano
includedVirtualMachines. -
Applicazioni basate su namespace che contengono KubeVirt
VirtualMachinerisorse.
raccolta con ambito VM
Per le applicazioni con ambito VM, Trident Protect inizia con ciascuna VirtualMachine elencata in includedVirtualMachines e individua le risorse dipendenti necessarie per ripristinare quella VM.
| Tipo di risorsa | Ambito | Come viene scoperto |
|---|---|---|
|
Namespaced |
Corrispondenza diretta dall'elenco |
|
Namespaced |
Stesso namespace e nome della VM, se la VM è in esecuzione. |
|
Namespaced |
Citato da |
|
Cluster |
Riferito da |
|
Namespaced |
Citato da |
|
Cluster |
Riferito da |
|
Namespaced |
Citato da |
|
Namespaced |
Scoperti dai PVC di supporto di DataVolume, che utilizzano lo stesso nome del DataVolume; riferimenti diretti ai PVC in |
|
Cluster |
Scoperto dal supporto PV per ogni PVC raccolto utilizzando |
|
Namespaced |
Scoperti dai segreti del volume in |
|
Namespaced |
Scoperto dal volume ConfigMaps in |
|
Namespaced |
Scoperto da |
|
Namespaced |
Scoperto dalle reti Multus |
|
Namespaced |
Individuato per |
Classe di archiviazione, volumi Trident e backend Trident |
Cluster |
Raccolti nello stesso modo delle applicazioni basate su namespace, in base ai PVC rilevati per la VM. |
|
|
Dopo la raccolta di tutte le risorse con ambito VM e namespace, Trident Protect applica la procedura standard resourceFilter, se configurata. La raccolta delle risorse con ambito cluster procede quindi normalmente.
|
Raccolta basata sul namespace
Per le applicazioni basate su namespace, Trident Protect analizza i namespace selezionati e raccoglie tutte le risorse corrispondenti. Se vengono trovati oggetti KubeVirt VirtualMachine, Trident Protect raccoglie automaticamente le risorse dipendenti, inclusi i tipi di istanza, le preferenze e virt-launcher Pod, nello stesso modo in cui fa per le applicazioni con ambito VM.
Ciò significa che le risorse specifiche della VM sono incluse nel backup o nello snapshot anche quando l'applicazione è definita con includedNamespaces.
Proteggi le macchine virtuali usando definizioni di applicazioni basate su namespace
Quando crei un'applicazione basata su namespace, Trident Protect analizza i namespace selezionati e raccoglie tutte le risorse, incluse le KubeVirt VMs. Per ogni virtual machine trovata, Trident Protect raccoglie anche le risorse dipendenti necessarie per eseguire il backup e il ripristino di quella VM.
Esempio di CR di applicazione basata su namespace:
apiVersion: protect.trident.netapp.io/v1
kind: Application
metadata:
name: <application_name>
namespace: <application_namespace>
spec:
includedNamespaces:
- namespace: <vm_namespace>
Dopo aver creato l'applicazione, usa i flussi di lavoro standard di Trident Protect per i backup e gli snapshot:
-
Per esempi di snapshot YAML, vedi "Crea un'istantanea on-demand".
-
Per esempi di backup YAML, vedi "Crea un backup su richiesta".
Comportamento di ripristino per le applicazioni VM basate su namespace
Poiché le applicazioni basate su namespace raccolgono risorse dai namespace selezionati, il backup o lo snapshot possono includere oggetti runtime KubeVirt e metadati gestiti da KubeVirt. Alcuni di questi oggetti non dovrebbero essere ripristinati direttamente perché rappresentano lo stato runtime del cluster di origine.
Durante il ripristino, Trident Protect applica trasformazioni compatibili con KubeVirt per rimuovere i metadati del cluster di origine e saltare le risorse KubeVirt temporanee. Questo aiuta KubeVirt a ricreare la VM in modo pulito nell'ambiente ripristinato.
| Risorsa | Trasforma |
|---|---|
VirtualMachine |
Rimuove etichette e annotazioni che iniziano con |
VirtualMachineInstance |
Rimuove etichette e annotazioni che iniziano con |
VirtualMachineInstanceMigration |
Ignorato e non ripristinato. |
VirtualMachineSnapshot |
Ignorato e non ripristinato. |
VirtualMachineSnapshotContent |
Ignorato e non ripristinato. |
Pod ( |
Saltato quando il pod ha l'etichetta |
|
|
Trident Protect ripristina le risorse KubeVirt in un ordine definito per evitare problemi di dipendenza. I CDI DataVolumes (cdi.kubevirt.io vengono ripristinati per primi così i dati del disco della VM sono disponibili prima che vengano creati gli oggetti VM. Dopodiché, le VirtualMachines (kubevirt.io vengono ripristinate prima delle VirtualMachineInstances.
|
Protezione dinamica delle VM con selettori di etichette
Se vuoi proteggere le VM in modo dinamico senza elencare ogni nome di VM, usa definizioni di applicazioni basate su namespace con selettori di etichette.
Solo il VirtualMachine CR necessita di etichette. Le risorse dipendenti come DataVolumes, PVC, Secrets e ConfigMaps vengono raccolte automaticamente.
-
Etichetta le CR delle macchine virtuali con un'etichetta condivisa:
kubectl label virtualmachine <vm_name 1> app=<label_value> -n <vm_namespace> kubectl label virtualmachine <vm_name_2> app=<label_value> -n <vm_namespace> -
Crea un'applicazione CR con
includedNamespacese 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> -
Crea backup e ripristini utilizzando il flusso di lavoro standard di Trident Protect.
Ulteriori dettagli:
-
Puoi aggiungere o rimuovere macchine virtuali dalla protezione in qualsiasi momento modificando le etichette:
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>
-
Puoi anche usare i selettori di etichette su più namespace:
spec:
includedNamespaces:
- namespace: <vm_namespace_1>
labelSelector:
matchLabels:
<label_key>: <label_value>
- namespace: <vm_namespace_2>
labelSelector:
matchLabels:
<label_key>: <label_value>
Proteggi macchine virtuali specifiche con includedVirtualMachines
Usa includedVirtualMachines quando vuoi proteggere un insieme denominato di VirtualMachines attraverso uno o più namespace e ripristinare selettivamente VM specifiche da un archivio.
Sia le CR di applicazione che quelle di ripristino utilizzano lo stesso includedVirtualMachines formato di selettore.
Utilizza questo selettore in contesti diversi:
-
In una CR dell'applicazione, definisci quali VM sono protette.
-
In una richiesta di ripristino (CR), definisci quali macchine virtuali vengono ripristinate dall'archivio di backup o Snapshot.
|
|
Nei restore CR, includedVirtualMachines è facoltativo. Se non includi questo campo, viene ripristinato l'intero archivio. Quando specificato, vengono ripristinate solo le VM elencate e le relative risorse dipendenti.
|
Il codice YAML riportato di seguito mostra la struttura del selettore condiviso:
includedVirtualMachines:
- namespace: <vm_namespace_1>
names:
- <vm_name_1>
- <vm_name_2>
- namespace: <vm_namespace_2>
names:
- <vm_name_3>
|
|
Più voci in includedVirtualMachines possono fare riferimento a namespace diversi, il che consente definizioni e ripristini di applicazioni VM-aware su più namespace.
|
| Campo | Tipo | Descrizione |
|---|---|---|
spazio dei nomi |
stringa |
Spazio dei nomi Kubernetes che contiene gli oggetti della macchina virtuale di destinazione. |
nomi |
elenco di stringhe |
Uno o più nomi di macchine virtuali in quello spazio dei nomi. |
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
Ripristina specifiche macchine virtuali KubeVirt
Puoi usare includedVirtualMachines sui CR di ripristino per ripristinare solo le KubeVirt VM selezionate da un backup, uno Snapshot o un archivio di Snapshot replicato.
Quando includedVirtualMachines viene specificato su un CR di ripristino, Trident Protect ripristina solo le VirtualMachines elencate e le relative risorse dipendenti, come VirtualMachineInstance, DataVolume, PersistentVolumeClaim, PersistentVolume, Secret, ConfigMap, ServiceAccount e altri oggetti correlati alla VM.
Se non specifichi includedVirtualMachines nel restore CR, Trident Protect ripristina l'intero archivio secondo la configurazione del restore CR.
CR di ripristino e comandi CLI supportati
La tabella seguente elenca i CR di ripristino che supportano includedVirtualMachines e i relativi comandi CLI.
| Ripristina CR | Comando CLI | Descrizione |
|---|---|---|
|
|
Ripristina da un backup a mappature di namespace nuove o diverse. Supporta |
|
|
Esegui il ripristino da un backup nello spazio dei nomi o negli spazi dei nomi originali. |
|
|
Ripristina da uno Snapshot a mappature di namespace nuove o diverse. Supporta |
|
|
Esegui il ripristino da una Snapshot nello spazio dei nomi o negli spazi dei nomi originali. |
|
Solo YAML, oppure usa il comando CLI supportato se disponibile nel tuo ambiente |
Ripristina da uno snapshot replicato. Supporta |
|
|
La tridentctl-protect CLI non ha un flag per includedVirtualMachines nei comandi di ripristino. Per ripristinare VM specifiche, devi applicare direttamente un file YAML di restore CR usando kubectl apply. Puoi scrivere il file YAML da zero oppure usare la CLI con --dry-run --output yaml per generare un file iniziale, aggiungere il campo includedVirtualMachines sotto spec, e poi applicarlo.
|
Comportamento di ripristino a livello di macchina virtuale
Il `includedVirtualMachines`campo in una richiesta di ripristino (CR) utilizza lo stesso formato di selettore della richiesta di applicazione (CR):
includedVirtualMachines:
- namespace: <source_vm_namespace>
names:
- <vm_name_1>
- <vm_name_2>
Per i CR di ripristino, i valori dello spazio dei nomi includedVirtualMachines si riferiscono agli spazi dei nomi di origine così come esistono nel backup, Snapshot o archivio di Snapshot replicato.
Se usi namespaceMapping, Trident Protect seleziona prima le VM richieste dall'archivio di origine e poi applica le mappature dello spazio dei nomi durante il ripristino. Se usi storageClassMapping, Trident Protect applica le mappature della storage class durante la fase di trasformazione del ripristino.
Genera il file YAML di ripristino con la CLI
Puoi usare tridentctl-protect per generare un CR di ripristino di base e poi modificare il file YAML per aggiungere includedVirtualMachines.
tridentctl-protect create <restore_command> <restore_name> \
<restore_options> \
--dry-run --output yaml > <restore_name>.yaml
Modifica il file YAML generato e aggiungi il campo includedVirtualMachines sotto spec, quindi applica il file:
kubectl apply -f <restore_name>.yaml
Esempio: Definisci un'applicazione basata su VM
La seguente applicazione protegge tre macchine virtuali specifiche in due namespace.
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
Esempio: crea un backup
La creazione di un backup per un'applicazione basata su VM utilizza il CR di backup standard. Non sono richiesti campi specifici per la VM nel CR di backup.
apiVersion: protect.trident.netapp.io/v1
kind: Backup
metadata:
name: daily-backup
namespace: prod
spec:
applicationRef: production-vms
appVaultRef: s3-vault
Esempio: Ripristina una singola macchina virtuale da un backup
L'esempio seguente esegue il ripristino solo database-server dall'archivio di backup. Le altre VM nell'archivio, come app-server e prometheus-vm, vengono ignorate.
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
Vengono ripristinati solo database-server e le sue risorse dipendenti, come DataVolumes, PVC, PV, Secrets, ConfigMaps e le risorse correlate di KubeVirt.
Esempio: Ripristina una singola macchina virtuale in-place da un backup
Il seguente esempio ripristina solo database-server nel suo spazio dei nomi originale dall'archivio di backup.
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
Esempio: Ripristina una singola macchina virtuale da uno Snapshot
L'esempio seguente esegue il ripristino solo ubuntu-vm-blue-a627be38 da un archivio 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
Combina il ripristino della macchina virtuale con altri filtri
Puoi usare includedVirtualMachines insieme a resourceFilter, namespaceMapping e storageClassMapping nello stesso restore CR per perfezionare cosa viene ripristinato.
Quando aggiungi un resourceFilter, Trident Protect seleziona prima le VM elencate in includedVirtualMachines e le relative risorse dipendenti. Poi applica il filtro delle risorse per restringere ulteriormente ciò che è incluso o escluso da quei risultati.
spec:
includedVirtualMachines:
- namespace: <vm_namespace>
names:
- <vm_name>
resourceFilter:
resourceSelectionCriteria: Include
resourceMatchers:
- kinds: ["PersistentVolumeClaim"]
names: ["<pvc_name>"]
Per BackupRestore, SnapshotRestore e ReplicateSnapshotRestore, namespaceMapping e storageClassMapping lavorano insieme a includedVirtualMachines. I riferimenti al namespace in includedVirtualMachines corrispondono ai namespace di origine così come appaiono nell'archivio. Le mappature tra namespace e storage class vengono applicate durante la fase di trasformazione del ripristino dopo che il filtraggio è stato completato.
Per i dettagli sul comportamento di ripristino, consulta "Ripristina le applicazioni utilizzando Trident Protect".
Crea un'applicazione con ambito VM utilizzando la CLI
Usa il --virtual-machines flag per limitare l'ambito di un'applicazione a specifiche KubeVirt VM invece che a interi namespace. Il --virtual-machines flag è mutuamente esclusivo con --namespaces.
-
Crea l'applicazione eseguendo uno dei seguenti comandi, sostituendo i valori tra parentesi con le informazioni del tuo ambiente. Il formato per il
--virtual-machinesflag è<namespace>(<vm_name>). Per più VM, usa nomi separati da virgole all'interno delle parentesi:-
Singola VM in un namespace:
tridentctl-protect create application <application_name> \ -n <application_namespace> \ --virtual-machines "<vm_namespace>(<vm_name>)" -
Più macchine virtuali in diversi namespace:
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>)"
-