スナップショットを操作します
永続ボリューム(PV)のKubernetesボリュームSnapshotを使用すると、ボリュームのポイントインタイムコピーを作成できます。Astra Tridentを使用して作成したボリュームのSnapshotの作成、Astra Trident外で作成したSnapshotのインポート、既存のSnapshotから新しいボリュームの作成、Snapshotからボリュームデータをリカバリできます。
概要
ボリュームSnapshotは、、 ontap-nas-flexgroup
ontap-san
、 ontap-san-economy
solidfire-san
、、、でサポートされます ontap-nas
。 gcp-cvs
、および `azure-netapp-files`ドライバ。
スナップショットを操作するには、外部スナップショットコントローラとカスタムリソース定義(CRD)が必要です。Kubernetesオーケストレーションツール(例:Kubeadm、GKE、OpenShift)の役割を担っています。
KubernetesディストリビューションにスナップショットコントローラとCRDが含まれていない場合は、を参照してくださいボリュームSnapshotコントローラの導入。
GKE環境でオンデマンドボリュームスナップショットを作成する場合は、スナップショットコントローラを作成しないでください。GKEでは、内蔵の非表示のスナップショットコントローラを使用します。 |
ボリューム Snapshot を作成します
-
を作成し `VolumeSnapshotClass`ます。詳細については、を参照してください"ボリュームSnapshotクラス"。
-
はAstra Trident CSIドライバを示してい `driver`ます。
-
deletionPolicy`には、または `Retain`を指定できます `Delete
。に設定する `Retain`と、オブジェクトが削除されても、ストレージクラスタの基盤となる物理Snapshotが保持され `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のボリュームSnapshotオブジェクトを作成し
pvc1
、Snapshotの名前をに設定して `pvc1-snap`います。VolumeSnapshotはPVCに似ており、実際のSnapshotを表すオブジェクトに関連付けられて `VolumeSnapshotContent`います。kubectl create -f snap.yaml volumesnapshot.snapshot.storage.k8s.io/pvc1-snap created kubectl get volumesnapshots NAME AGE pvc1-snap 50s
-
VolumeSnapshotのオブジェクト
pvc1-snap`を説明することで特定できます `VolumeSnapshotContent
。はSnapshot Content Name
、このSnapshotを提供するVolumeSnapshotContentオブジェクトを識別します。パラメータは、 `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 . .
-
ボリュームSnapshotからPVCを作成
を使用して、という名前のVolumeSnapshotをデータのソースとして使用してPVCを作成 <pvc-name>`できます `dataSource
。作成された PVC は、ポッドに接続して、他の PVC と同様に使用できます。
PVCはソースボリュームと同じバックエンドに作成されます。を参照してください "KB:Trident PVCスナップショットから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
ボリュームSnapshotのインポート
Astra Tridentでは、がサポートされます"Kubernetesの事前プロビジョニングされたSnapshotプロセス"。クラスタ管理者は、Astra Tridentの外部で作成されたオブジェクトの作成やSnapshotのインポートを行うことができ `VolumeSnapshotContent`ます。
Astra TridentでSnapshotの親ボリュームが作成またはインポートされている必要があります。
-
*クラスタ管理者:*バックエンドSnapshotを参照するオブジェクトを作成します
VolumeSnapshotContent
。これにより、Astra TridentでSnapshotワークフローが開始されます。-
にバックエンドスナップショットの名前を
trident.netapp.io/internalSnapshotName: <"backend-snapshot-name">`指定します `annotations
。 -
で指定し
<name-of-parent-volume-in-trident>/<volume-snapshot-content-name>
snapshotHandle`ます。この情報は、呼び出しで外部Snapshot者からAstra Tridentに提供される唯一の情報です `ListSnapshots
。CRの名前の制約により、は `<volumeSnapshotContentName>`バックエンドスナップショット名と常に一致しません。 例次の例では、バックエンドスナップショットを参照するオブジェクトを `snap-01`作成し `VolumeSnapshotContent`ます。
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>
-
-
*クラスタ管理者:*オブジェクトを参照するCR
VolumeSnapshotContent`を作成します `VolumeSnapshot
。これにより、指定された名前空間でを使用するためのアクセスが要求され `VolumeSnapshot`ます。例次の例では、という名前
import-snap-content`を参照する `VolumeSnapshotContent`という名前のCRを `import-snap`作成します `VolumeSnapshot
。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
-
外部スナップショットは、をに `readyToUse`設定し、 `VolumeSnapshot`をに `true`設定し `VolumeSnapshotContent`ます。
-
Tridentが戻ります
readyToUse=true
。
-
-
*任意のユーザー:*を作成し
PersistentVolumeClaim`て、新しいを参照します `VolumeSnapshot
。spec.dataSource
(またはspec.dataSourceRef
)の名前は名前ですVolumeSnapshot
。例次に、という名前の `import-snap`を参照するPVCを作成する例を示し `VolumeSnapshot`ます。
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
Snapshotを使用したボリュームデータのリカバリ
デフォルトでは、ドライバと `ontap-nas-economy`ドライバを使用してプロビジョニングされたボリュームの互換性を最大限に高めるため、snapshotディレクトリは非表示になってい `ontap-nas`ます。ディレクトリがスナップショットからデータを直接リカバリできるようにし `.snapshot`ます。
ボリュームを以前のSnapshotに記録されている状態にリストアするには、ボリュームSnapshotリストアONTAP CLIを使用します。
cluster1::*> volume snapshot restore -vserver vs0 -volume vol3 -snapshot vol3_snap_archive
Snapshotコピーをリストアすると、既存のボリューム設定が上書きされます。Snapshotコピーの作成後にボリュームデータに加えた変更は失われます。 |
Snapshotが関連付けられているPVを削除する
スナップショットが関連付けられている永続ボリュームを削除すると、対応する Trident ボリュームが「削除状態」に更新されます。ボリュームSnapshotを削除してAstra Tridentボリュームを削除します。
ボリュームSnapshotコントローラの導入
KubernetesディストリビューションにスナップショットコントローラとCRDが含まれていない場合は、次のように導入できます。
-
ボリュームの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
-
スナップショットコントローラを作成します。
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`ます。