9.7. OADP を使用したホステッドクラスターの障害復旧
OpenShift API for Data Protection (OADP) Operator を使用して、Amazon Web Services (AWS) およびベアメタルで障害復旧を実行できます。
OpenShift API for Data Protection (OADP) を使用した障害復旧プロセスには、次の手順が含まれます。
- OADP を使用するために Amazon Web Services やベアメタルなどのプラットフォームを準備
- データプレーンのワークロードのバックアップ
- コントロールプレーンのワークロードのバックアップ
- OADP を使用したホステッドクラスターの復元
9.7.1. 前提条件 リンクのコピーリンクがクリップボードにコピーされました!
管理クラスターで次の前提条件を満たす必要があります。
- OADP Operator をインストール している。
- ストレージクラスを作成した。
-
cluster-admin権限でクラスターにアクセスできる。 - カタログソースを通じて OADP サブスクリプションにアクセスできる。
- S3、Microsoft Azure、Google Cloud、MinIO など、OADP と互換性のあるクラウドストレージプロバイダーにアクセスできる。
- 非接続環境では、OADP と互換性のある Red Hat OpenShift Data Foundation や MinIO などのセルフホスト型ストレージプロバイダーにアクセスできる。
- Hosted Control Plane の Pod が稼働している。
9.7.2. OADP を使用するための AWS の準備 リンクのコピーリンクがクリップボードにコピーされました!
ホステッドクラスターの障害復旧を実行するには、Amazon Web Services (AWS) S3 互換ストレージで OpenShift API for Data Protection (OADP) を使用できます。DataProtectionApplication オブジェクトを作成すると、openshift-adp namespace に新しい velero デプロイメントと node-agent Pod が作成されます。
OADP を使用するために AWS を準備するには、「Multicloud Object Gateway を使用した OpenShift API for Data Protection の設定」を参照してください。
次のステップ
- データプレーンのワークロードのバックアップ
- コントロールプレーンのワークロードのバックアップ
9.7.3. OADP を使用するためのベアメタルの準備 リンクのコピーリンクがクリップボードにコピーされました!
ホステッドクラスターの障害復旧を実行するには、ベアメタル上で OpenShift API for Data Protection (OADP) を使用できます。DataProtectionApplication オブジェクトを作成すると、openshift-adp namespace に新しい velero デプロイメントと node-agent Pod が作成されます。
OADP を使用するためにベアメタルを準備するには、「AWS S3 互換ストレージを使用した OpenShift API for Data Protection の設定」を参照してください。
次のステップ
- データプレーンのワークロードのバックアップ
- コントロールプレーンのワークロードのバックアップ
9.7.4. データプレーンのワークロードのバックアップ リンクのコピーリンクがクリップボードにコピーされました!
データプレーンのワークロードが重要でない場合は、この手順をスキップできます。OADP Operator を使用してデータプレーンワークロードをバックアップするには、「アプリケーションのバックアップ」を参照してください。
次のステップ
- OADP を使用したホステッドクラスターの復元
9.7.5. コントロールプレーンのワークロードのバックアップ リンクのコピーリンクがクリップボードにコピーされました!
Backup カスタムリソース (CR) を作成することで、コントロールプレーンのワークロードをバックアップできます。
バックアッププロセスを監視および観察するには、「バックアップおよび復元プロセスの観察」を参照してください。
手順
次のコマンドを実行して、
HostedClusterリソースのリコンシリエーションを一時停止します。$ oc --kubeconfig <management_cluster_kubeconfig_file> \ patch hostedcluster -n <hosted_cluster_namespace> <hosted_cluster_name> \ --type json -p '[{"op": "add", "path": "/spec/pausedUntil", "value": "true"}]'次のコマンドを実行して、ホステッドクラスターのインフラストラクチャー ID を取得します。
$ oc get hostedcluster -n local-cluster <hosted_cluster_name> -o=jsonpath="{.spec.infraID}"次のステップで使用するインフラストラクチャー ID をメモします。
次のコマンドを実行して、
cluster.cluster.x-k8s.ioリソースのリコンシリエーションを一時停止します。$ oc --kubeconfig <management_cluster_kubeconfig_file> \ patch cluster.cluster.x-k8s.io \ -n local-cluster-<hosted_cluster_name> <hosted_cluster_infra_id> \ --type json -p '[{"op": "add", "path": "/spec/paused", "value": true}]'次のコマンドを実行して、
NodePoolリソースのリコンシリエーションを一時停止します。$ oc --kubeconfig <management_cluster_kubeconfig_file> \ patch nodepool -n <hosted_cluster_namespace> <node_pool_name> \ --type json -p '[{"op": "add", "path": "/spec/pausedUntil", "value": "true"}]'次のコマンドを実行して、
AgentClusterリソースのリコンシリエーションを一時停止します。$ oc --kubeconfig <management_cluster_kubeconfig_file> \ annotate agentcluster -n <hosted_control_plane_namespace> \ cluster.x-k8s.io/paused=true --all'次のコマンドを実行して、
AgentMachineリソースのリコンシリエーションを一時停止します。$ oc --kubeconfig <management_cluster_kubeconfig_file> \ annotate agentmachine -n <hosted_control_plane_namespace> \ cluster.x-k8s.io/paused=true --all'次のコマンドを実行して、
HostedClusterリソースにアノテーションを付け、Hosted Control Plane namespace が削除されないようにします。$ oc --kubeconfig <management_cluster_kubeconfig_file> \ annotate hostedcluster -n <hosted_cluster_namespace> <hosted_cluster_name> \ hypershift.openshift.io/skip-delete-hosted-controlplane-namespace=trueBackupCR を定義する YAML ファイルを作成します。例9.1 例:
backup-control-plane.yamlファイルapiVersion: velero.io/v1 kind: Backup metadata: name: <backup_resource_name>1 namespace: openshift-adp labels: velero.io/storage-location: default spec: hooks: {} includedNamespaces:2 - <hosted_cluster_namespace>3 - <hosted_control_plane_namespace>4 includedResources: - sa - role - rolebinding - pod - pvc - pv - bmh - configmap - infraenv5 - priorityclasses - pdb - agents - hostedcluster - nodepool - secrets - hostedcontrolplane - cluster - agentcluster - agentmachinetemplate - agentmachine - machinedeployment - machineset - machine excludedResources: [] storageLocation: default ttl: 2h0m0s snapshotMoveData: true6 datamover: "velero"7 defaultVolumesToFsBackup: true8 - 1
backup_resource_nameをBackupリソースの名前に置き換えます。- 2
- 特定の namespace を選択して、そこからオブジェクトをバックアップします。ホステッドクラスターの namespace と Hosted Control Plane の namespace を含める必要があります。
- 3
<hosted_cluster_namespace>を、ホステッドクラスター namespace の名前 (例:clusters) に置き換えます。- 4
<hosted_control_plane_namespace>は、Hosted Control Plane の namespace の名前 (例:clusters-hosted) に置き換えます。- 5
infraenvリソースを別の namespace に作成する必要があります。バックアッププロセス中にinfraenvリソースを削除しないでください。- 6 7
- CSI ボリュームスナップショットを有効にし、コントロールプレーンのワークロードをクラウドストレージに自動的にアップロードします。
- 8
- 永続ボリューム (PV) の
fs-backupバックアップ方法をデフォルトとして設定します。この設定は、Container Storage Interface (CSI) ボリュームスナップショットとfs-backup方式を組み合わせて使用する場合に便利です。
注記CSI ボリュームスナップショットを使用する場合は、PV に
backup.velero.io/backup-volumes-excludes=<pv_name>アノテーションを追加する必要があります。次のコマンドを実行して、
BackupCR を適用します。$ oc apply -f backup-control-plane.yaml
検証
次のコマンドを実行して、
status.phaseの値がCompletedになっているかどうかを確認します。$ oc get backups.velero.io <backup_resource_name> -n openshift-adp \ -o jsonpath='{.status.phase}'
次のステップ
- OADP を使用してホストされたクラスターの復元
9.7.6. OADP を使用してホストされたクラスターの復元 リンクのコピーリンクがクリップボードにコピーされました!
Restore カスタムリソース (CR) を作成することで、ホストされたクラスターを復元できます。
- インプレース 更新を使用している場合、InfraEnv にスペアノードは必要ありません。新しい管理クラスターからワーカーノードを再プロビジョニングする必要があります。
- replace 更新を使用している場合は、ワーカーノードをデプロイするために InfraEnv 用の予備ノードがいくつか必要です。
ホステッドクラスターをバックアップした後、復元プロセスを開始するには、そのクラスターを破棄する必要があります。ノードのプロビジョニングを開始するには、ホステッドクラスターを削除する前に、データプレーン内のワークロードをバックアップする必要があります。
前提条件
- コンソールを使用したクラスターの削除 のホステッドクラスターを削除する手順を完了した。
- クラスター削除後の残りのリソースの削除 の手順を完了した。
バックアッププロセスを監視および観察するには、「バックアップおよび復元プロセスの観察」を参照してください。
手順
次のコマンドを実行して、Hosted Control Plane namespace に Pod と永続ボリューム要求 (PVC) が存在しないことを確認します。
$ oc get pod pvc -n <hosted_control_plane_namespace>予想される出力
No resources foundRestoreCR を定義する YAML ファイルを作成します。restore-hosted-cluster.yamlファイルの例apiVersion: velero.io/v1 kind: Restore metadata: name: <restore_resource_name>1 namespace: openshift-adp spec: backupName: <backup_resource_name>2 restorePVs: true3 existingResourcePolicy: update4 excludedResources: - nodes - events - events.events.k8s.io - backups.velero.io - restores.velero.io - resticrepositories.velero.io重要infraenvリソースを別の namespace に作成する必要があります。復元プロセス中にinfraenvリソースを削除しないでください。新しいノードを再プロビジョニングするには、infraenvリソースが必須です。次のコマンドを実行して、
RestoreCR を適用します。$ oc apply -f restore-hosted-cluster.yaml次のコマンドを実行して、
status.phaseの値がCompletedになっているかどうかを確認します。$ oc get hostedcluster <hosted_cluster_name> -n <hosted_cluster_namespace> \ -o jsonpath='{.status.phase}'復元プロセスが完了したら、コントロールプレーンワークロードのバックアップ中に一時停止した
HostedClusterリソースおよびNodePoolリソースのリコンシリエーションを開始します。次のコマンドを実行して、
HostedClusterリソースのリコンシリエーションを開始します。$ oc --kubeconfig <management_cluster_kubeconfig_file> \ patch hostedcluster -n <hosted_cluster_namespace> <hosted_cluster_name> \ --type json \ -p '[{"op": "add", "path": "/spec/pausedUntil", "value": "false"}]'次のコマンドを実行して、
NodePoolリソースのリコンシリエーションを開始します。$ oc --kubeconfig <management_cluster_kubeconfig_file> \ patch nodepool -n <hosted_cluster_namespace> <node_pool_name> \ --type json \ -p '[{"op": "add", "path": "/spec/pausedUntil", "value": "false"}]'
コントロールプレーンワークロードのバックアップ中に一時停止したエージェントプロバイダーリソースのリコンシリエーションを開始します。
次のコマンドを実行して、
AgentClusterリソースのリコンシリエーションを開始します。$ oc --kubeconfig <management_cluster_kubeconfig_file> \ annotate agentcluster -n <hosted_control_plane_namespace> \ cluster.x-k8s.io/paused- --overwrite=true --all次のコマンドを実行して、
AgentMachineリソースのリコンシリエーションを開始します。$ oc --kubeconfig <management_cluster_kubeconfig_file> \ annotate agentmachine -n <hosted_control_plane_namespace> \ cluster.x-k8s.io/paused- --overwrite=true --all
次のコマンドを実行して、
HostedClusterリソースのhypershift.openshift.io/skip-delete-hosted-controlplane-namespace-アノテーションを削除し、Hosted Control Plane namespace の手動削除を回避します。$ oc --kubeconfig <management_cluster_kubeconfig_file> \ annotate hostedcluster -n <hosted_cluster_namespace> <hosted_cluster_name> \ hypershift.openshift.io/skip-delete-hosted-controlplane-namespace- \ --overwrite=true --all次のコマンドを実行して、
NodePoolリソースを必要なレプリカ数にスケーリングします。$ oc --kubeconfig <management_cluster_kubeconfig_file> \ scale nodepool -n <hosted_cluster_namespace> <node_pool_name> \ --replicas <replica_count>1 - 1
<replica_count>を整数値 (例:3) に置き換えます。
9.7.7. バックアップと復元のプロセスの観察 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift API for Data Protection (OADP) を使用してホステッドクラスターをバックアップおよび復元する場合は、プロセスを監視および観察できます。
手順
次のコマンドを実行して、バックアッププロセスを確認します。
$ watch "oc get backups.velero.io -n openshift-adp <backup_resource_name> -o jsonpath='{.status}'"次のコマンドを実行して、復元プロセスを確認します。
$ watch "oc get restores.velero.io -n openshift-adp <backup_resource_name> -o jsonpath='{.status}'"次のコマンドを実行して、Velero ログを確認します。
$ oc logs -n openshift-adp -ldeploy=velero -f次のコマンドを実行して、すべての OADP オブジェクトの進行状況を確認します。
$ watch "echo BackupRepositories:;echo;oc get backuprepositories.velero.io -A;echo; echo BackupStorageLocations: ;echo; oc get backupstoragelocations.velero.io -A;echo;echo DataUploads: ;echo;oc get datauploads.velero.io -A;echo;echo DataDownloads: ;echo;oc get datadownloads.velero.io -n openshift-adp; echo;echo VolumeSnapshotLocations: ;echo;oc get volumesnapshotlocations.velero.io -A;echo;echo Backups:;echo;oc get backup -A; echo;echo Restores:;echo;oc get restore -A"
9.7.8. velero CLI を使用してバックアップおよび復元リソースを記述する リンクのコピーリンクがクリップボードにコピーされました!
OpenShift API for Data Protection を使用する場合は、velero コマンドラインインターフェイス (CLI) を使用して、Backup および Restore リソースの詳細を取得できます。
手順
次のコマンドを実行して、コンテナーから
veleroCLI を使用するためのエイリアスを作成します。$ alias velero='oc -n openshift-adp exec deployment/velero -c velero -it -- ./velero'次のコマンドを実行して、
Restoreカスタムリソース (CR) の詳細を取得します。$ velero restore describe <restore_resource_name> --details1 - 1
<restore_resource_name>をRestoreリソースの名前に置き換えます。
次のコマンドを実行して、
BackupCR の詳細を取得します。$ velero restore describe <backup_resource_name> --details1 - 1
<backup_resource_name>をBackupリソースの名前に置き換えます。