Schutz von KubeVirt virtuellen Maschinen mit Trident Protect
Trident Protect ermöglicht das Sichern und Wiederherstellen von KubeVirt virtuellen Maschinen (VMs), die auf OpenShift Virtualization ausgeführt werden. Es ist möglich, alle VMs in einem oder mehreren Namespaces gleichzeitig zu schützen oder mit dem includedVirtualMachines Feld gezielt bestimmte VMs nach Namen auszuwählen. Trident Protect sammelt während der Sicherung automatisch alle abhängigen VM-Ressourcen. Bei der Wiederherstellung kann entweder das gesamte Archiv oder einzelne VMs gezielt wiederhergestellt werden.
KubeVirt Schutzmodi
Trident Protect unterstützt zwei Möglichkeiten, um festzulegen, welche KubeVirt VMs geschützt werden sollen. Ein Modus wird bei der Definition einer Anwendung ausgewählt:
| Modus | Feld | Beschreibung |
|---|---|---|
Namespace-basiert |
|
Alle übereinstimmenden Ressourcen in einem oder mehreren Namespaces werden geschützt. Ein |
VM-bezogen |
|
Bestimmte KubeVirt VMs anhand von Namespace und Name schützen. Dieser Modus eignet sich, wenn VMs über mehrere Namespaces verteilt sind oder nicht alle Namespace-Ressourcen geschützt werden sollen. |
Sie müssen genau ein Feld (includedNamespaces oder includedVirtualMachines im ApplicationSpec angeben. Die gleichzeitige Verwendung beider in derselben Anwendung ist nicht möglich.
Beide Modi unterstützen zusätzliche Filter:
-
`resourceFilter`verwenden, um bestimmte Ressourcen einzuschließen oder auszuschließen.
-
Mit
includedClusterScopedResourceskönnen kompatible, clusterweite Ressourcen wieStorageClassObjekte einbezogen werden.
|
|
Trident Protect kann die KubeVirt VM-Dateisysteme während Datensicherungsoperationen einfrieren und wieder auftauen, um Konsistenz sicherzustellen. Einzelheiten zur Konfiguration sind unter "Datensicherung mit KubeVirt VMs" zu finden. |
Während der Sicherung und des Snapshots erfasste Ressourcen
Wenn eine Sicherung oder ein Snapshot für eine Anwendung erstellt wird, die KubeVirt VMs umfasst, sammelt Trident Protect die ausgewählten VM-Ressourcen und erkennt automatisch deren abhängige Ressourcen.
Das Sammlungsverhalten gilt in zwei Fällen:
-
VM-bezogene Anwendungen, die
includedVirtualMachinesverwenden. -
Namespace-basierte Anwendungen, die KubeVirt
VirtualMachineRessourcen enthalten.
VM-bezogene Sammlung
Für VM-bezogene Anwendungen beginnt Trident Protect mit jeder VirtualMachine in includedVirtualMachines aufgeführten VM und ermittelt die abhängigen Ressourcen, die zur Wiederherstellung dieser VM benötigt werden.
| Ressourcentyp | Umfang | Wie es entdeckt wird |
|---|---|---|
|
Namespace-bezogen |
Direkter Treffer aus der |
|
Namespace-bezogen |
Gleicher Namespace und Name wie die VM, wenn die VM ausgeführt wird. |
|
Namespace-bezogen |
Referenziert von |
|
Cluster |
Wird referenziert durch |
|
Namespace-bezogen |
Referenziert von |
|
Cluster |
Wird referenziert durch |
|
Namespace-bezogen |
Referenziert von |
|
Namespace-bezogen |
Erkannt aus DataVolume-backing PVCs, die denselben Namen wie die DataVolume verwenden; direkte PVC-Referenzen in |
|
Cluster |
Für jedes erfasste PVC wird dies aus dem zugrunde liegenden PV mithilfe von |
|
Namespace-bezogen |
Ermittelt aus Volume-Secrets in |
|
Namespace-bezogen |
Entdeckt aus dem Volume ConfigMaps in |
|
Namespace-bezogen |
Aus `serviceAccount.serviceAccountName`Volume-Referenzen ermittelt. |
|
Namespace-bezogen |
Ermittelt aus Multus-Netzwerken |
|
Namespace-bezogen |
Für |
Storage Class, Trident Volumes und Trident Backends |
Cluster |
Gesammelt auf die gleiche Weise wie bei namespace-basierten Anwendungen, basierend auf den für die VM ermittelten PVCs. |
|
|
Nachdem alle VM-bezogenen Namespaced-Ressourcen erfasst wurden, wendet Trident Protect die Standard resourceFilter-Methode an, sofern eine konfiguriert ist. Die Erfassung von Cluster-bezogenen Ressourcen erfolgt anschließend wie gewohnt.
|
Namespace-basierte Sammlung
Für Namespace-basierte Anwendungen scannt Trident Protect die ausgewählten Namespaces und erfasst alle übereinstimmenden Ressourcen. Wenn KubeVirt VirtualMachine Objekte gefunden werden, sammelt Trident Protect automatisch deren abhängige Ressourcen, einschließlich Instanztypen, Präferenzen und `virt-launcher`Pods, wie es auch bei VM-basierten Anwendungen geschieht.
Dies bedeutet, dass VM-spezifische Ressourcen auch dann in Ihre Sicherung oder Ihren Snapshot einbezogen werden, wenn die Anwendung mit includedNamespaces definiert ist.
VMs mit namespace-basierten Anwendungsdefinitionen schützen
Wenn eine namespace-basierte Anwendung erstellt wird, scannt Trident Protect die ausgewählten Namespaces und erfasst alle Ressourcen, einschließlich aller KubeVirt VMs. Für jede gefundene virtuelle Maschine sammelt Trident Protect außerdem die abhängigen Ressourcen, die für das Sichern und Wiederherstellen dieser VM benötigt werden.
Beispiel für eine namensraumbasierte Anwendungs-CR:
apiVersion: protect.trident.netapp.io/v1
kind: Application
metadata:
name: <application_name>
namespace: <application_namespace>
spec:
includedNamespaces:
- namespace: <vm_namespace>
Nachdem Sie die Anwendung erstellt haben, werden die Standard Trident Protect Workflows für Backups und Snapshots verwendet:
-
Beispiele für Snapshot YAML sind unter "Erstellen Sie einen On-Demand Snapshot" zu finden.
-
Beispiele für Backup-YAML-Dateien sind unter "Erstellen Sie ein On-Demand-Backup" zu finden.
Wiederherstellungsverhalten für namespace-basierte VM-Anwendungen
Da namespace-basierte Anwendungen Ressourcen aus den ausgewählten Namespaces sammeln, kann das Backup oder der Snapshot KubeVirt-Laufzeitobjekte und von KubeVirt verwaltete Metadaten enthalten. Einige dieser Objekte sollten nicht direkt wiederhergestellt werden, da sie den Laufzeitstatus des Quell-Cluster repräsentieren.
Während der Wiederherstellung wendet Trident Protect KubeVirt-aware-Transformationen an, um Quell-Cluster-Metadaten zu entfernen und temporäre KubeVirt-Ressourcen zu überspringen. Dies unterstützt KubeVirt dabei, die VM in der wiederhergestellten Umgebung sauber neu zu erstellen.
| Ressource | Transformieren |
|---|---|
VirtualMachine |
Entfernt Beschriftungen und Anmerkungen, die mit |
VirtualMachineInstance |
Entfernt Beschriftungen und Anmerkungen, die mit |
VirtualMachineInstanceMigration |
Ignoriert und nicht wiederhergestellt. |
VirtualMachineSnapshot |
Ignoriert und nicht wiederhergestellt. |
VirtualMachineSnapshotContent |
Ignoriert und nicht wiederhergestellt. |
Pod ( |
Wird übersprungen, wenn das Pod das |
|
|
Trident Protect stellt KubeVirt-Ressourcen in einer definierten Reihenfolge wieder her, um Abhängigkeitsprobleme zu vermeiden. CDI DataVolumes (cdi.kubevirt.io werden zuerst wiederhergestellt, damit die VM-Festplattendaten verfügbar sind, bevor die VM-Objekte erstellt werden. Anschließend werden VirtualMachines (kubevirt.io vor VirtualMachineInstances wiederhergestellt.
|
Dynamischer VM-Schutz mit Label-Selektoren
Wenn Sie VMs dynamisch schützen möchten, ohne jeden VM-Namen aufzulisten, verwenden Sie namespace-basierte Anwendungsdefinitionen mit Label-Selektoren.
Nur die VirtualMachine CR benötigt Labels. Abhängige Ressourcen wie DataVolumes, PVCs, Secrets und ConfigMaps werden automatisch erfasst.
-
Virtuelle Maschinen-CRs mit einem gemeinsamen Label versehen:
kubectl label virtualmachine <vm_name 1> app=<label_value> -n <vm_namespace> kubectl label virtualmachine <vm_name_2> app=<label_value> -n <vm_namespace> -
Eine Anwendungs-CR mit
includedNamespacesund einemlabelSelectorerstellen: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> -
Backups und Wiederherstellungen werden mit dem Standard-Trident Protect Workflow erstellt.
Weitere Details:
-
VMs können jederzeit durch Ändern der Bezeichnungen zum Schutz hinzugefügt oder daraus entfernt werden:
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>
-
Sie können Label-Selektoren auch über mehrere Namensräume hinweg verwenden:
spec:
includedNamespaces:
- namespace: <vm_namespace_1>
labelSelector:
matchLabels:
<label_key>: <label_value>
- namespace: <vm_namespace_2>
labelSelector:
matchLabels:
<label_key>: <label_value>
Bestimmte VMs mit includedVirtualMachines schützen
Verwenden Sie includedVirtualMachines diese Funktion, wenn eine benannte Gruppe von VirtualMachines über einen oder mehrere Namespaces hinweg geschützt und bestimmte VMs selektiv aus einem Archiv wiederhergestellt werden sollen.
Sowohl die Anwendungs-CRs als auch die Wiederherstellungs-CRs verwenden das gleiche includedVirtualMachines Selector-Format.
Dieser Selektor kann in verschiedenen Kontexten verwendet werden:
-
In einer Anwendungs-CR ist festgelegt, welche VMs geschützt sind.
-
In einem Wiederherstellungs-CR wird definiert, welche VMs aus dem Backup- oder Snapshot-Archiv wiederhergestellt werden.
|
|
Bei der Wiederherstellung von CRs includedVirtualMachines ist die Angabe optional. Wenn dieses Feld nicht enthalten ist, wird das gesamte Archiv wiederhergestellt. Wenn es angegeben ist, werden nur die aufgeführten VMs und ihre abhängigen Ressourcen wiederhergestellt.
|
Das folgende YAML zeigt die gemeinsame Selektorstruktur:
includedVirtualMachines:
- namespace: <vm_namespace_1>
names:
- <vm_name_1>
- <vm_name_2>
- namespace: <vm_namespace_2>
names:
- <vm_name_3>
|
|
Mehrere Einträge in includedVirtualMachines können auf unterschiedliche Namensräume verweisen, was die Definition und Wiederherstellung von VM-fähigen Anwendungen mit mehreren Namensräumen ermöglicht.
|
| Feld | Typ | Beschreibung |
|---|---|---|
Namensraum |
Zeichenfolge |
Kubernetes Namespace, der die Ziel-VM-Objekte enthält. |
Namen |
Liste von Zeichenketten |
Ein oder mehrere virtuelle Maschinennamen in diesem Namensraum. |
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
Bestimmte KubeVirt VMs wiederherstellen
Sie können includedVirtualMachines auf Wiederherstellungs-CRs anwenden, um nur ausgewählte KubeVirt VMs aus einem Backup, Snapshot oder replizierten Snapshot-Archiv wiederherzustellen.
Wenn includedVirtualMachines in einem Wiederherstellungs-CR angegeben ist, stellt Trident Protect nur die aufgeführten VirtualMachines und deren abhängige Ressourcen wie VirtualMachineInstance, DataVolume, PersistentVolumeClaim, PersistentVolume, Secret, ConfigMap, ServiceAccount und andere VM-bezogene Objekte wieder her.
Wenn includedVirtualMachines im Restore-CR nicht angegeben wird, stellt Trident Protect das vollständige Archiv entsprechend der Restore-CR-Konfiguration wieder her.
Unterstützte Wiederherstellungs-CRs und CLI-Befehle
Die folgende Tabelle listet die Wiederherstellungs-CRs auf, die includedVirtualMachines unterstützen, sowie die entsprechenden CLI-Befehle.
| CR-Wiederherstellung | CLI Befehl | Beschreibung |
|---|---|---|
|
|
Stellt Daten aus einer Sicherung in neue oder andere Namespace-Zuordnungen wieder her. Unterstützt |
|
|
Stellt eine Sicherung im ursprünglichen Namensraum oder in den ursprünglichen Namensräumen wieder her. |
|
|
Stellt aus einem Snapshot neue oder andere Namespace-Zuordnungen wieder her. Unterstützt |
|
|
Stellt einen Snapshot im ursprünglichen Namensraum oder in den ursprünglichen Namensräumen wieder her. |
|
Nur YAML oder den unterstützten CLI-Befehl verwenden, falls in Ihrer Umgebung verfügbar |
Stellt Daten aus einem replizierten Snapshot wieder her. Unterstützt |
|
|
Die tridentctl-protect CLI bietet keine Option für includedVirtualMachines bei Wiederherstellungsbefehlen. Um bestimmte VMs wiederherzustellen, muss eine Wiederherstellungs-CR-YAML-Datei direkt mit kubectl apply angewendet werden. Die YAML-Datei kann von Grund auf neu erstellt oder mit der CLI unter Verwendung von --dry-run --output yaml eine Startdatei generiert werden. Anschließend wird das includedVirtualMachines Feld unter spec hinzugefügt und die Datei angewendet.
|
VM-bezogenes Wiederherstellungsverhalten
Das `includedVirtualMachines`Feld in einem Wiederherstellungs-CR verwendet dasselbe Selektorformat wie das Anwendungs-CR:
includedVirtualMachines:
- namespace: <source_vm_namespace>
names:
- <vm_name_1>
- <vm_name_2>
Bei Wiederherstellungs-CRs beziehen sich die Namespace-Werte in includedVirtualMachines auf die Quell-Namespaces, wie sie im Backup, Snapshot oder replizierten Snapshot-Archiv vorliegen.
Wenn Sie `namespaceMapping`Trident verwenden, wählt Trident Protect zunächst die angeforderten VMs aus dem Quellarchiv aus und wendet anschließend die Namespace-Zuordnungen während der Wiederherstellung an. Wenn Sie `storageClassMapping`Trident verwenden, wendet Trident Protect die Storage-Class-Zuordnungen während der Transformationsphase der Wiederherstellung an.
Wiederherstellungs-YAML mit der Befehlszeile generieren
Mit tridentctl-protect lässt sich eine Basis-Restore-CR generieren, anschließend kann die YAML-Datei bearbeitet werden, um includedVirtualMachines hinzuzufügen.
tridentctl-protect create <restore_command> <restore_name> \
<restore_options> \
--dry-run --output yaml > <restore_name>.yaml
Bearbeiten Sie die generierte YAML-Datei und fügen Sie das includedVirtualMachines Feld unter spec hinzu, dann die Datei anwenden:
kubectl apply -f <restore_name>.yaml
Beispiel: Definition einer VM-basierten Anwendung
Die folgende Anwendung schützt drei spezifische VMs in zwei Namensräumen.
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
Beispiel: Backup erstellen
Für die Erstellung einer Sicherung einer VM-basierten Anwendung wird die Standard-Backup-CR verwendet. VM-spezifische Felder sind in der Backup-CR nicht erforderlich.
apiVersion: protect.trident.netapp.io/v1
kind: Backup
metadata:
name: daily-backup
namespace: prod
spec:
applicationRef: production-vms
appVaultRef: s3-vault
Beispiel: Wiederherstellung einer einzelnen VM aus einer Sicherung
Das folgende Beispiel stellt nur database-server aus dem Backup-Archiv wieder her. Die anderen VMs im Archiv, wie app-server und prometheus-vm, werden übersprungen.
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
Nur database-server und die davon abhängigen Ressourcen wie DataVolumes, PVCs, PVs, Secrets, ConfigMaps und zugehörige KubeVirt-Ressourcen werden wiederhergestellt.
Beispiel: Wiederherstellung einer einzelnen VM vor Ort aus einer Sicherung
Das folgende Beispiel stellt nur database-server in seinen ursprünglichen Namensraum aus dem Sicherungsarchiv wieder her.
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
Beispiel: Wiederherstellung einer einzelnen VM aus einem Snapshot
Das folgende Beispiel stellt nur ubuntu-vm-blue-a627be38 aus einem Snapshot-Archiv wieder her.
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
VM-Wiederherstellung mit anderen Filtern kombinieren
Sie können includedVirtualMachines zusammen mit resourceFilter, namespaceMapping und storageClassMapping im selben Wiederherstellungs-CR verwenden, um genau festzulegen, was wiederhergestellt wird.
Wenn eine resourceFilter hinzugefügt wird, wählt Trident Protect zunächst die in includedVirtualMachines aufgeführten VMs und deren abhängige Ressourcen aus. Anschließend wird der Ressourcenfilter angewendet, um die ein- oder auszuschließenden Ressourcen aus diesen Ergebnissen weiter einzugrenzen.
spec:
includedVirtualMachines:
- namespace: <vm_namespace>
names:
- <vm_name>
resourceFilter:
resourceSelectionCriteria: Include
resourceMatchers:
- kinds: ["PersistentVolumeClaim"]
names: ["<pvc_name>"]
Für BackupRestore, SnapshotRestore und ReplicateSnapshotRestore, namespaceMapping und storageClassMapping arbeiten zusammen mit includedVirtualMachines. Namespace-Referenzen in includedVirtualMachines entsprechen den Quell-Namespaces, wie sie im Archiv erscheinen. Namespace- und Speicherklassenzuordnungen werden während der Wiederherstellungstransformationsphase nach Abschluss der Filterung angewendet.
Einzelheiten zum Wiederherstellungsverhalten sind unter "Anwendungen mit Trident Protect wiederherstellen" zu finden.
Eine VM-bezogene Anwendung mithilfe der Befehlszeilenschnittstelle erstellen
Das --virtual-machines`Flag kann verwendet werden, um eine Anwendung auf bestimmte KubeVirt VMs anstatt auf ganze Namensräume zu beschränken. Das `--virtual-machines`Flag schließt sich mit `--namespaces gegenseitig aus.
-
Die Anwendung wird erstellt, indem einer der folgenden Befehle ausgeführt und die Werte in Klammern durch Informationen aus Ihrer Umgebung ersetzt werden. Das Format für das
--virtual-machinesFlag ist<namespace>(<vm_name>). Bei mehreren VMs werden die Namen in den Klammern durch Kommas getrennt angegeben:-
Einzelne VM in einem Namespace:
tridentctl-protect create application <application_name> \ -n <application_namespace> \ --virtual-machines "<vm_namespace>(<vm_name>)" -
Mehrere VMs in verschiedenen Namensräumen:
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>)"
-