使用快照
Kubernetes 持續磁碟區( PV )的磁碟區快照可啟用磁碟區的時間點複本。您可以建立使用 Astra Trident 建立的磁碟區快照、匯入 Astra Trident 外部建立的快照、從現有快照建立新的磁碟區、以及從快照復原磁碟區資料。
總覽
支援Volume Snapshot ontap-nas
、 ontap-nas-flexgroup
、 ontap-san
、 ontap-san-economy
、 solidfire-san
、 gcp-cvs`和 `azure-netapp-files
驅動程式:
您必須擁有外部快照控制器和自訂資源定義( CRD )、才能使用快照。這是Kubernetes Orchestrator的責任(例如:Kubeadm、GKE、OpenShift)。
如果您的Kubernetes發佈版本未包含快照控制器和CRD、請參閱 部署 Volume Snapshot 控制器。
如果在 GKE 環境中建立隨需磁碟區快照、請勿建立快照控制器。GKE使用內建的隱藏式快照控制器。 |
建立磁碟區快照
-
建立
VolumeSnapshotClass
。如需詳細資訊、請參閱 "Volume SnapshotClass"。-
。
driver
指向 Astra Trident CSI 驅動程式。 -
deletionPolicy
可以Delete
或Retain
。設定為時Retain
、儲存叢集上的基礎實體快照、即使在VolumeSnapshot
物件已刪除。範例cat snap-sc.yaml apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshotClass metadata: name: csi-snapclass driver: csi.trident.netapp.io deletionPolicy: Delete
-
-
建立現有 PVC 的快照。
範例-
此範例會建立現有PVc的快照。
cat snap.yaml apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshot metadata: name: pvc1-snap spec: volumeSnapshotClassName: csi-snapclass source: persistentVolumeClaimName: pvc1
-
此範例會為名稱為 PVC 的 Volume Snapshot 物件建立一個
pvc1
快照名稱設為pvc1-snap
。Volume Snapshot類似於PVC、並與相關聯VolumeSnapshotContent
代表實際快照的物件。kubectl create -f snap.yaml volumesnapshot.snapshot.storage.k8s.io/pvc1-snap created kubectl get volumesnapshots NAME AGE pvc1-snap 50s
-
您可以識別
VolumeSnapshotContent
的物件pvc1-snap
描述Volume Snapshot。。Snapshot Content Name
識別提供此快照的Volume SnapshotContent物件。。Ready To Use
參數表示快照可用於建立新的 PVC 。kubectl describe volumesnapshots pvc1-snap Name: pvc1-snap Namespace: default . . . Spec: Snapshot Class Name: pvc1-snap Snapshot Content Name: snapcontent-e8d8a0ca-9826-11e9-9807-525400f3f660 Source: API Group: Kind: PersistentVolumeClaim Name: pvc1 Status: Creation Time: 2019-06-26T15:27:29Z Ready To Use: true Restore Size: 3Gi . .
-
從磁碟區快照建立 PVC
您可以使用 dataSource
使用名為的 Volume Snapshot 建立 PVC <pvc-name>
做為資料來源。建立好永久虛擬基礎架構之後、就能將它附加到Pod上、就像使用任何其他永久虛擬基礎架構一樣使用。
將在來源 Volume 所在的同一個後端建立 PVC 。請參閱 "KB :無法在替代後端建立 Trident PVC Snapshot 的 PVC"。 |
以下範例使用建立 PVC pvc1-snap
做為資料來源。
cat pvc-from-snap.yaml apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-from-snap spec: accessModes: - ReadWriteOnce storageClassName: golden resources: requests: storage: 3Gi dataSource: name: pvc1-snap kind: VolumeSnapshot apiGroup: snapshot.storage.k8s.io
匯入 Volume 快照
Astra Trident 支援 "Kubernetes 預先配置的快照程序" 可讓叢集管理員建立 VolumeSnapshotContent
在 Astra Trident 外部建立的物件和匯入快照。
Astra Trident 必須已建立或匯入快照的父磁碟區。
-
* 叢集管理: * 建立
VolumeSnapshotContent
參照後端快照的物件。這會啟動 Astra Trident 中的快照工作流程。-
在中指定後端快照的名稱
annotations
做為trident.netapp.io/internalSnapshotName: <"backend-snapshot-name">
。 -
指定
<name-of-parent-volume-in-trident>/<volume-snapshot-content-name>
在中snapshotHandle
。這是中外部快照機提供給 Astra Trident 的唯一資訊ListSnapshots
致電:。 <volumeSnapshotContentName>
由於 CR 命名限制、無法永遠符合後端快照名稱。範例下列範例建立
VolumeSnapshotContent
參照後端快照的物件snap-01
。
apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshotContent metadata: name: import-snap-content annotations: trident.netapp.io/internalSnapshotName: "snap-01" # This is the name of the snapshot on the backend spec: deletionPolicy: Retain driver: csi.trident.netapp.io source: snapshotHandle: pvc-f71223b5-23b9-4235-bbfe-e269ac7b84b0/import-snap-content # <import PV name or source PV name>/<volume-snapshot-content-name>
-
-
* 叢集管理: * 建立
VolumeSnapshot
參照的 CRVolumeSnapshotContent
物件:這會要求存取權以使用VolumeSnapshot
在指定的命名空間中。範例下列範例建立
VolumeSnapshot
CR 命名import-snap
這是參考的VolumeSnapshotContent
已命名import-snap-content
。apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshot metadata: name: import-snap spec: # volumeSnapshotClassName: csi-snapclass (not required for pre-provisioned or imported snapshots) source: volumeSnapshotContentName: import-snap-content
-
* 內部處理(不需採取任何行動): * 外部快照機可辨識新建立的
VolumeSnapshotContent
並執行ListSnapshots
致電:Astra Trident 會建立TridentSnapshot
。-
外部快照器會設定
VolumeSnapshotContent
至readyToUse
和VolumeSnapshot
至true
。 -
Trident 退貨
readyToUse=true
。
-
-
* 任何使用者: * 建立
PersistentVolumeClaim
以參考新的VolumeSnapshot
、其中spec.dataSource
(或spec.dataSourceRef
)名稱為VolumeSnapshot
名稱。範例下列範例建立一個 PVC 參照
VolumeSnapshot
已命名import-snap
。apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-from-snap spec: accessModes: - ReadWriteOnce storageClassName: simple-sc resources: requests: storage: 1Gi dataSource: name: import-snap kind: VolumeSnapshot apiGroup: snapshot.storage.k8s.io
使用快照恢復 Volume 資料
快照目錄預設為隱藏、以協助使用進行資源配置的磁碟區達到最大相容性 ontap-nas
和 ontap-nas-economy
驅動程式:啟用 .snapshot
直接從快照恢復資料的目錄。
使用 Volume Snapshot Restore ONTAP CLI 將磁碟區還原至先前快照中記錄的狀態。
cluster1::*> volume snapshot restore -vserver vs0 -volume vol3 -snapshot vol3_snap_archive
當您還原快照複本時、會覆寫現有的 Volume 組態。建立快照複本之後對 Volume 資料所做的變更將會遺失。 |
刪除含有相關快照的 PV
刪除具有相關快照的持續Volume時、對應的Trident Volume會更新為「刪除狀態」。移除 Volume 快照以刪除 Astra Trident Volume 。
部署 Volume Snapshot 控制器
如果您的Kubernetes發佈版本未包含快照控制器和客戶需求日、您可以依照下列方式進行部署。
-
建立Volume Snapshot客戶需求日。
cat snapshot-setup.sh #!/bin/bash # Create volume snapshot CRDs kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-6.1/client/config/crd/snapshot.storage.k8s.io_volumesnapshotclasses.yaml kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-6.1/client/config/crd/snapshot.storage.k8s.io_volumesnapshotcontents.yaml kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-6.1/client/config/crd/snapshot.storage.k8s.io_volumesnapshots.yaml
-
建立Snapshot控制器。
kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-6.1/deploy/kubernetes/snapshot-controller/rbac-snapshot-controller.yaml kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-6.1/deploy/kubernetes/snapshot-controller/setup-snapshot-controller.yaml
如有必要、請開啟 deploy/kubernetes/snapshot-controller/rbac-snapshot-controller.yaml
和更新namespace
到您的命名空間。