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

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

共同作成者

永続ボリューム(PV)のKubernetesボリュームSnapshotを使用すると、ボリュームのポイントインタイムコピーを作成できます。Astra Tridentを使用して作成したボリュームのSnapshotの作成、Astra 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クラス"

    • は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
  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のインポート

Astra Tridentでは、がサポートされます"Kubernetesの事前プロビジョニングされたSnapshotプロセス"。クラスタ管理者は、Astra Tridentの外部で作成されたオブジェクトの作成やSnapshotのインポートを行うことができ `VolumeSnapshotContent`ます。

開始する前に

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

手順
  1. *クラスタ管理者:*バックエンド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>
  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。Astra 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が関連付けられているPVを削除する

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