在 NetApp Backup and Recovery 還原期間修改 Kubernetes 資源
在還原作業期間,可以使用資源轉換來修改 Kubernetes 資源。有關在 Web UI 中修改資源的資訊,請參閱"在還原期間修改資源"。
必要的 NetApp Console 角色 備份與還原超級管理員或備份與還原還原管理員。如果您要保護儲存在 Cloud Volumes ONTAP 叢集上的資料,則還需要 Cloud Volumes ONTAP 管理員角色。"了解NetApp Backup and Recovery存取角色". "了解所有服務的NetApp Console存取角色".
資源修改的運作方式
`transformations` 欄位位於 `SnapshotRestore`、 `BackupRestore`、 `AppMirrorRelationship` 及其他還原資源中,可讓您在還原過程中修改 Kubernetes 資源。這對於透過變更主機名稱、登錄 URL、資源限制或環境變數,使應用程式或虛擬機器適應新叢集非常有用。
資源轉換使用 "RFC 6902" JSON Patch 操作和 "RFC 6901" JSON Pointer 路徑來定位和修改 Kubernetes 資源中的特定欄位。
以下範例展示了包含資源轉換的還原物件的基本結構:
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)
支援的資源
您可以將資源轉換套用至符合下列條件的資源:
-
kind(必填):Kubernetes 資源類型(例如ConfigMap、Deployment、Pod) -
group(可選):API 群組(例如,apps,route.openshift.io)— 對於核心資源,請省略 -
version(選用):API 版本(例如、v1、v1beta1) -
name(選用):僅依名稱套用至特定資源
|
|
目前不支援修改 PersistentVolumeClaims 和命名空間。 |
支援的作業
您可以使用以下操作來修改資源:
-
add:為資源新增值。 -
copy:將值從一個路徑複製到另一個路徑。 -
move:在資源內移動值。 -
remove:從資源中移除一個值。 -
replace:替換資源中的值。 -
test:在執行操作之前先進行測試。
為資源新增值
使用 add 操作可在指定路徑新增欄位或值。您可以為物件或陣列新增資料。以下範例為 Deployment 資源新增節點選擇器:
transformations:
- resource:
kind: Deployment
operations:
- op: add
path: "/spec/template/spec/nodeSelector"
value:
"topology.kubernetes.io/zone": "us-east-1a"
disktype: "ssd"
使用以下命令透過命令列執行此轉換:
tridentctl-protect --transformation 'apps,v1,Deployment:add{"path":"/spec/template/spec/nodeSelector","value":{"topology.kubernetes.io/zone":"us-east-1a","disktype":"ssd"}}'
複製資源中的值
使用 copy 操作可將相同資源內的值從一個路徑複製到另一個路徑。來源值不會改變。以下範例複製 ConfigMap 物件的資料鍵:
transformations:
- resource:
kind: ConfigMap
operations:
- op: copy
from: "/data/source-key"
path: "/data/backup-key"
使用以下命令透過命令列執行此轉換:
tridentctl-protect --transformation ',v1,ConfigMap:copy{"from":"/data/source-key","path":"/data/backup-key"}'
在資源內移動值
使用 `move`操作可將相同資源中的值從一個路徑移至另一個路徑。來源路徑將被移除,值將被放置在目標路徑中。以下範例重新命名 ConfigMap 物件的資料鍵:
transformations:
- resource:
kind: ConfigMap
operations:
- op: move
from: "/data/OLD_KEY"
path: "/data/NEW_KEY"
使用以下命令透過命令列執行此轉換:
tridentctl-protect --transformation ',v1,ConfigMap:move{"from":"/data/OLD_KEY","path":"/data/NEW_KEY"}'
從資源中移除值
使用 remove 操作可刪除指定路徑中的欄位或值。以下範例從 ConfigMap 資源中刪除註解:
transformations:
- resource:
kind: ConfigMap
operations:
- op: remove
path: "/metadata/annotations/kubectl.kubernetes.io~1last-applied-configuration"
|
|
在上述範例的路徑中、 ~1 是 / 的 JSON Pointer 轉義序列。
|
使用以下命令透過命令列執行此轉換:
tridentctl-protect --transformation ',v1,ConfigMap:remove{"path":"/metadata/annotations/kubectl.kubernetes.io~1last-applied-configuration"}'
取代資源中的值
使用此 `replace`操作可取代指定路徑下資源中的現有值。JSON 指標路徑必須已存在。以下範例更改 Route 物件的 hostname:
transformations:
- resource:
kind: Route
group: route.openshift.io
operations:
- op: replace
path: "/spec/host"
value: "prod.example.com"
使用以下命令透過命令列執行此轉換:
tridentctl-protect --transformation 'route.openshift.io,v1,Route:replace{"path":"/spec/host","value":"prod.example.com"}'
測試資源修改
使用 test`操作來測試指定路徑的值是否符合預期值。如果測試失敗,整個修改將會回復。以下範例僅在 `database-host`為 `environment`時才會更新 `staging:
transformations:
- resource:
kind: ConfigMap
operations:
- op: test
path: "/data/environment"
value: "staging"
- op: replace
path: "/data/database-host"
value: "prod-db.example.com"
使用以下命令透過命令列執行此轉換:
tridentctl-protect --transformation ',v1,ConfigMap:test{"path":"/data/environment","value":"staging"},replace{"path":"/data/database-host","value":"prod-db.example.com"}'