はじめに
本記事では、OpenShift上のアプリケーションをOpenShift API for Data Protection (OADP) によりバックアップする際、VolumeSnapshotClassのDeletionPolicyによる挙動の違いを確認します。
目次
検証環境
以下のように、OpenShiftのアプリケーションを外部のオブジェクトストレージにバックアップできる環境に対して、OADPの機能検証を行います。
本検証では、クラスタを構成する全てのノードをIBM Powerサーバ (ppc64le) のLPARに構築しています。OpenShiftの永続ストレージはIBM Storage Scale、オブジェクトストレージはMinIOを使用しています。
CNSAによりOpenShiftからIBM Storage Scaleを永続ストレージとして使用するための環境構築手順はこちらの記事、OADPによりアプリケーションをオブジェクトストレージにバックアップする環境構築手順はこちらの記事をご参照ください。
前提条件
以下の作業が完了していることを想定しています。
- OpenShiftクラスタが構築済み
- ストレージ側のScaleクラスタが構築済み
- ストレージ側のScaleクラスタにファイルシステムが作成済み
- ストレージ側のScaleクラスタ内のnsd nodeにScale GUIを構成済み
- OpenShiftクラスタにCNSAをインストール・構成済み
- OADPがインストール・構成済み
DeletionPolicyがRetainの場合の挙動
まずは、DeletionPolicyがRetainの設定でバックアップを実行して、snapshotの状態を確認します。
bastion nodeへSSHログインします。
# ssh root@<BASTION_NODE>
VolumeSnapshotClassのDeletionPolicyを現状設定を確認します。(この例では、Retainが設定されている想定です)
# oc get vsclass
NAME DRIVER DELETIONPOLICY AGE
ibm-spectrum-scale-snapshot-class spectrumscale.csi.ibm.com Retain 6d3h
動作確認用にプロジェクトを作成します。
# oc new-project test1
プロジェクト内にPVCを作成します。(この例では、data1を作成しています)
# oc apply -f pvc_data1.yaml
persistentvolumeclaim/data1 created
プロジェクト内に上記PVを使用するPodを作成します。
# oc apply -f app.yaml
deployment.apps/test1-app created
PVが正常に作成されたことを確認します。
# oc get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
data1 Bound pvc-2293d977-d743-4082-83e4-0c0486dfd60d 100Gi RWO ibm-spectrum-scale-sample 104s
動作確認用に作成したtest1というnamespaceに対して、バックアップを取得します。
cat << EOF > backup_test1.yaml
apiVersion: velero.io/v1
kind: Backup
metadata:
name: backup-retain-1
namespace: openshift-adp
spec:
storageLocation: default
includedNamespaces:
- test1
EOF
# oc apply -f backup_test1.yaml
backup.velero.io/backup-retain-1 created
VolumeSnapshotを確認すると、バックアップ取得後に、スナップショットが一旦現れますが、オブジェクトストレージへのバックアップが完了したタイミングで消えました。
# oc get volumesnapshot
NAME READYTOUSE SOURCEPVC SOURCESNAPSHOTCONTENT RESTORESIZE SNAPSHOTCLASS SNAPSHOTCONTENT CREATIONTIME AGE
velero-data1-nzl9h true data1 100Gi ibm-spectrum-scale-snapshot-class snapcontent-52170727-eba9-48a8-8832-09847172e405 4s 5s
# oc get volumesnapshot
No resources found in test1 namespace.
-> バックアップ完了後に自動的に削除されました
MinIOのGUIからbucketの中身を確認すると、backup-retain-1がバックアップされていることが確認できました。
VolumeSnapshotContentsを確認すると、直前にバックアップしたものが見えました。(RESTORESIZEはPVと同じサイズでした)
# oc get volumesnapshotcontents
NAME READYTOUSE RESTORESIZE DELETIONPOLICY DRIVER VOLUMESNAPSHOTCLASS VOLUMESNAPSHOT VOLUMESNAPSHOTNAMESPACE AGE
snapcontent-52170727-eba9-48a8-8832-09847172e405 true 107374182400 Retain spectrumscale.csi.ibm.com ibm-spectrum-scale-snapshot-class velero-data1-nzl9h test1 16s
DeletionPolicyがDeleteの場合の挙動
次に、DeletionPolicyがDeleteの設定でバックアップを実行して、snapshotの状態を確認します。
VolumeSnapshotClassのDeletionPolicyをRetainからDeleteに変更します。
# cat << EOF > snapshot-class.yaml
apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshotClass
metadata:
name: ibm-spectrum-scale-snapshot-class
labels:
velero.io/csi-volumesnapshot-class: "true"
driver: spectrumscale.csi.ibm.com
deletionPolicy: Delete
EOF
# oc apply -f snapshot-class.yaml
volumesnapshotclass.snapshot.storage.k8s.io/ibm-spectrum-scale-snapshot-class configured
DeletionPolicyがDeleteになったことを確認します。
# oc get vsclass
NAME DRIVER DELETIONPOLICY AGE
ibm-spectrum-scale-snapshot-class spectrumscale.csi.ibm.com Delete 18s
動作確認用に作成したtest1というnamespaceに対して、バックアップを取得します。
# cat << EOF > backup_test1.yaml
apiVersion: velero.io/v1
kind: Backup
metadata:
name: backup-delete-1
namespace: openshift-adp
spec:
storageLocation: default
includedNamespaces:
- test1
EOF
# oc apply -f backup_test1.yaml
backup.velero.io/backup-delete-1 created
VolumeSnapshotを確認すると、バックアップ取得後に、スナップショットが一旦現れますが、オブジェクトストレージへのバックアップが完了したタイミングで消えました。(これは、DeletionPolicyがRetainの場合と同じ挙動でした)
# oc get volumesnapshot
NAME READYTOUSE SOURCEPVC SOURCESNAPSHOTCONTENT RESTORESIZE SNAPSHOTCLASS SNAPSHOTCONTENT CREATIONTIME AGE
velero-data1-65wch true data1 100Gi ibm-spectrum-scale-snapshot-class snapcontent-6f255d31-8066-4790-84ec-1056ead47e94 5s 5s
# oc get volumesnapshot
No resources found in test1 namespace.
-> バックアップ完了後に自動的に削除されました
MinIOのGUIからbucketの中身を確認すると、backup-delete-1がバックアップされていることが確認できました。
VolumeSnapshotContentsを確認すると、snapshotは見えますが、Deleteで取得した方 (snapcontent-6f255d31-8066-4790-84ec-1056ead47e94) は、Retainで取得した方とは異なり、RESTORESIZEが0となっていて、namespaceはtest1ではなくなっていました。
# oc get volumesnapshotcontents
NAME READYTOUSE RESTORESIZE DELETIONPOLICY DRIVER VOLUMESNAPSHOTCLASS VOLUMESNAPSHOT VOLUMESNAPSHOTNAMESPACE AGE
snapcontent-52170727-eba9-48a8-8832-09847172e405 true 107374182400 Retain spectrumscale.csi.ibm.com ibm-spectrum-scale-snapshot-class velero-data1-nzl9h test1 4m12s
snapcontent-6f255d31-8066-4790-84ec-1056ead47e94 true 0 Retain spectrumscale.csi.ibm.com ibm-spectrum-scale-snapshot-class name-694ed118-611b-49e4-9341-c62fe7d78f4d ns-694ed118-611b-49e4-9341-c62fe7d78f4d 29s
まとめ
OpenShift上のアプリケーションをOADPによりバックアップする際に、VolumeSnapshotClassのDeletionPolicyによる挙動の違いを確認しました。DeletionPolicyに依らず、VolumeSnapshotはバックアップ完了とともに自動的に削除されましたが、VolumeSnapshotContentsは保持される・されないという違いが見られました。