2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

OpenShift API for Data Protection (OADP) によるアプリケーションのバックアップ環境の構築

Last updated at Posted at 2024-08-12

はじめに

本記事では、OpenShift API for Data Protection (OADP) を使用して、OpenShift上のアプリケーションをオブジェクトストレージにバックアップする環境を構築する手順を示します。

目次

  1. 検証環境
  2. 前提条件
  3. オブジェクトストレージの準備
  4. OADP Operatorのインストール
  5. OADP設定の事前作業
  6. OADPの設定
  7. OADPの動作確認
  8. まとめ
  9. 参考文献

検証環境

以下のように、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に構築しています。

ocp-oadp-env.png

(補足) 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でログインできます)

minio_login.png

ログインできたら、バックアップ用のbucketを作成しておきます。

minio_bucket.png

OADP Operatorのインストール

OpenShift Webコンソールにログインして、左のメニューからOperatorHubを選択後、"oadp"で検索するとOADP Operatorが見つかりますので、default設定でインストールします。

oadp-install.png

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を選択して、確認することができます。

oadp-backup.png oadp-restore.png

まとめ

OpenShiftにOADPを導入して、アプリケーションを外部のオブジェクトストレージにバックアップする環境が構築できました。
別の記事では、OADPの機能を試してみたいと思います。

参考文献

2
0
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?