はじめに
本記事では、OpenShift API for Data Protection (OADP) を使用して、OpenShift上のアプリケーションをオブジェクトストレージにバックアップする環境を構築する手順を示します。
目次
検証環境
以下のように、master node 3ノード、worker node 2ノードで構成されるOpenShiftクラスタ (左)、及びストレージ側のNSD node 2ノードで構成されるScaleクラスタ (右)、がそれぞれ構築済みで、かつOpenShiftクラスタからリモートのStorage Scaleを永続ストレージとして使用できる環境に対して、アプリケーションを外部のオブジェクトストレージにバックアップできるように構成します。
オブジェクトストレージは簡易的にbastion node上にMinIOを稼働させ、これを使用することとします。bastion nodeへのMinIOの導入・設定、及びOADPによるバックアップ環境の構築は本記事内で実施します。
なお、本検証ではクラスタを構成する全てのノードをIBM Powerサーバ (ppc64le) のLPARに構築しています。
(補足) CNSAによりOpenShiftからIBM Storage Scaleを永続ストレージとして使用するための環境構築手順はこちらの記事をご参照下さい。
前提条件
以下の作業が完了していることを想定しています。
- OpenShiftクラスタが構築済み
- ストレージ側のScaleクラスタが構築済み
- ストレージ側のScaleクラスタにファイルシステムが作成済み
- ストレージ側のScaleクラスタ内のnsd nodeにScale GUIを構成済み
- OpenShiftクラスタにCNSAをインストール・構成済み
オブジェクトストレージの準備
今回は簡易検証のため、専用のオブジェクトストレージは準備せず、bastion nodeにMinIOを稼働させ、OADPの動作を確認することにします。
bastion nodeへSSHログインします。
# ssh root@<BASTION_NODE>
MinIOのコンテナイメージを取得・実行します。(bastion nodeでは9000番ポートはOpenShiftで使用済みのため、代わりに19000番ポートを使用しています)
podman run -d -p 19000:9000 -p 9001:9001 quay.io/minio/minio server /data --console-address ":9001"
前ステップで指定したポートに対するアクセスを許可します。
# firewall-cmd --add-port=19000/tcp --zone=public --permanent
success
# firewall-cmd --add-port=9001/tcp --zone=public --permanent
success
firewallの設定をリロードします。
# firewall-cmd --reload
success
ブラウザから9001番ポートにアクセスして、以下のようなログイン画面が出てくれば、MinIOは正常に稼働しています。(初期設定では、minioadmin/minioadminでログインできます)
ログインできたら、バックアップ用のbucketを作成しておきます。
OADP Operatorのインストール
OpenShift Webコンソールにログインして、左のメニューからOperatorHubを選択後、"oadp"で検索するとOADP Operatorが見つかりますので、default設定でインストールします。
OADP設定の事前作業
OpenShiftクラスタへログインします。
# oc login https://<URL>:6443 -u kubeadmin
VolumeSnapshotClassを作成します。
# 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: Retain
EOF
# oc apply -f snapshot-class.yaml
VolumeSnapshotClassが作成されたことを確認します。
# oc get vsclass
NAME DRIVER DELETIONPOLICY AGE
ibm-spectrum-scale-snapshot-class spectrumscale.csi.ibm.com Retain 12s
試しに、volume snapshotを作成してみます。(ibm-spectrum-scale-pvc-1というPVCが作成済み想定です。PVC名は環境に合わせて変更してください)
# cat << EOF > snapshot_test.yaml
apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshot
metadata:
name: ibm-spectrum-scale-vol-snapshot
spec:
volumeSnapshotClassName: ibm-spectrum-scale-snapshot-class
source:
persistentVolumeClaimName: ibm-spectrum-scale-pvc-1
EOF
# oc apply -f snapshot_test.yaml
volume snapshotが作成されたことを確認します。
# oc get volumesnapshot
NAME READYTOUSE SOURCEPVC SOURCESNAPSHOTCONTENT RESTORESIZE SNAPSHOTCLASS SNAPSHOTCONTENT CREATIONTIME AGE
ibm-spectrum-scale-vol-snapshot true ibm-spectrum-scale-pvc-1 1Gi ibm-spectrum-scale-csi-snapshot-class snapcontent-2b4e0718-24d8-432c-98a3-75a9ba0bc33b 6s 7s
StorageClassのdefaultを設定します。
# oc patch storageclass ibm-spectrum-scale-csi-fileset -p '{"metadata":{"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
storageclass.storage.k8s.io/ibm-spectrum-scale-csi-fileset patched
default設定されたことを確認します。
# oc get storageclass
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
ibm-spectrum-scale-csi-fileset (default) spectrumscale.csi.ibm.com Delete Immediate false 4d12h
ibm-spectrum-scale-internal kubernetes.io/no-provisioner Delete WaitForFirstConsumer false 4d15h
ibm-spectrum-scale-sample spectrumscale.csi.ibm.com Delete Immediate true 4d13h
veleroでCSI snapshotを取得できるようラベルをセットします。
# oc patch vsclass ibm-spectrum-scale-csi-snapshot-class -p '{"metadata":{"labels":{"velero.io/csi-volumesnapshot-class":"true"}}}' --type=merge
volumesnapshotclass.snapshot.storage.k8s.io/ibm-spectrum-scale-csi-snapshot-class patched
ラベルがセットされたことを確認します。
# oc get vsclass ibm-spectrum-scale-csi-snapshot-class -o yaml | grep csi-volumesnapshot-class
velero.io/csi-volumesnapshot-class: "true"
OADPの設定
MinIOのcredentialを設定します。(環境に合わせて、aws_access_key_id と aws_secret_access_key を変更してください)
# cat << EOF > credentials-veloro
[backupStorage]
aws_access_key_id=minioadmin
aws_secret_access_key=minioadmin
EOF
# oc create secret generic cloud-credentials -n openshift-adp --from-file cloud=credentials-velero
secret/cloud-credentials created
DataProtectionApplicationを設定します。(環境に合わせて、s3Urlなどの設定項目を変更してください。)
# cat << EOF > dataprotectionapplication.yaml
apiVersion: oadp.openshift.io/v1alpha1
kind: DataProtectionApplication
metadata:
name: oadp-minio
namespace: openshift-adp
spec:
configuration:
velero:
defaultPlugins:
- csi
apiVersion: velero.io/v1
- openshift
- aws
featureFlags:
- EnableCSI
restic:
enable: true
backupLocations:
- name: default
velero:
provider: aws
default: true
objectStorage:
bucket: scale-backup
prefix: velero
config:
region: minio
s3Url: http://192.168.0.1:19000
s3ForcePathStyle: "true"
insecureSkipTLSVerify: "true"
profile: "backupStorage"
credential:
key: cloud
name: cloud-credentials
EOF
# oc apply -f dataprotectionapplication.yaml
dataprotectionapplication.oadp.openshift.io/oadp-minio created
OADPの動作確認
動作確認用にプロジェクトを作成します。
# oc new-project test1
プロジェクト内にPVCを作成します。(この例では、data1, data2, data3を作成しています)
# oc apply -f pvc_data1.yaml
persistentvolumeclaim/data1 created
# oc apply -f pvc_data2.yaml
persistentvolumeclaim/data2 created
# oc apply -f pvc_data3.yaml
persistentvolumeclaim/data3 created
プロジェクト内に上記PVを使用するPodを作成します。
# oc apply -f app.yaml
動作確認用に作成したtest1というnamespaceに対して、バックアップを取得します。
# cat << EOF > backup_test1.yaml
apiVersion: velero.io/v1
kind: Backup
metadata:
name: backup-test-1
namespace: openshift-adp
spec:
storageLocation: default
includedNamespaces:
- test1
EOF
# oc apply -f backup_test1.yaml
backup.velero.io/backup-test-1 created
アプリケーションに変更を加えた後、取得したバックアップでリストアを試してみます。
# cat << EOF > restore_test1.yaml
apiVersion: velero.io/v1
kind: Restore
metadata:
name: restore-test-1
namespace: openshift-adp
spec:
backupName: backup-test-1
includedNamespaces:
- test1
restorePVs: true
EOF
# oc apply -f restore_test1.yaml
backup.velero.io/restore-test-1 created
バックアップやリストアの状態は、OpenShift Dashboardから、インストール済みのOperatorのメニューでOADP Operatorを選択して、確認することができます。
まとめ
OpenShiftにOADPを導入して、アプリケーションを外部のオブジェクトストレージにバックアップする環境が構築できました。
別の記事では、OADPの機能を試してみたいと思います。