ボリュームグループのスナップショットを操作する
永続ボリューム(PV)の Kubernetes ボリューム グループ スナップショット NetApp Trident は、複数のボリュームのスナップショット(ボリューム スナップショットのグループ)を作成する機能を提供します。このボリューム グループ スナップショットは、同じポイントインタイムで作成された複数のボリュームからのコピーを表します。
|
|
VolumeGroupSnapshotは、ベータ API を備えた Kubernetes のベータ機能です。Kubernetes 1.32は、VolumeGroupSnapshotに必要な最小バージョンです。 |
ボリュームグループのSnapshotを作成する
ボリュームグループスナップショットは、次のストレージドライバでサポートされます:
-
`ontap-san`ドライバ - iSCSI および FC プロトコルのみで、NVMe/TCP プロトコルには使用できません。
-
ontap-san-economy- iSCSI プロトコルのみ。 -
ontap-nas
|
|
ボリュームグループのスナップショットは、NetApp ASA r2 または AFX ストレージシステムではサポートされていません。 |
-
Kubernetes のバージョンが K8s 1.32 以上であることを確認してください。
-
スナップショットを操作するには、外部スナップショットコントローラーとカスタムリソース定義(CRD)が必要です。これは Kubernetes オーケストレーター(例: Kubeadm 、 GKE 、OpenShift)の責任です。
Kubernetesディストリビューションに外部スナップショットコントローラとCRDが含まれていない場合は、ボリュームSnapshotコントローラを導入するを参照してください。
GKE 環境でオンデマンドボリュームグループスナップショットを作成する場合は、スナップショットコントローラを作成しないでください。GKE は組み込みの隠しスナップショットコントローラを使用します。 -
スナップショットコントローラYAMLで、 `CSIVolumeGroupSnapshot`機能ゲートを'true'に設定して、ボリュームグループのスナップショットが有効になっていることを確認します。
-
ボリュームグループスナップショットを作成する前に、必要なボリュームグループスナップショットクラスを作成します。
-
すべてのPVC/ボリュームが同じSVM上にあることを確認して、VolumeGroupSnapshotを作成できるようにします。
-
VolumeGroupSnapshot を作成する前に、VolumeGroupSnapshotClass を作成してください。詳細については、"VolumeGroupSnapshotClass" を参照してください。
apiVersion: groupsnapshot.storage.k8s.io/v1beta1 kind: VolumeGroupSnapshotClass metadata: name: csi-group-snap-class annotations: kubernetes.io/description: "Trident group snapshot class" driver: csi.trident.netapp.io deletionPolicy: Delete -
既存のストレージクラスを使用して必要なラベルを持つ PVC を作成するか、これらのラベルを既存の PVC に追加します。
次の例では、 `pvc1-group-snap`をデータソースとして、 `consistentGroupSnapshot: groupA`をラベルとして使用してPVCを作成します。要件に応じてラベルのキーと値を定義します。
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: pvc1-group-snap
labels:
consistentGroupSnapshot: groupA
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 100Mi
storageClassName: sc1-1
-
PVC で指定されたラベル((
consistentGroupSnapshot: groupA)と同じラベルを持つ VolumeGroupSnapshot を作成します。この例では、ボリュームグループのスナップショットを作成します:
apiVersion: groupsnapshot.storage.k8s.io/v1beta1
kind: VolumeGroupSnapshot
metadata:
name: "vgs1"
namespace: trident
spec:
volumeGroupSnapshotClassName: csi-group-snap-class
source:
selector:
matchLabels:
consistentGroupSnapshot: groupA
グループSnapshotを使用してボリュームデータをリカバリする
ボリューム グループ スナップショットの一部として作成された個々のスナップショットを使用して、個々の永続ボリュームをリストアできます。ボリューム グループ スナップショットをユニットとしてリカバリすることはできません。
volume snapshot restore ONTAP CLIを使用して、ボリュームを以前のスナップショットに記録された状態に復元します。
cluster1::*> volume snapshot restore -vserver vs0 -volume vol3 -snapshot vol3_snap_archive
|
|
Snapshotコピーをリストアすると、既存のボリューム構成が上書きされます。Snapshotコピーの作成後にボリュームデータに加えられた変更は失われます。 |
Snapshotからのインプレースボリュームリストア
Tridentは、 TridentActionSnapshotRestore(TASR)CRを使用して、スナップショットから迅速なインプレースボリュームリストアを提供します。このCRは命令型のKubernetesアクションとして機能し、操作の完了後は保持されません。
詳細については、"Snapshotからのインプレースボリュームリストア"を参照してください。
関連するグループスナップショットを含む PV を削除する
グループボリュームのスナップショットを削除する場合:
-
VolumeGroupSnapshotsは、グループ内の個々のスナップショットではなく、グループ全体として削除できます。
-
PersistentVolumesにスナップショットが存在する状態で削除された場合、Tridentはそのボリュームを「削除中」状態に移動します。これは、ボリュームを安全に削除する前にスナップショットを削除する必要があるためです。
-
グループ化されたスナップショットを使用してクローンが作成され、その後グループを削除する場合、split-on-clone処理が開始され、分割が完了するまでグループを削除することはできません。
ボリュームSnapshotコントローラを導入する
KubernetesディストリビューションにスナップショットコントローラとCRDが含まれていない場合は、次のようにデプロイできます。
-
ボリュームスナップショット CRD を作成します。
cat snapshot-setup.sh
#!/bin/bash # Create volume snapshot CRDs kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-8.2/client/config/crd/groupsnapshot.storage.k8s.io_volumegroupsnapshotclasses.yaml kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-8.2/client/config/crd/groupsnapshot.storage.k8s.io_volumegroupsnapshotcontents.yaml kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-8.2/client/config/crd/groupsnapshot.storage.k8s.io_volumegroupsnapshots.yaml -
Snapshot Controller を作成します。
kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-8.2/deploy/kubernetes/snapshot-controller/rbac-snapshot-controller.yamlkubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-8.2/deploy/kubernetes/snapshot-controller/setup-snapshot-controller.yaml必要に応じて `deploy/kubernetes/snapshot-controller/rbac-snapshot-controller.yaml`を開き、 `namespace`をネームスペースに更新します。