Google Kubernetes Engine(GKE)の Kubernetes ボリューム スナップショット機能は、GKE クラスタ内の永続ボリュームで使用できます。
ボリューム スナップショットを使用すると、特定の時点でのボリュームのコピーを作成できます。このコピーを使用して、ボリュームを以前の状態に戻すことができます。また、新しいボリュームのプロビジョニングもできます。
バージョン 1.17 以降では、次のコンポーネントを使用してボリューム スナップショットをプロビジョニングしてアタッチできます。
要件
GKE でボリューム スナップショットを使用する場合、次の要件があります。
スナップショットをサポートする CSI ドライバをインストールする必要があります。スナップショットは、ツリー内の永続ディスク ドライバではサポートされません。Compute Engine 永続ディスクの CSI ドライバを使用している場合は、ドライバを自動的にデプロイして管理オーバーヘッドを削減することをおすすめします。スナップショットをサポートするすべての CSI ドライバの一覧については、Kubernetes ドキュメントのドライバにある「その他の機能」の列をご覧ください。
GKE バージョン 1.17 以降のバージョンのコントロール プレーン(マスター)を使用する必要があります。Compute Engine 永続ディスクの CSI ドライバを使用するには、VolumeSnapshot で GKE バージョン 1.17.6-gke.4 以降を使用します。
スナップショットを作成するには、既存の PersistentVolumeClaim が必要です。スナップショット ソースに使用する PersistentVolume は、CSI ドライバによって管理される必要があります。CSI ドライバを使用しているかどうかを確認するには、PersistentVolume の仕様の
csi
セクションでdriver: pd.csi.storage.gke.io
が指定されているかを確かめます。以降のセクションで説明のとおり、PersistentVolume が CSI ドライバによって動的にプロビジョニングされると、CSI ドライバによって管理されます。
VolumeSnapshotClass の作成
VolumeSnapshotClass を作成して、ボリューム スナップショットの CSI ドライバと deletionPolicy
を決定します。VolumeSnapshot で VolumeSnapshotClass を参照できます。
次に、VolumeSnapshotClass の例として snapshot-class-example.yaml
という名前のマニフェストを示します。
# snapshot-class-example.yaml
apiVersion: snapshot.storage.k8s.io/v1beta1
kind: VolumeSnapshotClass
metadata:
name: snapshot-class
driver: csi-driver
deletionPolicy: Delete
以下を置き換えます。
snapshot-class
は、VolumeSnapshotClass の名前です。csi-driver
で、スナップショットのプロビジョニングに使用する CSI ドライバを指定します。たとえば、Compute Engine 永続ディスクの CSI ドライバを使用するようにpd.csi.storage.gke.io
を追加できます。Delete
を指定すると、バインドされている VolumeSnapshot が削除された際に、VolumeSnapshotContent オブジェクトが削除されます。また、基となるストレージ システムのスナップショットも削除されます。VolumeSnapshotContent を保持する場合は、この値をRetain
に設定します。
VolumeSnapshotClass を作成するには、ファイルの作成後に次のコマンドを実行します。
kubectl apply -f snapshot-class-example.yaml
VolumeSnapshot の作成
VolumeSnapshot は、既存の PersistentVolumeClaim のスナップショットのリクエストです。
次に、VolumeSnapshot の例として snapshot-example.yaml
という名前のマニフェストを示します。
#snapshot-example.yaml
apiVersion: snapshot.storage.k8s.io/v1beta1
kind: VolumeSnapshot
metadata:
name: snapshot
spec:
volumeSnapshotClassName: snapshot-class
source:
persistentVolumeClaimName: pvc
以下を置き換えます。
snapshot
は VolumeSnapshot の名前です。snapshot-class
で、参照する VolumeSnapshotClass の名前を指定します。値を指定しない場合、デフォルトの VolumeSnapshotClass が使用されます(使用可能な場合)。pvc
は、スナップショットを取得する既存の PersistentVolumeClaim の名前です。
VolumeSnapshot を作成するには、ファイルの作成後に次のコマンドを実行します。
kubectl apply -f snapshot-example.yaml
VolumeSnapshot の作成の確認
ボリューム スナップショットを作成すると、対応する VolumeSnapshotContent オブジェクトがクラスタ内に作成されます。このオブジェクトには、VolumeSnapshot オブジェクトのスナップショットとバインディングが格納されます。VolumeSnapshotContents オブジェクトを直接操作することはありません。
VolumeSnapshotContents が作成されているかどうかを確認するには、次のコマンドを実行します。
kubectl get volumesnapshotcontents
出力は次のようになります。
NAME AGE
snapcontent-cee5fb1f-5427-11ea-a53c-42010a1000da 55s
ボリューム スナップ ショットのコンテンツが作成されると、VolumeSnapshotClass
で指定した CSI ドライバによって、対応するストレージ システムにスナップショットが作成されます。GKE がストレージ システムにスナップショットを作成し、クラスタ上のボリューム スナップショット オブジェクトにバインドすると、スナップショットが使用できるようになります。ステータスを確認するには、次のコマンドを実行します。
kubectl get volumesnapshot \
-o custom-columns='NAME:.metadata.name,READY:.status.readyToUse'
使用する準備ができている場合、出力は次のようになります。
NAME READY
snapshot-example true
VolumeSnapshot を使用したボリュームのプロビジョニングと復元
PersistentVolumeClaim で VolumeSnapshot を参照すると、既存のボリュームのデータで新しいボリュームをプロビジョニングしたり、スナップショットでキャプチャした状態にボリュームを復元したりできます。
PersistentVolumeClaim で VolumeSnapshot を参照するには、dataSource
フィールドを PersistentVolumeClaim に追加します。
次に、dataSource
フィールドの追加方法の例として pvc-demo.yaml
というマニフェストを示します。
# pvc-demo.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-demo
spec:
dataSource:
name: snapshot-name
kind: VolumeSnapshot
apiGroup: snapshot.storage.k8s.io
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 30Gi
dataSource
に次のフィールドが含まれていることを確認してください。
snapshot-name
は、使用する VolumeSnapshot の名前です。kind
がVolumeSnapshot
でなければなりません。apiGroup
がsnapshot.storage.k8s.io
でなければなりません。
PersistentVolumeClaim に変更を適用するには、次のコマンドを実行します。
kubectl apply -f pvc-demo.yaml
VolumeSnapshot の削除
VolumeSnapshot を削除するには、次のコマンドを実行します。
kubectl delete volumesnapshot snapshot-example
ボリューム スナップショットの VolumeSnapshotClass
に deletionPolicy:Delete
が含まれる場合、対応する VolumeSnapshotContent
とストレージ システムの物理スナップショットも削除されます。deletionPolicy:Retain
がある場合、GKE は物理スナップショットを保持します。
次のステップ
- Kubernetes ボリューム スナップショットのドキュメントを読む。
- ボリュームの拡張について学習する。
- CSI ドライバを手動でインストールする方法を学習する。