Skip to main content
本製品の最新リリースがご利用いただけます。
日本語は機械翻訳による参考訳です。内容に矛盾や不一致があった場合には、英語の内容が優先されます。

スナップショットを操作します

共同作成者

永続ボリューム(PV)のKubernetesボリュームSnapshotを使用すると、ボリュームのポイントインタイムコピーを作成できます。Tridentを使用して作成したボリュームのSnapshotの作成、Tridentの外部で作成したSnapshotのインポート、既存のSnapshotからの新しいボリュームの作成、Snapshotからのボリュームデータのリカバリを実行できます。

概要

ボリュームSnapshotは、、 ontap-nas-flexgroup ontap-sanontap-san-economy solidfire-san、、、でサポートされます ontap-nasgcp-cvs、および `azure-netapp-files`ドライバ。

開始する前に

スナップショットを操作するには、外部スナップショットコントローラとカスタムリソース定義(CRD)が必要です。Kubernetesオーケストレーションツール(例:Kubeadm、GKE、OpenShift)の役割を担っています。

KubernetesディストリビューションにスナップショットコントローラとCRDが含まれていない場合は、を参照してくださいボリュームSnapshotコントローラの導入

メモ GKE環境でオンデマンドボリュームスナップショットを作成する場合は、スナップショットコントローラを作成しないでください。GKEでは、内蔵の非表示のスナップショットコントローラを使用します。

ボリューム Snapshot を作成します

手順
  1. を作成し `VolumeSnapshotClass`ます。詳細については、を参照してください"ボリュームSnapshotクラス"

    • は `driver`Trident CSIドライバを示しています。

    • 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
  2. 既存の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のインポート

Tridentでは、クラスタ管理者がを"Kubernetesの事前プロビジョニングされたSnapshotプロセス"使用して、オブジェクトを作成したり、Tridentの外部で作成されたSnapshotをインポートしたりできます VolumeSnapshotContent

開始する前に

TridentでSnapshotの親ボリュームが作成またはインポートされている必要があります。

手順
  1. *クラスタ管理者:*バックエンドSnapshotを参照するオブジェクトを作成します VolumeSnapshotContent。これにより、TridentでSnapshotワークフローが開始されます。

    • にバックエンドスナップショットの名前を trident.netapp.io/internalSnapshotName: <"backend-snapshot-name">`指定します `annotations

    • で指定します <name-of-parent-volume-in-trident>/<volume-snapshot-content-name> snapshotHandle。この情報は、呼び出しで外部スナップショットによって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>
      volumeSnapshotRef:
        name: import-snap
        namespace: default
  2. *クラスタ管理者:*オブジェクトを参照する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
  3. *内部処理(アクション不要):*外部スナップショットは、新しく作成されたを認識して VolumeSnapshotContent`呼び出しを実行します `ListSnapshots。Tridentによってが作成され `TridentSnapshot`ます。

    • 外部スナップショットは、をに `readyToUse`設定し、 `VolumeSnapshot`をに `true`設定し `VolumeSnapshotContent`ます。

    • Tridentが戻ります readyToUse=true

  4. *任意のユーザー:*を作成し PersistentVolumeClaim`て、新しいを参照します `VolumeSnapshotspec.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からのインプレースボリュームのリストア

Tridentでは、(TASR)CRを使用してSnapshotからボリュームをインプレースで迅速にリストアできます TridentActionSnapshotRestore。このCRはKubernetesの必須アクションとして機能し、処理の完了後も維持されません。

Tridentは、、 ontap-san-economy ontap-nas、、 ontap-nas-flexgroup azure-netapp-files、、で gcp-cvs`のSnapshotリストアをサポートしています。 `ontap-sangoogle-cloud-netapp-volumes、および `solidfire-san`ドライバ。

開始する前に

バインドされたPVCと使用可能なボリュームSnapshotが必要です。

  • PVCステータスがバインドされていることを確認します。

    kubectl get pvc
  • ボリュームSnapshotを使用する準備が完了していることを確認します。

    kubectl get vs
手順
  1. TASR CRを作成します。この例では、PVCおよびボリュームスナップショット用のCRを作成し pvc1 `pvc1-snapshot`ます。

    メモ TASR CRは、PVCおよびVSが存在する名前空間に存在する必要があります。
cat tasr-pvc1-snapshot.yaml

apiVersion: trident.netapp.io/v1
kind: TridentActionSnapshotRestore
metadata:
  name: trident-snap
  namespace: trident
spec:
  pvcName: pvc1
  volumeSnapshotName: pvc1-snapshot
  1. スナップショットからリストアするにはCRを適用します。この例では、Snapshotからリストアし `pvc1`ます。

    kubectl create -f tasr-pvc1-snapshot.yaml
    
    tridentactionsnapshotrestore.trident.netapp.io/trident-snap created
結果

Tridentはスナップショットからデータをリストアします。Snapshotのリストアステータスを確認できます。

kubectl get tasr -o yaml

apiVersion: trident.netapp.io/v1
items:
- apiVersion: trident.netapp.io/v1
  kind: TridentActionSnapshotRestore
  metadata:
    creationTimestamp: "2023-04-14T00:20:33Z"
    generation: 3
    name: trident-snap
    namespace: trident
    resourceVersion: "3453847"
    uid: <uid>
  spec:
    pvcName: pvc1
    volumeSnapshotName: pvc1-snapshot
  status:
    startTime: "2023-04-14T00:20:34Z"
    completionTime: "2023-04-14T00:20:37Z"
    state: Succeeded
kind: List
metadata:
  resourceVersion: ""
メモ
  • ほとんどの場合、障害が発生したときにTridentで処理が自動的に再試行されることはありません。この操作を再度実行する必要があります。

  • 管理者アクセス権を持たないKubernetesユーザは、アプリケーションネームスペースにTASR CRを作成するために、管理者から権限を付与されなければならない場合があります。

Snapshotが関連付けられているPVを削除する

スナップショットが関連付けられている永続ボリュームを削除すると、対応する Trident ボリュームが「削除状態」に更新されます。ボリュームSnapshotを削除してTridentボリュームを削除します。

ボリュームSnapshotコントローラの導入

KubernetesディストリビューションにスナップショットコントローラとCRDが含まれていない場合は、次のように導入できます。

手順
  1. ボリュームの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
  2. スナップショットコントローラを作成します。

    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`ます。