Ändern Sie Ressourcen während der Wiederherstellung mithilfe benutzerdefinierter Ressourcen
Ressourcentransformationen ermöglichen es Ihnen, eine Ressource während der Wiederherstellung zu modifizieren. Dies ist nützlich, wenn die wiederhergestellte Version von der ursprünglichen Version abweichen soll – beispielsweise die Änderung der IP-Adresse einer virtuellen Maschine bei der Wiederherstellung in einem anderen Netzwerk. Sie können auch "Modifizieren Sie Ressourcen während der Wiederherstellung mithilfe der Web-Benutzeroberfläche".
Erforderliche NetApp Console-Rolle Backup and Recovery Superadministrator oder Backup and Recovery Wiederherstellungsadministrator. "Erfahren Sie mehr über die Zugriffsrollen für NetApp Backup and Recovery". "Erfahren Sie mehr über die Zugriffsrollen der NetApp Console für alle Dienste".
Wie Ressourcenmodifikation funktioniert
Das transformations Feld in SnapshotRestore, BackupRestore, AppMirrorRelationship und anderen Wiederherstellungsressourcen ermöglicht es Ihnen, Kubernetes-Ressourcen während des Wiederherstellungsprozesses zu ändern. Dies ist nützlich, um Anwendungen oder virtuelle Maschinen an einen neuen Cluster anzupassen, indem Sie Hostnamen, Registry-URLs, Ressourcenlimits oder Umgebungsvariablen ändern.
Ressourcentransformationen verwenden "RFC 6902" JSON-Patch-Operationen und "RFC 6901" JSON-Pointer-Pfade, um bestimmte Felder innerhalb von Kubernetes-Ressourcen anzusprechen und zu modifizieren.
Hier ist die grundlegende Struktur eines Wiederherstellungsobjekts, das Ressourcentransformationen enthält:
apiVersion: protect.trident.netapp.io/v1
kind: SnapshotRestore
metadata:
name: my-restore
namespace: target-namespace
spec:
appVaultRef: my-vault
appArchivePath: /path/to/snapshot
namespaceMapping:
- source: source-ns
destination: target-ns
transformations:
- resource:
kind: ConfigMap # Required: resource kind
group: "" # Optional: API group (empty for core resources)
version: "" # Optional: API version
name: "" # Optional: specific resource name
operations:
- op: replace # Operation type
path: "/data/key" # JSON Pointer path
value: "new-value" # New value (for add/replace/test)
Unterstützte Ressourcen
Sie können Ressourcentransformationen mit Ressourcen verwenden, die den folgenden Kriterien entsprechen:
-
kind(erforderlich): Der Kubernetes-Ressourcentyp (zum Beispiel,ConfigMap,Deployment,Pod) -
group(optional): Die API-Gruppe (zum Beispiel,apps,route.openshift.io) - für Kernressourcen weglassen -
version(optional): Die API-Version (z. B.v1,v1beta1) -
name(optional): Nur auf eine bestimmte Ressource anhand des Namens anwenden
|
|
Die Modifizierung von PersistentVolumeClaims und Namespaces wird derzeit nicht unterstützt. |
Unterstützte Operationen
Sie können die folgenden Operationen verwenden, um Ressourcen zu ändern:
-
add: Füge einer Ressource einen Wert hinzu. -
copy: Einen Wert von einem Pfad in einen anderen kopieren. -
move: Einen Wert innerhalb einer Ressource verschieben. -
remove: Einen Wert aus einer Ressource entfernen. -
replace: Ersetzen Sie einen Wert innerhalb einer Ressource. -
test: Testen Sie eine Operation, bevor Sie sie ausführen.
Einer Ressource einen Wert hinzufügen
Verwenden Sie die add-Operation, um ein neues Feld oder einen neuen Wert am angegebenen Pfad hinzuzufügen. Sie können Daten zu Objekten oder Arrays hinzufügen. Das folgende Beispiel fügt einer Deployment-Ressource einen Knotenselektor hinzu:
transformations:
- resource:
kind: Deployment
operations:
- op: add
path: "/spec/template/spec/nodeSelector"
value:
"topology.kubernetes.io/zone": "us-east-1a"
disktype: "ssd"
Verwenden Sie den folgenden Befehl, um diese Transformation über die Befehlszeile auszuführen:
tridentctl-protect --transformation 'apps,v1,Deployment:add{"path":"/spec/template/spec/nodeSelector","value":{"topology.kubernetes.io/zone":"us-east-1a","disktype":"ssd"}}'
Einen Wert innerhalb einer Ressource kopieren
Verwenden Sie die `copy`Operation, um einen Wert innerhalb derselben Ressource von einem Pfad in einen anderen zu kopieren. Die Quelle bleibt unverändert. Das folgende Beispiel dupliziert einen Datenschlüssel für ein ConfigMap-Objekt:
transformations:
- resource:
kind: ConfigMap
operations:
- op: copy
from: "/data/source-key"
path: "/data/backup-key"
Verwenden Sie den folgenden Befehl, um diese Transformation über die Befehlszeile auszuführen:
tridentctl-protect --transformation ',v1,ConfigMap:copy{"from":"/data/source-key","path":"/data/backup-key"}'
Verschieben Sie einen Wert innerhalb einer Ressource
Verwenden Sie die move-Operation, um einen Wert innerhalb derselben Ressource von einem Pfad zu einem anderen zu verschieben. Die Quelle wird entfernt und der Wert am Zielort eingefügt. Das folgende Beispiel benennt einen Datenschlüssel für ein ConfigMap-Objekt um:
transformations:
- resource:
kind: ConfigMap
operations:
- op: move
from: "/data/OLD_KEY"
path: "/data/NEW_KEY"
Verwenden Sie den folgenden Befehl, um diese Transformation über die Befehlszeile auszuführen:
tridentctl-protect --transformation ',v1,ConfigMap:move{"from":"/data/OLD_KEY","path":"/data/NEW_KEY"}'
Einen Wert aus einer Ressource entfernen
Verwenden Sie die remove Operation, um ein Feld oder einen Wert am angegebenen Pfad zu entfernen. Das folgende Beispiel entfernt eine Annotation aus einer ConfigMap-Ressource:
transformations:
- resource:
kind: ConfigMap
operations:
- op: remove
path: "/metadata/annotations/kubectl.kubernetes.io~1last-applied-configuration"
|
|
Im Pfad des obigen Beispiels ~1 ist die JSON Pointer Escape-Sequenz für /.
|
Verwenden Sie den folgenden Befehl, um diese Transformation über die Befehlszeile auszuführen:
tridentctl-protect --transformation ',v1,ConfigMap:remove{"path":"/metadata/annotations/kubectl.kubernetes.io~1last-applied-configuration"}'
Ersetzen Sie einen Wert innerhalb einer Ressource
Verwenden Sie die replace Operation, um einen vorhandenen Wert innerhalb einer Ressource am angegebenen Pfad zu ersetzen. Der JSON-Pfad muss bereits existieren. Das folgende Beispiel ändert einen Hostnamen für ein Route-Objekt:
transformations:
- resource:
kind: Route
group: route.openshift.io
operations:
- op: replace
path: "/spec/host"
value: "prod.example.com"
Verwenden Sie den folgenden Befehl, um diese Transformation über die Befehlszeile auszuführen:
tridentctl-protect --transformation 'route.openshift.io,v1,Route:replace{"path":"/spec/host","value":"prod.example.com"}'
Testen Sie die Ressourcenänderung
Verwenden Sie die test`Operation, um zu testen, ob der Wert an einem Pfad dem erwarteten Wert entspricht. Wenn der Test fehlschlägt, wird die gesamte Änderung zurückgesetzt. Im folgenden Beispiel wird `database-host`nur aktualisiert, wenn `environment staging entspricht:
transformations:
- resource:
kind: ConfigMap
operations:
- op: test
path: "/data/environment"
value: "staging"
- op: replace
path: "/data/database-host"
value: "prod-db.example.com"
Verwenden Sie den folgenden Befehl, um diese Transformation über die Befehlszeile auszuführen:
tridentctl-protect --transformation ',v1,ConfigMap:test{"path":"/data/environment","value":"staging"},replace{"path":"/data/database-host","value":"prod-db.example.com"}'