27.21.4.2. スナップショットの作成
PV のスナップショットを作成するには、新しい VolumeSnapshot
オブジェクトを以下のように作成します。
apiVersion: volumesnapshot.external-storage.k8s.io/v1 kind: VolumeSnapshot metadata: name: snapshot-demo spec: persistentVolumeClaimName: ebs-pvc
persistentVolumeClaimName
は、PersistentVolume
にバインドされる PersistentVolumeClaim
の名前です。この特定 PV のスナップショットが作成されます。
次に、VolumeSnapshot
に基づく VolumeSnapshotData
オブジェクトが自動的に作成されます。VolumeSnapshot
と VolumeSnapshotData
の関係は PersistentVolumeClaim
と PersistentVolume
の関係に似ています。
PV のタイプによっては、反映される VolumeSnapshot
の状態に応じ、操作が複数の段階にわたる場合があります。
-
新規
VolumeSnapshot
オブジェクトが作成されます。 -
コントローラーによってスナップショット操作が開始されます。スナップショット対象の
PersistentVolume
をフリーズし、アプリケーションを一時停止する必要が生じる場合があります。 -
ストレージシステムによるスナップショットの作成が完了し (スナップショットが切り取られ)、スナップショット対象の
PersistentVolume
が通常の操作に戻ります。スナップショット自体の準備はまだできていません。ここでの状態はPending
タイプで状態の値はTrue
です。実際のスナップショットを表すVolumeSnapshotData
オブジェクトが新たに作成されます。 -
新規スナップショットの作成が完成し、使用できる状態になります。ここでの状態は
Ready
タイプで、状態の値はTrue
です。
データの整合性の確保 (Pod/アプリケーションの停止、キャッシュのフラッシュ、ファイルシステムのフリーズなど) はユーザーの責任で行う必要があります。
エラーの場合は、VolumeSnapshot
の状態が Error
状態に追加されます。
VolumeSnapshot
の状態を表示するには、以下を実行します。
$ oc get volumesnapshot -o yaml
状態が以下のように表示されます。
apiVersion: volumesnapshot.external-storage.k8s.io/v1 kind: VolumeSnapshot metadata: clusterName: "" creationTimestamp: 2017-09-19T13:58:28Z generation: 0 labels: Timestamp: "1505829508178510973" name: snapshot-demo namespace: default resourceVersion: "780" selfLink: /apis/volumesnapshot.external-storage.k8s.io/v1/namespaces/default/volumesnapshots/snapshot-demo uid: 9cc5da57-9d42-11e7-9b25-90b11c132b3f spec: persistentVolumeClaimName: ebs-pvc snapshotDataName: k8s-volume-snapshot-9cc8813e-9d42-11e7-8bed-90b11c132b3f status: conditions: - lastTransitionTime: null message: Snapshot created successfully reason: "" status: "True" type: Ready creationTimestamp: null