5.10. Google Cloud を使用した OADP の設定
5.10.1. Google Cloud を使用した OpenShift API for Data Protection の設定 リンクのコピーリンクがクリップボードにコピーされました!
OADP Operator をインストールすることで、Google Cloud を使用して OpenShift API for Data Protection (OADP) をインストールします。Operator は Velero 1.16 をインストールします。
OADP 1.0.4 以降、すべての OADP 1.0.z バージョンは Migration Toolkit for Containers Operator の依存関係としてのみ使用でき、スタンドアロン Operator として使用することはできません。
Velero 用に Google Cloud を設定し、デフォルトの Secret を作成してから、Data Protection Application をインストールします。詳細は、OADP Operator のインストール を参照してください。
制限されたネットワーク環境に OADP Operator をインストールするには、まずデフォルトのソフトウェアカタログソースを無効にし、Operator カタログをミラーリングする必要があります。詳細は、非接続環境での Operator Lifecycle Manager の使用 を参照してください。
5.10.1.1. Google Cloud の設定 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift API for Data Protection (OADP) 用に Google Cloud を設定します。
前提条件
-
gcloudおよびgsutilCLI ツールがインストールされている必要があります。詳細は、Google Cloud のドキュメント をご覧ください。
手順
Google Cloud にログインします。
$ gcloud auth loginBUCKET変数を設定します。$ BUCKET=<bucket>ここでは、以下のようになります。
bucket- バケット名を指定します。
ストレージバケットを作成します。
$ gsutil mb gs://$BUCKET/PROJECT_ID変数をアクティブなプロジェクトに設定します。$ PROJECT_ID=$(gcloud config get-value project)サービスアカウントを作成します。
$ gcloud iam service-accounts create velero \ --display-name "Velero service account"サービスアカウントをリスト表示します。
$ gcloud iam service-accounts listemailの値と一致するようにSERVICE_ACCOUNT_EMAIL変数を設定します。$ SERVICE_ACCOUNT_EMAIL=$(gcloud iam service-accounts list \ --filter="displayName:Velero service account" \ --format 'value(email)')ポリシーを添付して、
veleroユーザーに必要最小限の権限を付与します。$ ROLE_PERMISSIONS=( compute.disks.get compute.disks.create compute.disks.createSnapshot compute.snapshots.get compute.snapshots.create compute.snapshots.useReadOnly compute.snapshots.delete compute.zones.get storage.objects.create storage.objects.delete storage.objects.get storage.objects.list iam.serviceAccounts.signBlob )velero.serverカスタムロールを作成します。$ gcloud iam roles create velero.server \ --project $PROJECT_ID \ --title "Velero Server" \ --permissions "$(IFS=","; echo "${ROLE_PERMISSIONS[*]}")"IAM ポリシーバインディングをプロジェクトに追加します。
$ gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SERVICE_ACCOUNT_EMAIL \ --role projects/$PROJECT_ID/roles/velero.serverIAM サービスアカウントを更新します。
$ gsutil iam ch serviceAccount:$SERVICE_ACCOUNT_EMAIL:objectAdmin gs://${BUCKET}IAM サービスアカウントのキーを現在のディレクトリーにある
credentials-veleroファイルに保存します。$ gcloud iam service-accounts keys create credentials-velero \ --iam-account $SERVICE_ACCOUNT_EMAILData Protection Application をインストールする前に、
credentials-veleroファイルを使用して Google Cloud のSecretオブジェクトを作成します。
5.10.1.2. バックアップおよびスナップショットの場所、ならびにそのシークレットについて リンクのコピーリンクがクリップボードにコピーされました!
DataProtectionApplication カスタムリソース (CR) のバックアップ場所、スナップショット場所、およびシークレット設定要件を確認してください。これは、データ保護業務におけるストレージオプションと認証情報管理を理解するのに役立ちます。
5.10.1.2.1. バックアップの場所 リンクのコピーリンクがクリップボードにコピーされました!
バックアップの場所として、次のいずれかの AWS S3 互換オブジェクトストレージソリューションを指定できます。
- Multicloud Object Gateway (MCG)
- Red Hat Container Storage
- Ceph RADOS Gateway (別称 Ceph Object Gateway)
- Red Hat OpenShift Data Foundation
- MinIO
Velero は、オブジェクトストレージのアーカイブファイルとして、OpenShift Container Platform リソース、Kubernetes オブジェクト、および内部イメージをバックアップします。
5.10.1.2.2. スナップショットの場所 リンクのコピーリンクがクリップボードにコピーされました!
クラウドプロバイダーのネイティブスナップショット API を使用して永続ボリュームをバックアップする場合、クラウドプロバイダーをスナップショットの場所として指定する必要があります。
Container Storage Interface (CSI) スナップショットを使用する場合、CSI ドライバーを登録するために VolumeSnapshotClass CR を作成するため、スナップショットの場所を指定する必要はありません。
File System Backup (FSB) を使用する場合、FSB がオブジェクトストレージ上にファイルシステムをバックアップするため、スナップショットの場所を指定する必要はありません。
5.10.1.2.3. シークレット リンクのコピーリンクがクリップボードにコピーされました!
バックアップとスナップショットの場所が同じ認証情報を使用する場合、またはスナップショットの場所が必要ない場合は、デフォルトの Secret を作成します。
バックアップとスナップショットの場所で異なる認証情報を使用する場合は、次の 2 つの secret オブジェクトを作成します。
-
DataProtectionApplicationCR で指定する、バックアップの場所用のカスタムSecret。 -
DataProtectionApplicationCR で参照されない、スナップショットの場所用のデフォルトSecret。
Data Protection Application には、デフォルトの Secret が必要です。作成しないと、インストールは失敗します。
インストール中にバックアップまたはスナップショットの場所を指定したくない場合は、空の credentials-velero ファイルを使用してデフォルトの Secret を作成できます。
5.10.1.2.4. デフォルト Secret の作成 リンクのコピーリンクがクリップボードにコピーされました!
バックアップとスナップショットの場所が同じ認証情報を使用する場合、またはスナップショットの場所が必要ない場合は、デフォルトの Secret を作成します。
Secret のデフォルト名は cloud-credentials-gcp です。
DataProtectionApplication カスタムリソース (CR) にはデフォルトの Secret が必要です。作成しないと、インストールは失敗します。バックアップの場所の Secret の名前が指定されていない場合は、デフォルトの名前が使用されます。
インストール時にバックアップ場所の認証情報を使用しない場合は、空の credentials-velero ファイルを使用して、デフォルト名の Secret を作成できます。
前提条件
- オブジェクトストレージとクラウドストレージがある場合は、同じ認証情報を使用する必要があります。
- Velero のオブジェクトストレージを設定する必要があります。
手順
-
Backup Storage Location の
credentials-veleroファイルをクラウドプロバイダーに適した形式で作成します。 デフォルト名で
Secretカスタムリソース (CR) を作成します。$ oc create secret generic cloud-credentials-gcp -n openshift-adp --from-file cloud=credentials-veleroSecretは、Data Protection Application をインストールするときに、DataProtectionApplicationCR のspec.backupLocations.credentialブロックで参照されます。
5.10.1.2.5. 異なる認証情報のシークレットの作成 リンクのコピーリンクがクリップボードにコピーされました!
バックアップ先とスナップショット先で異なる認証情報が必要な場合は、それぞれ別の シークレット オブジェクトを作成してください。これにより、安全な認証情報管理を維持しながら、ストレージの場所ごとに個別の認証を設定できます。
手順
-
スナップショットの場所の
credentials-veleroファイルをクラウドプロバイダーに適した形式で作成します。 デフォルト名でスナップショットの場所の
Secretを作成します。$ oc create secret generic cloud-credentials-gcp -n openshift-adp --from-file cloud=credentials-velero-
オブジェクトストレージに適した形式で、バックアップロケーションの
credentials-veleroファイルを作成します。 カスタム名を使用してバックアップロケーションの
Secretを作成します。$ oc create secret generic <custom_secret> -n openshift-adp --from-file cloud=credentials-velero次の例のように、カスタム名の
SecretをDataProtectionApplicationに追加します。apiVersion: oadp.openshift.io/v1alpha1 kind: DataProtectionApplication metadata: name: <dpa_sample> namespace: openshift-adp spec: ... backupLocations: - velero: provider: gcp default: true credential: key: cloud name: <custom_secret> objectStorage: bucket: <bucket_name> prefix: <prefix> snapshotLocations: - velero: provider: gcp default: true config: project: <project> snapshotLocation: us-west1ここでは、以下のようになります。
カスタムシークレット-
バックアップ場所を指定する
Secretに、カスタム名を指定します。
5.10.1.2.6. Velero の CPU とメモリーのリソース割り当てを設定 リンクのコピーリンクがクリップボードにコピーされました!
DataProtectionApplication カスタムリソース (CR) マニフェストを編集して、Velero Pod の CPU およびメモリーリソースの割り当てを設定します。
前提条件
- OpenShift API for Data Protection (OADP) Operator がインストールされている必要があります。
手順
次の例のように、
DataProtectionApplicationCR マニフェストのspec.configuration.velero.podConfig.ResourceAllocationsブロックの値を編集します。apiVersion: oadp.openshift.io/v1alpha1 kind: DataProtectionApplication metadata: name: <dpa_sample> spec: # ... configuration: velero: podConfig: nodeSelector: <node_selector> resourceAllocations: limits: cpu: "1" memory: 1024Mi requests: cpu: 200m memory: 256Miここでは、以下のようになります。
nodeSelector- Velero podSpec に渡すノードセレクターを指定します。
resourceAllocations平均使用量に基づいて割り当てられたリソースを指定します。
注記Kopia は OADP 1.3 以降のリリースで選択できます。Kopia はファイルシステムのバックアップに使用できます。組み込みの Data Mover を使用する Data Mover の場合は、Kopia が唯一の選択肢になります。
Kopia は Restic よりも多くのリソースを消費するため、それに応じて CPU とメモリーの要件を調整しなければならない場合があります。
nodeSelector フィールドを使用して、ノードエージェントを実行できるノードを選択します。nodeSelector フィールドは、推奨される最も単純な形式のノード選択制約です。指定したラベルが、各ノードのラベルと一致する必要があります。
5.10.1.2.7. 自己署名 CA 証明書の有効化 リンクのコピーリンクがクリップボードにコピーされました!
certificate signed by unknown authority エラーを防ぐために、DataProtectionApplication カスタムリソース (CR) マニフェストを編集して、オブジェクトストレージの自己署名 CA 証明書を有効にする必要があります。
前提条件
- OpenShift API for Data Protection (OADP) Operator がインストールされている必要があります。
手順
DataProtectionApplicationCR マニフェストのspec.backupLocations.velero.objectStorage.caCertパラメーターとspec.backupLocations.velero.configパラメーターを編集します。apiVersion: oadp.openshift.io/v1alpha1 kind: DataProtectionApplication metadata: name: <dpa_sample> spec: # ... backupLocations: - name: default velero: provider: aws default: true objectStorage: bucket: <bucket> prefix: <prefix> caCert: <base64_encoded_cert_string> config: insecureSkipTLSVerify: "false" # ...ここでは、以下のようになります。
caCert- Base64 エンコードされた CA 証明書文字列を指定します。
insecureSkipTLSVerify-
insecureSkipTLSVerify の設定を指定します。設定はtrueまたはfalseのいずれかに設定できます。"true"に設定すると、SSL/TLS セキュリティーが無効になります。"false"に設定すると、SSL/TLS セキュリティーが有効になります。
5.10.1.2.8. Velero デプロイメント用のエイリアス化した velero コマンドで CA 証明書を使用する リンクのコピーリンクがクリップボードにコピーされました!
Velero CLI のエイリアスを作成することで、システムにローカルにインストールせずに Velero CLI を使用できます。
前提条件
-
cluster-adminロールを持つユーザーとして OpenShift Container Platform クラスターにログインしている。 -
OpenShift CLI (
oc) がインストールされている。
手順
エイリアス化した Velero コマンドを使用するには、次のコマンドを実行します。
$ alias velero='oc -n openshift-adp exec deployment/velero -c velero -it -- ./velero'次のコマンドを実行して、エイリアスが機能していることを確認します。
$ velero versionClient: Version: v1.12.1-OADP Git commit: - Server: Version: v1.12.1-OADPこのコマンドで CA 証明書を使用するには、次のコマンドを実行して証明書を Velero デプロイメントに追加できます。
$ CA_CERT=$(oc -n openshift-adp get dataprotectionapplications.oadp.openshift.io <dpa-name> -o jsonpath='{.spec.backupLocations[0].velero.objectStorage.caCert}')$ [[ -n $CA_CERT ]] && echo "$CA_CERT" | base64 -d | oc exec -n openshift-adp -i deploy/velero -c velero -- bash -c "cat > /tmp/your-cacert.txt" || echo "DPA BSL has no caCert"$ velero describe backup <backup_name> --details --cacert /tmp/<your_cacert>.txtバックアップログを取得するために、次のコマンドを実行します。
$ velero backup logs <backup_name> --cacert /tmp/<your_cacert.txt>このログを使用して、バックアップできないリソースの障害と警告を表示できます。
-
Velero Pod が再起動すると、
/tmp/your-cacert.txtファイルが消去されます。そのため、前の手順のコマンドを再実行して/tmp/your-cacert.txtファイルを再作成する必要があります。 次のコマンドを実行すると、
/tmp/your-cacert.txtファイルを保存した場所にファイルがまだ存在するかどうかを確認できます。$ oc exec -n openshift-adp -i deploy/velero -c velero -- bash -c "ls /tmp/your-cacert.txt" /tmp/your-cacert.txtOpenShift API for Data Protection (OADP) の今後のリリースでは、この手順が不要になるように証明書を Velero Pod にマウントする予定です。
5.10.1.3. Google Workload Identity 連携のクラウド認証 リンクのコピーリンクがクリップボードにコピーされました!
Google Cloud の外で実行されているアプリケーションは、ユーザー名やパスワードなどのサービスアカウントキーを使用して、Google Cloud リソースにアクセスします。これらのサービスアカウントキーは、適切に管理されていない場合、セキュリティーリスクになる可能性があります。
Google Workload Identity 連携を使用すると、Identity and Access Management (IAM) を使用して、サービスアカウントに成り代わる機能などの IAM ロールを外部アイデンティティーに付与できます。これにより、サービスアカウントキーに関連するメンテナンスとセキュリティーのリスクが排除されます。
Workload Identity 連携は、証明書の暗号化と復号化、ユーザー属性の抽出、および検証を処理します。Identity 連携は認証を外部化し、それをセキュリティートークンサービス (STS) に渡すことで、個々の開発者の負担を軽減します。リソースへのアクセスの認可と制御は、引き続きアプリケーションが処理します。
Google Workload Identity 連携は、OADP 1.3.x 以降で利用できます。
ボリュームをバックアップする場合、Google Workload Identity 連携認証を使用した Google Cloud 上の OADP は、CSI スナップショットのみをサポートします。
Google Workload Identity 連携認証を使用した Google Cloud 上の OADP は、Volume Snapshot Locations (VSL) バックアップをサポートしていません。Google Cloud ワークロードアイデンティティーフェデレーションが設定されている場合、VSL バックアップは 部分的に失敗した フェーズで終了します。
Google Workload Identity 連携クラウド認証を使用しない場合は、Data Protection Application のインストール に進みます。
前提条件
- Google Cloud Workload Identity を設定 して、クラスターを手動モードでインストールした。
-
Cloud Credential Operator ユーティリティー (
ccoctl) と、関連する Workload Identity プールにアクセスできる。
手順
次のコマンドを実行して、
oadp-credrequestディレクトリーを作成します。$ mkdir -p oadp-credrequest次のように、
CredentialsRequest.yamlファイルを作成します。echo 'apiVersion: cloudcredential.openshift.io/v1 kind: CredentialsRequest metadata: name: oadp-operator-credentials namespace: openshift-cloud-credential-operator spec: providerSpec: apiVersion: cloudcredential.openshift.io/v1 kind: GCPProviderSpec permissions: - compute.disks.get - compute.disks.create - compute.disks.createSnapshot - compute.snapshots.get - compute.snapshots.create - compute.snapshots.useReadOnly - compute.snapshots.delete - compute.zones.get - storage.objects.create - storage.objects.delete - storage.objects.get - storage.objects.list - iam.serviceAccounts.signBlob skipServiceCheck: true secretRef: name: cloud-credentials-gcp namespace: <OPERATOR_INSTALL_NS> serviceAccountNames: - velero ' > oadp-credrequest/credrequest.yaml次のコマンドを実行し、
ccoctlユーティリティーを使用して、oadp-credrequestディレクトリー内のCredentialsRequestオブジェクトを処理します。$ ccoctl gcp create-service-accounts \ --name=<name> \ --project=<gcp_project_id> \ --credentials-requests-dir=oadp-credrequest \ --workload-identity-pool=<pool_id> \ --workload-identity-provider=<provider_id>これで、次のステップで
manifests/openshift-adp-cloud-credentials-gcp-credentials.yamlファイルを使用できるようになりました。次のコマンドを実行して、namespace を作成します。
$ oc create namespace <OPERATOR_INSTALL_NS>次のコマンドを実行して、認証情報を namespace に適用します。
$ oc apply -f manifests/openshift-adp-cloud-credentials-gcp-credentials.yaml
5.10.1.4. Data Protection Application のインストール リンクのコピーリンクがクリップボードにコピーされました!
DataProtectionApplication API のインスタンスを作成して、Data Protection Application (DPA) をインストールします。
前提条件
- OADP Operator をインストールする。
- オブジェクトストレージをバックアップロケーションとして設定する必要がある。
- スナップショットを使用して PV をバックアップする場合、クラウドプロバイダーはネイティブスナップショット API または Container Storage Interface (CSI) スナップショットのいずれかをサポートする必要がある。
-
バックアップとスナップショットの場所で同じ認証情報を使用する場合は、デフォルトの名前である
cloud-credentials-gcpを使用してSecretを作成する必要がある。 バックアップとスナップショットの場所で異なる認証情報を使用する場合は、以下のように 2 つの
Secretsを作成する必要がある。-
バックアップの場所用のカスタム名を持つ
Secret。このSecretをDataProtectionApplicationCR に追加します。 -
スナップショットの場所用の別のカスタム名を持つ
Secret。このSecretをDataProtectionApplicationCR に追加します。
注記インストール中にバックアップまたはスナップショットの場所を指定したくない場合は、空の
credentials-veleroファイルを使用してデフォルトのSecretを作成できます。デフォルトのSecretがない場合、インストールは失敗します。-
バックアップの場所用のカスタム名を持つ
手順
-
Ecosystem
Installed Operators をクリックし、OADPOperator を選択します。 - Provided APIs で、DataProtectionApplication ボックスの Create instance をクリックします。
YAML View をクリックして、
DataProtectionApplicationマニフェストのパラメーターを更新します。apiVersion: oadp.openshift.io/v1alpha1 kind: DataProtectionApplication metadata: name: <dpa_sample> namespace: <OPERATOR_INSTALL_NS> spec: configuration: velero: defaultPlugins: - gcp - openshift resourceTimeout: 10m nodeAgent: enable: true uploaderType: kopia podConfig: nodeSelector: <node_selector> backupLocations: - velero: provider: gcp default: true credential: key: cloud name: cloud-credentials-gcp objectStorage: bucket: <bucket_name> prefix: <prefix> snapshotLocations: - velero: provider: gcp default: true config: project: <project> snapshotLocation: us-west1 credential: key: cloud name: cloud-credentials-gcp backupImages: trueここでは、以下のようになります。
namespace-
OADP のデフォルトの名前空間である
openshift-adpを指定します。namespace は変数であり、設定可能です。 openshift-
openshiftプラグインが必須であることを指定します。 リソースタイムアウト- Velero CRD の可用性、ボリュームスナップショットの削除、バックアップリポジトリーの可用性など、複数の Velero リソースについてタイムアウトが発生するまでの待機時間を分単位で指定します。デフォルトは 10m です。
ノードエージェント- 管理要求をサーバーにルーティングする管理エージェントを指定します。
enable-
nodeAgentを有効にして File System Backup を実行する場合は、この値をtrueに設定します。 アップローダータイプ-
アップローダーの種類を指定します。アップローダーとして
kopiaまたはresticと入力します。インストール後に選択を変更することはできません。組み込み DataMover の場合は、Kopia を使用する必要があります。nodeAgentはデーモンセットをデプロイします。これは、nodeAgentPod が各ワーキングノード上で実行されることを意味します。File System Backup を設定するには、spec.defaultVolumesToFsBackup: trueをBackupCR に追加します。 nodeSelector- Kopia または Restic が利用可能なノードを指定します。デフォルトでは、Kopia または Restic はすべてのノードで実行されます。
key-
認証情報を含むシークレットキーを指定します。Google Workload Identity 連携クラウド認証の場合は、
service_account.jsonを使用します。 name-
認証情報を含むシークレット名を指定します。この値を指定しない場合は、デフォルトの名前である
cloud-credentials-gcpが使用されます。 bucket- バックアップの保存場所としてバケットを指定します。バケットが Velero バックアップ専用のバケットでない場合は、接頭辞を指定する必要があります。
prefix-
バケットが複数の用途で使用される場合、Velero バックアップのプレフィックスを指定します。たとえば、
velero などです。 snapshotLocations- CSI スナップショットまたは Restic を使用して PV をバックアップする場合を除き、スナップショットの場所を指定します。
スナップショットの場所- スナップショットの場所は、PV と同じリージョン内にある必要があることを指定します。
name-
作成した
シークレットオブジェクトの名前を指定します。この値を指定しない場合は、デフォルトの名前であるcloud-credentials-gcpが使用されます。カスタム名を指定すると、バックアップの場所にカスタム名が使用されます。 backupImages-
Google ワークロードアイデンティティーフェデレーションが内部イメージバックアップをサポートしていることを指定します。イメージのバックアップを使用しない場合は、このフィールドを
falseに設定します。
- Create をクリックします。
検証
次のコマンドを実行して OpenShift API for Data Protection (OADP) リソースを表示し、インストールを検証します。
$ oc get all -n openshift-adpNAME READY STATUS RESTARTS AGE pod/oadp-operator-controller-manager-67d9494d47-6l8z8 2/2 Running 0 2m8s pod/node-agent-9cq4q 1/1 Running 0 94s pod/node-agent-m4lts 1/1 Running 0 94s pod/node-agent-pv4kr 1/1 Running 0 95s pod/velero-588db7f655-n842v 1/1 Running 0 95s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/oadp-operator-controller-manager-metrics-service ClusterIP 172.30.70.140 <none> 8443/TCP 2m8s service/openshift-adp-velero-metrics-svc ClusterIP 172.30.10.0 <none> 8085/TCP 8h NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE daemonset.apps/node-agent 3 3 3 3 3 <none> 96s NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/oadp-operator-controller-manager 1/1 1 1 2m9s deployment.apps/velero 1/1 1 1 96s NAME DESIRED CURRENT READY AGE replicaset.apps/oadp-operator-controller-manager-67d9494d47 1 1 1 2m9s replicaset.apps/velero-588db7f655 1 1 1 96s次のコマンドを実行して、
DataProtectionApplication(DPA) が調整されていることを確認します。$ oc get dpa dpa-sample -n openshift-adp -o jsonpath='{.status}'{"conditions":[{"lastTransitionTime":"2023-10-27T01:23:57Z","message":"Reconcile complete","reason":"Complete","status":"True","type":"Reconciled"}]}-
typeがReconciledに設定されていることを確認します。 次のコマンドを実行して、Backup Storage Location を確認し、
PHASEがAvailableであることを確認します。$ oc get backupstoragelocations.velero.io -n openshift-adpNAME PHASE LAST VALIDATED AGE DEFAULT dpa-sample-1 Available 1s 3d16h true
5.10.1.5. クライアントバースト設定と QPS 設定を使用した DPA の設定 リンクのコピーリンクがクリップボードにコピーされました!
バースト設定は、制限が適用されるまで velero サーバーに送信できる要求の数を決定するものです。バースト制限に達した後は、1 秒あたりのクエリー数 (QPS) 設定によって、1 秒あたりに送信できる追加の要求の数が決定されます。
バースト値と QPS 値を使用して Data Protection Application (DPA) を設定することにより、velero サーバーのバースト値と QPS 値を設定できます。バースト値と QPS 値は、DPA の dpa.configuration.velero.client-burst フィールドと dpa.configuration.velero.client-qps フィールドを使用して設定できます。
前提条件
- OADP Operator がインストールされている。
手順
次の例に示すように、DPA の
client-burstフィールドとclient-qpsフィールドを設定します。Data Protection Application の例
apiVersion: oadp.openshift.io/v1alpha1 kind: DataProtectionApplication metadata: name: test-dpa namespace: openshift-adp spec: backupLocations: - name: default velero: config: insecureSkipTLSVerify: "true" profile: "default" region: <bucket_region> s3ForcePathStyle: "true" s3Url: <bucket_url> credential: key: cloud name: cloud-credentials default: true objectStorage: bucket: <bucket_name> prefix: velero provider: aws configuration: nodeAgent: enable: true uploaderType: restic velero: client-burst: 500 client-qps: 300 defaultPlugins: - openshift - aws - kubevirtここでは、以下のようになります。
クライアントバースト-
クライアントバースト値を指定します。この例では、client-burstフィールドは 500 に設定されています。 クライアント QPS-
クライアント QPS値を指定します。この例では、client-qpsフィールドは 300 に設定されています。
5.10.1.6. ノードエージェントとノードラベルの設定 リンクのコピーリンクがクリップボードにコピーされました!
Data Protection Application (DPA) は、nodeSelector フィールドを使用して、ノードエージェントを実行できるノードを選択します。nodeSelector フィールドは、推奨される形式のノード選択制約です。
手順
カスタムラベルを追加して、選択した任意のノードでノードエージェントを実行します。
$ oc label node/<node_name> node-role.kubernetes.io/nodeAgent=""注記指定したラベルが、各ノードのラベルと一致する必要があります。
ノードのラベル付けに使用したのと同じカスタムラベルを
DPA.spec.configuration.nodeAgent.podConfig.nodeSelectorフィールドで使用します。configuration: nodeAgent: enable: true podConfig: nodeSelector: node-role.kubernetes.io/nodeAgent: ""次の例は
nodeSelectorのアンチパターンです。この例は、node-role.kubernetes.io/infra: ""とnode-role.kubernetes.io/worker: ""の両方のラベルがノードに存在しない限り機能しません。configuration: nodeAgent: enable: true podConfig: nodeSelector: node-role.kubernetes.io/infra: "" node-role.kubernetes.io/worker: ""
5.10.1.7. ノードエージェントのロードアフィニティーの設定 リンクのコピーリンクがクリップボードにコピーされました!
DataProtectionApplication (DPA) カスタムリソース (CR) の spec.podConfig.nodeSelector オブジェクトを使用して、特定のノードにノードエージェント Pod をスケジュールできます。
次の例を参照してください。この例を使用すると、ラベル label.io/role: cpu-1 および other-label.io/other-role: cpu-2 を持つノードにノードエージェント Pod をスケジュールできます。
...
spec:
configuration:
nodeAgent:
enable: true
uploaderType: kopia
podConfig:
nodeSelector:
label.io/role: cpu-1
other-label.io/other-role: cpu-2
...
DPA 仕様の nodeagent.loadAffinity オブジェクトを使用して、ノードエージェント Pod のスケジューリングにさらに制限を追加できます。
前提条件
-
cluster-admin権限を持つユーザーとしてログインしている。 - OADP Operator がインストールされている。
- DPA CR が設定されている。
手順
次の例に示すように、DPA 仕様の
nodegent.loadAffinityオブジェクトを設定します。この例では、ラベル
label.io/role: cpu-1とラベルlabel.io/hostnameがnode1またはnode2のいずれかに一致するノードにのみ、ノードエージェント Pod がスケジュールされるようにします。... spec: configuration: nodeAgent: enable: true loadAffinity: - nodeSelector: matchLabels: label.io/role: cpu-1 matchExpressions: - key: label.io/hostname operator: In values: - node1 - node2 ...ここでは、以下のようになります。
ロードアフィニティー-
matchLabels オブジェクトとmatchExpressionsオブジェクトを追加することで、loadAffinityオブジェクトを指定します。 matchExpressions-
ノードエージェント Pod のスケジューリングに制限を追加する
matchExpressionsオブジェクトを指定します。
5.10.1.8. ノードエージェントのロードアフィニティーのガイドライン リンクのコピーリンクがクリップボードにコピーされました!
DataProtectionApplication (DPA) カスタムリソース (CR) でノードエージェント loadAffinity オブジェクトを設定するには、次のガイドラインを使用してください。
-
単純なノードマッチングの場合は、
spec.nodeagent.podConfig.nodeSelectorオブジェクトを使用します。 -
より複雑な状況の場合は、
podConfig.nodeSelectorオブジェクトを使用せずにloadAffinity.nodeSelectorオブジェクトを使用します。 -
podConfig.nodeSelectorオブジェクトとloadAffinity.nodeSelectorオブジェクトの両方を使用できます。ただし、loadAffinityオブジェクトにはpodConfigオブジェクトと同等かそれ以上の制限が必要です。この場合、podConfig.nodeSelectorのラベルは、loadAffinity.nodeSelectorオブジェクトで使用されるラベルのサブセットである必要があります。 -
DPA で
podConfig.nodeSelectorオブジェクトとloadAffinity.nodeSelectorオブジェクトの両方を設定した場合、matchExpressionsフィールドとmatchLabelsフィールドは使用できません。 DPA で
podConfig.nodeSelectorオブジェクトとloadAffinity.nodeSelectorオブジェクトの両方を設定するには、次の例を参照してください。... spec: configuration: nodeAgent: enable: true uploaderType: kopia loadAffinity: - nodeSelector: matchLabels: label.io/location: 'US' label.io/gpu: 'no' podConfig: nodeSelector: label.io/gpu: 'no'
5.10.1.9. ノードエージェントの同時実行の設定 リンクのコピーリンクがクリップボードにコピーされました!
クラスター内の各ノードで同時に実行できるノードエージェント操作の最大数を制御できます。
Data Protection Application (DPA) の次のフィールドのいずれかを使用して設定できます。
-
globalConfig: すべてのノードにおけるノードエージェントのデフォルトの同時実行制限を定義します。 -
perNodeConfig:nodeSelectorラベルに基づいて、特定のノードに対して異なる同時実行制限を指定します。これにより、特定のノードが異なるリソース容量やロールを持つ柔軟な環境が実現されます。
前提条件
-
cluster-admin権限を持つユーザーとしてログインしている。
手順
特定のノードに対して同時実行を使用する場合は、それらのノードにラベルを追加します。
$ oc label node/<node_name> label.io/instance-type='large'DPA インスタンスの同時実行フィールドを設定します。
configuration: nodeAgent: enable: true uploaderType: kopia loadConcurrency: globalConfig: 1 perNodeConfig: - nodeSelector: matchLabels: label.io/instance-type: large number: 3ここでは、以下のようになります。
globalConfig-
グローバル同時接続数を指定します。デフォルト値は 1 です。これは同時実行がなく、1 つの負荷のみが許可されることを意味します。
globalConfig値に制限はありません。 label.io/instance-type- ノードごとの同時実行性を示すラベルを指定します。
number- ノードごとの同時接続数を指定します。たとえば、インスタンスのタイプとサイズに基づき、ノードごとに多数の同時実行数を指定できます。ノードごとの同時実行数の範囲は、グローバル同時実行数と同じです。設定ファイルにノードごとの同時実行数とグローバル同時実行数が含まれている場合、ノードごとの同時実行数が優先されます。
5.10.1.10. ノードエージェントを非 root および非特権ユーザーとして設定する リンクのコピーリンクがクリップボードにコピーされました!
ノードエージェントのセキュリティーを強化するには、DataProtectionApplication (DPA) カスタムリソース (CR) の spec.configuration.velero.disableFsBackup 設定を使用して、OADP Operator ノードエージェントデーモンセットを非 root および非特権ユーザーとして実行するように設定できます。
spec.configuration.velero.disableFsBackup 設定を true に設定すると、ノードエージェントのセキュリティーコンテキストによってルートファイルシステムが読み取り専用に設定され、privileged フラグが false に設定されます。
spec.configuration.velero.disableFsBackup を true に設定すると、特権コンテナーの必要性がなくなり、読み取り専用のルートファイルシステムが適用されるため、ノードエージェントのセキュリティーが強化されます。
ただし、Kopia によるファイルシステムバックアップ (FSB) も無効になります。ワークロードがネイティブスナップショットをサポートしていないボリュームのバックアップに FSB に依存している場合は、disableFsBackup 設定がユースケースに適合するかどうかを評価する必要があります。
前提条件
- OADP Operator がインストールされている。
手順
次の例に示すように、DPA の
disableFsBackupフィールドを設定します。apiVersion: oadp.openshift.io/v1alpha1 kind: DataProtectionApplication metadata: name: ts-dpa namespace: openshift-adp spec: backupLocations: - velero: credential: key: cloud name: cloud-credentials default: true objectStorage: bucket: <bucket_name> prefix: velero provider: gcp configuration: nodeAgent: enable: true uploaderType: kopia velero: defaultPlugins: - csi - gcp - openshift disableFsBackup: trueここでは、以下のようになります。
ノードエージェント- DPA でノードエージェントを有効にすることを指定します。
disableFsBackup-
disableFsBackupフィールドをtrueに設定することを指定します。
検証
次のコマンドを実行して、ノードエージェントのセキュリティーコンテキストが非 root として実行するように設定され、root ファイルシステムが
readOnlyあることを確認します。$ oc get daemonset node-agent -o yaml出力例は次のとおりです。
apiVersion: apps/v1 kind: DaemonSet metadata: ... name: node-agent namespace: openshift-adp ... spec: ... template: metadata: ... spec: containers: ... securityContext: allowPrivilegeEscalation: false capabilities: drop: - ALL privileged: false readOnlyRootFilesystem: true ... nodeSelector: kubernetes.io/os: linux os: name: linux restartPolicy: Always schedulerName: default-scheduler securityContext: runAsNonRoot: true seccompProfile: type: RuntimeDefault serviceAccount: velero serviceAccountName: velero ....ここでは、以下のようになります。
allowPrivilegeEscalation-
allowPrivilegeEscalationフィールドが false であることを指定します。 privileged-
特権フィールドが false であることを指定します。 readOnlyRootFilesystem- ルートファイルシステムが読み取り専用であることを指定します。
runAsNonRoot- ノードエージェントを非 root ユーザーとして実行することを指定します。
5.10.1.11. リポジトリーメンテナンスの設定 リンクのコピーリンクがクリップボードにコピーされました!
OADP リポジトリーのメンテナンスはバックグラウンドジョブであり、ノードエージェント Pod とは別に設定できます。そのため、ノードエージェントが実行されているノードでも実行されていないノードでも、リポジトリーメンテナンス Pod をスケジュールできます。
DataProtectionApplication (DPA) カスタムリソース (CR) 内のリポジトリーメンテナンスジョブのアフィニティー設定を使用できるのは、バックアップリポジトリーとして Kopia を使用する場合だけです。
すべてのリポジトリーに影響するグローバルレベルでロードアフィニティーを設定できます。または、リポジトリーごとにロードアフィニティーを設定することもできます。グローバル設定とリポジトリーごとの設定を組み合わせて使用することもできます。
前提条件
-
cluster-admin権限を持つユーザーとしてログインしている。 - OADP Operator がインストールされている。
- DPA CR が設定されている。
手順
次の一方または両方の方法を使用して、DPA 仕様の
loadAffinityオブジェクトを設定します。グローバル設定: 次の例に示すように、すべてのリポジトリーのロードアフィニティーを設定します。
... spec: configuration: repositoryMaintenance: global: podResources: cpuRequest: "100m" cpuLimit: "200m" memoryRequest: "100Mi" memoryLimit: "200Mi" loadAffinity: - nodeSelector: matchLabels: label.io/gpu: 'no' matchExpressions: - key: label.io/location operator: In values: - US - EUここでは、以下のようになります。
リポジトリーメンテナンス-
例に示すように、
repositoryMaintenanceオブジェクトを指定します。 global-
すべてのリポジトリーのロードアフィニティーを設定するための
グローバルオブジェクトを指定します。
リポジトリーごとの設定: 次の例に示すように、リポジトリーごとにロードアフィニティーを設定します。
... spec: configuration: repositoryMaintenance: myrepositoryname: loadAffinity: - nodeSelector: matchLabels: label.io/cpu: 'yes'ここでは、以下のようになります。
私のリポジトリー名-
各リポジトリーの
repositoryMaintenanceオブジェクトを指定します。
5.10.1.12. Velero ロードアフィニティーの設定 リンクのコピーリンクがクリップボードにコピーされました!
OADP をデプロイするごとに、1 つの Velero Pod が作成されます。その主な目的は、Velero のワークロードをスケジュールすることです。Velero Pod をスケジュールするには、DataProtectionApplication (DPA) カスタムリソース (CR) 仕様の velero.podConfig.nodeSelector および velero.loadAffinity オブジェクトを使用できます。
Velero Pod を特定のノードに割り当てるには、podConfig.nodeSelector オブジェクトを使用します。velero.loadAffinity オブジェクトを設定して、Pod レベルのアフィニティーとアンチアフィニティーを指定することもできます。
OpenShift のスケジューラーがルールを適用し、Velero Pod のデプロイメントのスケジューリングを実行します。
前提条件
-
cluster-admin権限を持つユーザーとしてログインしている。 - OADP Operator がインストールされている。
- DPA CR が設定されている。
手順
次の例に示すように、DPA 仕様で
velero.podConfig.nodeSelectorおよびvelero.loadAffinityオブジェクトを設定します。velero.podConfig.nodeSelectorオブジェクトの設定:... spec: configuration: velero: podConfig: nodeSelector: some-label.io/custom-node-role: backup-corevelero.loadAffinityオブジェクトの設定:... spec: configuration: velero: loadAffinity: - nodeSelector: matchLabels: label.io/gpu: 'no' matchExpressions: - key: label.io/location operator: In values: - US - EU
5.10.1.13. DPA の imagePullPolicy 設定のオーバーライド リンクのコピーリンクがクリップボードにコピーされました!
OADP 1.4.0 以前では、Operator はすべてのイメージで Velero およびノードエージェント Pod の imagePullPolicy フィールドを Always に設定します。
OADP 1.4.1 以降では、Operator はまず、各イメージに sha256 または sha512 ダイジェストがあるかを確認し、それに応じて imagePullPolicy フィールドを設定します。
-
イメージにダイジェストがある場合、Operator は
imagePullPolicyをIfNotPresentに設定します。 -
イメージにダイジェストがない場合、Operator は
imagePullPolicyをAlwaysに設定します。
Data Protection Application (DPA) の spec.imagePullPolicy フィールドを使用して、imagePullPolicy フィールドをオーバーライドすることもできます。
前提条件
- OADP Operator がインストールされている。
手順
以下の例のように、DPA の
spec.imagePullPolicyフィールドを設定します。Data Protection Application の例
apiVersion: oadp.openshift.io/v1alpha1 kind: DataProtectionApplication metadata: name: test-dpa namespace: openshift-adp spec: backupLocations: - name: default velero: config: insecureSkipTLSVerify: "true" profile: "default" region: <bucket_region> s3ForcePathStyle: "true" s3Url: <bucket_url> credential: key: cloud name: cloud-credentials default: true objectStorage: bucket: <bucket_name> prefix: velero provider: aws configuration: nodeAgent: enable: true uploaderType: kopia velero: defaultPlugins: - openshift - aws - kubevirt - csi imagePullPolicy: Neverここでは、以下のようになります。
imagePullPolicy-
imagePullPolicyの値を指定します。この例では、imagePullPolicyフィールドがNeverに設定されています。
5.10.1.13.1. DataProtectionApplication CR で CSI を有効にする リンクのコピーリンクがクリップボードにコピーされました!
CSI スナップショットを使用して永続ボリュームをバックアップするには、DataProtectionApplication カスタムリソース (CR) で Container Storage Interface (CSI) を有効にします。
前提条件
- クラウドプロバイダーは、CSI スナップショットをサポートする必要があります。
手順
次の例のように、
DataProtectionApplicationCR を編集します。apiVersion: oadp.openshift.io/v1alpha1 kind: DataProtectionApplication ... spec: configuration: velero: defaultPlugins: - openshift - csiここでは、以下のようになります。
csi-
CSI のデフォルトプラグインを指定します。
5.10.1.13.2. DataProtectionApplication でノードエージェントを無効にする リンクのコピーリンクがクリップボードにコピーされました!
バックアップに Restic、Kopia、または DataMover を使用していない場合は、DataProtectionApplication カスタムリソース (CR) の nodeAgent フィールドを無効にすることができます。nodeAgent を無効にする前に、OADP Operator がアイドル状態であり、バックアップを実行していないことを確認してください。
手順
nodeAgentを無効にするには、enableフラグをfalseに設定します。以下の例を参照してください。DataProtectionApplicationCR の例# ... configuration: nodeAgent: enable: false uploaderType: kopia # ...ここでは、以下のようになります。
enable- ノードエージェントを有効にします。
nodeAgentを有効にするには、enableフラグをtrueに設定します。以下の例を参照してください。DataProtectionApplicationCR の例# ... configuration: nodeAgent: enable: true uploaderType: kopia # ...ここでは、以下のようになります。
enableノードエージェントを有効にします。
ジョブをセットアップして、
DataProtectionApplicationCR のnodeAgentフィールドを有効または無効にすることができます。詳細は、「ジョブの使用による Pod でのタスクの実行」を参照してください。