4.11. トラブルシューティング

OpenShift CLI ツール または Velero CLI ツール を使用して、Velero カスタムリソース (CR) をデバッグできます。Velero CLI ツールは、より詳細なログおよび情報を提供します。

インストールの問題CR のバックアップと復元の問題、および Restic の問題 を確認できます。

ログと CR 情報は、must-gather ツール を使用して収集できます。

Velero CLI ツールは、次の方法で入手できます。

  • Velero CLI ツールをダウンロードする
  • クラスター内の Velero デプロイメントで Velero バイナリーにアクセスする

4.11.1. Velero CLI ツールをダウンロードする

Velero のドキュメントページ の手順に従って、Velero CLI ツールをダウンロードしてインストールできます。

このページには、以下に関する手順が含まれています。

  • Homebrew を使用した macOS
  • GitHub
  • Chocolatey を使用した Windows

前提条件

  • DNS とコンテナーネットワークが有効になっている、v1.16 以降の Kubernetes クラスターにアクセスできる。
  • kubectl をローカルにインストールしている。

手順

  1. ブラウザーを開き、Velero Web サイト上の "Install the CLI" に移動します。
  2. macOS、GitHub、または Windows の適切な手順に従います。
  3. 使用している OADP および OpenShift Container Platform のバージョンに適切な Velero バージョンをダウンロードします。

4.11.1.1. OADP-Velero-OpenShift Container Platform バージョンの関係

OADP のバージョンVelero のバージョンOpenShift Container Platform バージョン

1.1.0

1.9

4.9 以降

1.1.1

1.9

4.9 以降

1.1.2

1.9

4.9 以降

1.1.3

1.9

4.9 以降

1.1.4

1.9

4.9 以降

1.1.5

1.9

4.9 以降

1.1.6

1.9

4.11 以降

1.1.7

1.9

4.11 以降

1.2.0

1.11

4.11 以降

1.2.1

1.11

4.11 以降

1.2.2

1.11

4.11 以降

1.2.3

1.11

4.11 以降

1.3.0

1.12

4.12 以降

4.11.2. クラスター内の Velero デプロイメントで Velero バイナリーにアクセスする

shell コマンドを使用して、クラスター内の Velero デプロイメントの Velero バイナリーにアクセスできます。

前提条件

  • DataProtectionApplication カスタムリソースのステータスが Reconcile complete である。

手順

  • 次のコマンドを入力して、必要なエイリアスを設定します。

    $ alias velero='oc -n openshift-adp exec deployment/velero -c velero -it -- ./velero'

4.11.3. OpenShift CLI ツールを使用した Velero リソースのデバッグ

OpenShift CLI ツールを使用して Velero カスタムリソース (CR) と Velero Pod ログを確認することで、失敗したバックアップまたは復元をデバッグできます。

Velero CR

oc describe コマンドを使用して、Backup または Restore CR に関連する警告とエラーの要約を取得します。

$ oc describe <velero_cr> <cr_name>
Velero Pod ログ

oc logs コマンドを使用して、Velero Pod ログを取得します。

$ oc logs pod/<velero>
Velero Pod のデバッグログ

次の例に示すとおり、DataProtectionApplication リソースで Velero ログレベルを指定できます。

注記

このオプションは、OADP 1.0.3 以降で使用できます。

apiVersion: oadp.openshift.io/v1alpha1
kind: DataProtectionApplication
metadata:
  name: velero-sample
spec:
  configuration:
    velero:
      logLevel: warning

次の logLevel 値を使用できます。

  • trace
  • debug
  • info
  • warning
  • error
  • 致命的
  • panic

ほとんどのログには debug を使用することを推奨します。

4.11.4. Velero CLI ツールを使用した Velero リソースのデバッグ

Velero CLI ツールを使用して、Backup および Restore カスタムリソース (CR) をデバッグし、ログを取得できます。

Velero CLI ツールは、OpenShift CLI ツールよりも詳細な情報を提供します。

構文

oc exec コマンドを使用して、Velero CLI コマンドを実行します。

$ oc -n openshift-adp exec deployment/velero -c velero -- ./velero \
  <backup_restore_cr> <command> <cr_name>

$ oc -n openshift-adp exec deployment/velero -c velero -- ./velero \
  backup describe 0e44ae00-5dc3-11eb-9ca8-df7e5254778b-2d8ql

ヘルプオプション

velero --help オプションを使用して、すべての Velero CLI コマンドをリスト表示します。

$ oc -n openshift-adp exec deployment/velero -c velero -- ./velero \
  --help
describe コマンド

velero describe コマンドを使用して、Backup または Restore CR に関連する警告とエラーの要約を取得します。

$ oc -n openshift-adp exec deployment/velero -c velero -- ./velero \
  <backup_restore_cr> describe <cr_name>

$ oc -n openshift-adp exec deployment/velero -c velero -- ./velero \
  backup describe 0e44ae00-5dc3-11eb-9ca8-df7e5254778b-2d8ql

次の種類の復元エラーと警告が、velero describe リクエストの出力に表示されます。

  • Velero: Velero 自体の操作に関連するメッセージのリスト (クラウドへの接続、バックアップファイルの読み取りなどに関連するメッセージなど)
  • Cluster: クラスタースコープのリソースのバックアップまたは復元に関連するメッセージのリスト
  • Namespaces: namespace に保存されているリソースのバックアップまたは復元に関連するメッセージのリスト

これらのカテゴリーのいずれかで 1 つ以上のエラーが発生すると、Restore 操作のステータスが PartiallyFailed になり、Completed ではなくなります。警告によって完了ステータスが変化することはありません。

重要
  • リソース固有のエラー、つまり Cluster および Namespaces エラーの場合、restore description --details 出力に、Velero が復元に成功したすべてのリソースのリストが含まれています。このようなエラーが発生したリソースについては、そのリソースが実際にクラスター内に存在するかどうかを確認してください。
  • describe コマンドの出力に Velero エラーがあっても、リソース固有のエラーがない場合は、ワークロードの復元で実際の問題が発生することなく復元が完了した可能性があります。ただし、復元後のアプリケーションを十分に検証してください。

    たとえば、出力に PodVolumeRestore またはノードエージェント関連のエラーが含まれている場合は、PodVolumeRestoresDataDownloads のステータスを確認します。これらのいずれも失敗していないか、まだ実行中である場合は、ボリュームデータが完全に復元されている可能性があります。

logs コマンド

velero logs コマンドを使用して、Backup または Restore CR のログを取得します。

$ oc -n openshift-adp exec deployment/velero -c velero -- ./velero \
  <backup_restore_cr> logs <cr_name>

$ oc -n openshift-adp exec deployment/velero -c velero -- ./velero \
  restore logs ccc7c2d0-6017-11eb-afab-85d0007f5a19-x4lbf

4.11.5. メモリーまたは CPU の不足により Pod がクラッシュまたは再起動する

メモリーまたは CPU の不足により Velero または Restic Pod がクラッシュした場合、これらのリソースのいずれかに対して特定のリソースリクエストを設定できます。

4.11.5.1. Velero Pod のリソースリクエストの設定

oadp_v1alpha1_dpa.yaml ファイルの configuration.velero.podConfig.resourceAllocations 仕様フィールドを使用して、Velero Pod に対する特定のリソース要求を設定できます。

手順

  • YAML ファイルで CPU および memory リソースのリクエストを設定します。

    Velero ファイルの例

    apiVersion: oadp.openshift.io/v1alpha1
    kind: DataProtectionApplication
    ...
    configuration:
      velero:
        podConfig:
          resourceAllocations: 1
            requests:
              cpu: 200m
              memory: 256Mi

    1
    リストされている resourceAllocations は、平均使用量です。

4.11.5.2. Restic Pod のリソースリクエストの設定

configuration.restic.podConfig.resourceAllocations 仕様フィールドを使用して、Restic Pod の特定のリソース要求を設定できます。

手順

  • YAML ファイルで CPU および memory リソースのリクエストを設定します。

    Restic ファイルの例

    apiVersion: oadp.openshift.io/v1alpha1
    kind: DataProtectionApplication
    ...
    configuration:
      restic:
        podConfig:
          resourceAllocations: 1
            requests:
              cpu: 1000m
              memory: 16Gi

    1
    リストされている resourceAllocations は、平均使用量です。
重要

リソース要求フィールドの値は、Kubernetes リソース要件と同じ形式に従う必要があります。また、configuration.velero.podConfig.resourceAllocations または configuration.restic.podConfig.resourceAllocations を指定しない場合、Velero Pod または Restic Pod のデフォルトの resources 仕様は次のようになります。

requests:
  cpu: 500m
  memory: 128Mi

4.11.6. Velero と受付 Webhook に関する問題

Velero では、復元中に受付 Webhook の問題を解決する機能が制限されています。受付 Webhook を使用するワークロードがある場合は、追加の Velero プラグインを使用するか、ワークロードの復元方法を変更する必要がある場合があります。

通常、受付 Webhook を使用するワークロードでは、最初に特定の種類のリソースを作成する必要があります。通常、受付 Webhook は子リソースをブロックするため、これは特にワークロードに子リソースがある場合に当てはまります。

たとえば、service.serving.knative.dev などの最上位オブジェクトを作成または復元すると、通常、子リソースが自動的に作成されます。最初にこれを行う場合、Velero を使用してこれらのリソースを作成および復元する必要はありません。これにより、Velero が使用する可能性のある受付 Webhook によって子リソースがブロックされるという問題が回避されます。

4.11.6.1. 受付 Webhook を使用する Velero バックアップの回避策の復元

このセクションでは、受付 Webhook を使用するいくつかのタイプの Velero バックアップのリソースを復元するために必要な追加の手順について説明します。

4.11.6.1.1. Knative リソースの復元

Velero を使用して受付 Webhook を使用する Knative リソースをバックアップする際に問題が発生する場合があります。

受付 Webhook を使用する Knative リソースをバックアップおよび復元する場合は、常に最上位の Service リソースを最初に復元することで、このような問題を回避できます。

手順

  • 最上位の service.serving.knavtive.dev Service リソースを復元します。

    $ velero restore <restore_name> \
      --from-backup=<backup_name> --include-resources \
      service.serving.knavtive.dev
4.11.6.1.2. IBM AppConnect リソースの復元

Velero を使用して受付 Webhook を持つ IBM AppConnect リソースを復元するときに問題が発生した場合は、この手順のチェックを実行できます。

手順

  1. クラスター内の kind: MutatingWebhookConfiguration の受付プラグインの変更があるかチェックします。

    $ oc get mutatingwebhookconfigurations
  2. kind: MutatingWebhookConfiguration の YAML ファイルを調べて、問題が発生しているオブジェクトの作成をブロックするルールがないことを確認します。詳細は、Kuberbetes の公式ドキュメント を参照してください。
  3. バックアップ時に使用される type: Configuration.appconnect.ibm.com/v1beta1spec.version が、インストールされている Operator のサポート対象であることを確認してください。

4.11.6.2. OADP プラグインの既知の問題

次のセクションでは、OpenShift API for Data Protection (OADP) プラグインの既知の問題について説明します。

4.11.6.2.1. シークレットがないことで、イメージストリームのバックアップ中に Velero プラグインでパニックが発生する

バックアップとバックアップ保存場所 (BSL) がデータ保護アプリケーション (DPA) である OADP コントローラーの範囲外で管理されている場合、DPA 調整によって関連する oadp-<bsl_name>-<bsl_provider>-registry-secret は作成されません。

バックアップを実行すると、OpenShift Velero プラグインがイメージストリームバックアップでパニックになり、次のパニックエラーが表示されます。

024-02-27T10:46:50.028951744Z time="2024-02-27T10:46:50Z" level=error msg="Error backing up item"
backup=openshift-adp/<backup name> error="error executing custom action (groupResource=imagestreams.image.openshift.io,
namespace=<BSL Name>, name=postgres): rpc error: code = Aborted desc = plugin panicked:
runtime error: index out of range with length 1, stack trace: goroutine 94…
4.11.6.2.1.1. パニックエラーを回避するための回避策

Velero プラグインのパニックエラーを回避するには、次の手順を実行します。

  1. カスタム BSL に適切なラベルを付けます。

    $ oc label BackupStorageLocation <bsl_name> app.kubernetes.io/component=bsl
  2. BSL にラベルを付けた後、DPA の調整を待ちます。

    注記

    DPA 自体に軽微な変更を加えることで、強制的に調整を行うことができます。

  3. DPA の調整では、適切な oadp-<bsl_name>-<bsl_provider>-registry-secret が作成されていること、正しいレジストリーデータがそこに設定されていることを確認します。

    $ oc -n openshift-adp get secret/oadp-<bsl_name>-<bsl_provider>-registry-secret -o json | jq -r '.data'
4.11.6.2.2. OpenShift ADP Controller のセグメンテーション違反

cloudstoragerestic の両方を有効にして DPA を設定すると、openshift-adp-controller-manager Pod がクラッシュし、Pod がクラッシュループのセグメンテーション違反で失敗するまで無期限に再起動します。

velero または cloudstorage は相互に排他的なフィールドであるため、どちらか一方だけ定義できます。

  • velerocloudstorage の両方が定義されている場合、openshift-adp-controller-manager は失敗します。
  • velerocloudstorage のいずれも定義されていない場合、openshift-adp-controller-manager は失敗します。

この問題の詳細は、OADP-1054 を参照してください。

4.11.6.2.2.1. OpenShift ADP Controller のセグメンテーション違反の回避策

DPA の設定時に、velero または cloudstorage のいずれかを定義する必要があります。DPA で両方の API を定義すると、openshift-adp-controller-manager Pod がクラッシュループのセグメンテーション違反で失敗します。

4.11.6.3. Velero プラグインがメッセージ "received EOF, stopping recv loop" を返す

注記

Velero プラグインは、別のプロセスとして開始されます。Velero 操作が完了すると、成功したかどうかにかかわらず終了します。デバッグログの received EOF, stopping recv loop メッセージは、プラグイン操作が完了したことを示します。エラーが発生したわけではありません。

4.11.7. インストールの問題

Data Protection Application をインストールするときに、無効なディレクトリーまたは誤った認証情報を使用することによって問題が発生する可能性があります。

4.11.7.1. バックアップストレージに無効なディレクトリーが含まれています

Velero Pod ログにエラーメッセージ Backup storage contains invalid top-level directories が表示されます。

原因

オブジェクトストレージには、Velero ディレクトリーではないトップレベルのディレクトリーが含まれています。

解決方法

オブジェクトストレージが Velero 専用でない場合は、DataProtectionApplication マニフェストで spec.backupLocations.velero.objectStorage.prefix パラメーターを設定して、バケットの接頭辞を指定する必要があります。

4.11.7.2. 不正な AWS 認証情報

oadp-aws-registry Pod ログにエラーメッセージ InvalidAccessKeyId: The AWS Access Key Id you provided does not exist in our records. が表示されます。

Velero Pod ログには、エラーメッセージ NoCredentialProviders: no valid providers in chain が表示されます。

原因

Secret オブジェクトの作成に使用された credentials-velero ファイルの形式が正しくありません。

解決方法

次の例のように、credentials-velero ファイルが正しくフォーマットされていることを確認します。

サンプル credentials-velero ファイル

[default] 1
aws_access_key_id=AKIAIOSFODNN7EXAMPLE 2
aws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

1
AWS デフォルトプロファイル。
2
値を引用符 ("') で囲まないでください。

4.11.8. OADP Operator の問題

OpenShift API for Data Protection (OADP) Operator では、解決できない問題が原因で問題が発生する可能性があります。

4.11.8.1. OADP Operator がサイレントに失敗する

OADP Operator の S3 バケットは空である可能性がありますが、oc get po -n <OADP_Operator_namespace> コマンドを実行すると、Operator のステータスが Running であることがわかります。この場合、Operator は実行中であると誤報告するため、サイレントに失敗した と言われます。

原因

この問題は、クラウド認証情報で提供される権限が不十分な場合に発生します。

解決方法

バックアップ保存場所 (BSL) のリストを取得し、各 BSL のマニフェストで認証情報の問題を確認します。

手順

  1. 次のコマンドのいずれかを実行して、BSL のリストを取得します。

    1. OpenShift CLI を使用する場合:

      $ oc get backupstoragelocation -A
    2. Velero CLI を使用する場合:

      $ velero backup-location get -n <OADP_Operator_namespace>
  2. BSL のリストを使用し、次のコマンドを実行して各 BSL のマニフェストを表示し、各マニフェストにエラーがないか調べます。

    $ oc get backupstoragelocation -n <namespace> -o yaml

結果の例:

apiVersion: v1
items:
- apiVersion: velero.io/v1
  kind: BackupStorageLocation
  metadata:
    creationTimestamp: "2023-11-03T19:49:04Z"
    generation: 9703
    name: example-dpa-1
    namespace: openshift-adp-operator
    ownerReferences:
    - apiVersion: oadp.openshift.io/v1alpha1
      blockOwnerDeletion: true
      controller: true
      kind: DataProtectionApplication
      name: example-dpa
      uid: 0beeeaff-0287-4f32-bcb1-2e3c921b6e82
    resourceVersion: "24273698"
    uid: ba37cd15-cf17-4f7d-bf03-8af8655cea83
  spec:
    config:
      enableSharedConfig: "true"
      region: us-west-2
    credential:
      key: credentials
      name: cloud-credentials
    default: true
    objectStorage:
      bucket: example-oadp-operator
      prefix: example
    provider: aws
  status:
    lastValidationTime: "2023-11-10T22:06:46Z"
    message: "BackupStorageLocation \"example-dpa-1\" is unavailable: rpc
      error: code = Unknown desc = WebIdentityErr: failed to retrieve credentials\ncaused
      by: AccessDenied: Not authorized to perform sts:AssumeRoleWithWebIdentity\n\tstatus
      code: 403, request id: d3f2e099-70a0-467b-997e-ff62345e3b54"
    phase: Unavailable
kind: List
metadata:
  resourceVersion: ""

4.11.9. OADP タイムアウト

タイムアウトを延長すると、複雑なプロセスやリソースを大量に消費するプロセスが途中で終了することなく正常に完了できます。この設定により、エラー、再試行、または失敗の可能性を減らすことができます。

過度に長いタイムアウトを設定しないように、論理的な方法でタイムアウト延長のバランスをとってください。過度に長いと、プロセス内の根本的な問題が隠れる可能性があります。プロセスのニーズとシステム全体のパフォーマンスを満たす適切なタイムアウト値を慎重に検討して、監視してください。

次に、さまざまな OADP タイムアウトと、これらのパラメーターをいつどのように実装するかの手順を示します。

4.11.9.1. Restic タイムアウト

timeout は Restic タイムアウトを定義します。デフォルト値は 1h です。

以下のシナリオでは Restic timeout を使用します。

  • PV データの使用量の合計が 500GB を超える Restic バックアップの場合。
  • バックアップが次のエラーでタイムアウトになる場合:

    level=error msg="Error backing up item" backup=velero/monitoring error="timed out waiting for all PodVolumeBackups to complete"

手順

  • 次の例のように、DataProtectionApplication CR マニフェストの spec.configuration.restic.timeout ブロックの値を編集します。

    apiVersion: oadp.openshift.io/v1alpha1
    kind: DataProtectionApplication
    metadata:
     name: <dpa_name>
    spec:
      configuration:
        restic:
          timeout: 1h
    # ...

4.11.9.2. Velero リソースのタイムアウト

resourceTimeout は Velero カスタムリソース定義 (CRD) の可用性、volumeSnapshot の削除、リポジトリーの可用性など、タイムアウトが発生する前に複数の Velero リソースを待機する時間を定義します。デフォルトは 10m です。

次のシナリオでは resourceTimeout を使用します。

  • 合計 PV データ使用量が 1TB を超えるバックアップの場合。このパラメーターは、バックアップを完了としてマークする前に、Velero が Container Storage Interface (CSI) スナップショットをクリーンアップまたは削除しようとするときのタイムアウト値として使用されます。

    • このクリーンアップのサブタスクは VSC にパッチを適用しようとします。このタイムアウトはそのタスクに使用できます。
  • Restic または Kopia のファイルシステムベースのバックアップのバックアップリポジトリーを作成または準備できるようにするため。
  • カスタムリソース (CR) またはバックアップからリソースを復元する前に、クラスター内で Velero CRD が利用可能かどうかを確認します。

手順

  • 次の例のように、DataProtectionApplication CR マニフェストの spec.configuration.velero.resourceTimeout ブロックの値を編集します。

    apiVersion: oadp.openshift.io/v1alpha1
    kind: DataProtectionApplication
    metadata:
     name: <dpa_name>
    spec:
      configuration:
        velero:
          resourceTimeout: 10m
    # ...

4.11.9.3. Data Mover のタイムアウト

timeout は、VolumeSnapshotBackup および VolumeSnapshotRestore を完了するためにユーザーが指定したタイムアウトです。デフォルト値は 10m です。

次のシナリオでは、Data Mover timeout を使用します。

  • VolumeSnapshotBackups (VSB) および VolumeSnapshotRestores (VSR) を作成する場合は、10 分後にタイムアウトします。
  • 合計 PV データ使用量が 500GB を超える大規模環境向け。1h のタイムアウトを設定します。
  • VolumeSnapshotMover (VSM) プラグインを使用します。
  • OADP 1.1.x のみ。

手順

  • 次の例のように、DataProtectionApplication CR マニフェストの spec.features.dataMover.timeout ブロックの値を編集します。

    apiVersion: oadp.openshift.io/v1alpha1
    kind: DataProtectionApplication
    metadata:
     name: <dpa_name>
    spec:
      features:
        dataMover:
          timeout: 10m
    # ...

4.11.9.4. CSI スナップショットのタイムアウト

CSISnapshotTimeout は、タイムアウトとしてエラーを返す前に、CSI VolumeSnapshot ステータスが ReadyToUse になるまで待機する作成時の時間を指定します。デフォルト値は 10m です。

以下のシナリオでは、CSISnapshotTimeout を使用します。

  • CSI プラグイン。
  • スナップショットの作成に 10 分以上かかる可能性がある非常に大規模なストレージボリュームの場合。ログにタイムアウトが見つかった場合は、このタイムアウトを調整します。
注記

通常、CSISnapshotTimeout のデフォルト値は、デフォルト設定で大規模なストレージボリュームに対応できるため、調整する必要はありません。

手順

  • 次の例のように、Backup CR マニフェストの spec.csiSnapshotTimeout ブロックの値を編集します。

    apiVersion: velero.io/v1
    kind: Backup
    metadata:
     name: <backup_name>
    spec:
     csiSnapshotTimeout: 10m
    # ...

4.11.9.5. Velero におけるアイテム操作のデフォルトタイムアウト

defaultItemOperationTimeout では、非同期の BackupItemActions および RestoreItemActions がタイムアウトになる前に完了するのを待機する時間を定義します。デフォルト値は 1h です。

以下のシナリオでは、defaultItemOperationTimeout を使用します。

  • Data Mover 1.2.x のみ。
  • 特定のバックアップまたは復元が非同期アクションの完了を待機する時間を指定します。OADP 機能のコンテキストでは、この値は、Container Storage Interface (CSI) Data Mover 機能に関連する非同期アクションに使用されます。
  • defaultItemOperationTimeout が、defaultItemOperationTimeout を使用して Data Protection Application (DPA) に定義されている場合、バックアップおよび復元操作の両方に適用されます。itemOperationTimeout では、以下の Item operation timeout - restore セクションおよび Item operation timeout - backup セクションで説明されているように、バックアップのみを定義するか、これらの CR の復元のみを定義できます。

手順

  • 次の例のように、DataProtectionApplication CR マニフェストの spec.configuration.velero.defaultItemOperationTimeout ブロックの値を編集します。

    apiVersion: oadp.openshift.io/v1alpha1
    kind: DataProtectionApplication
    metadata:
     name: <dpa_name>
    spec:
      configuration:
        velero:
          defaultItemOperationTimeout: 1h
    # ...

4.11.9.6. アイテム操作のタイムアウト - 復元

ItemOperationTimeoutRestoreItemAction 操作の待機に使用される時間を指定します。デフォルト値は 1h です。

以下のシナリオでは、復元 ItemOperationTimeout を使用します。

  • Data Mover 1.2.x のみ。
  • Data Mover の場合は、BackupStorageLocation にアップロードおよびダウンロードします。タイムアウトに達しても復元アクションが完了しない場合、失敗としてマークされます。ストレージボリュームのサイズが大きいため、タイムアウトの問題が原因で Data Mover の操作が失敗する場合は、このタイムアウト設定を増やす必要がある場合があります。

手順

  • 次の例のように、Restore CR マニフェストの Restore.spec.itemOperationTimeout ブロックの値を編集します。

    apiVersion: velero.io/v1
    kind: Restore
    metadata:
     name: <restore_name>
    spec:
     itemOperationTimeout: 1h
    # ...

4.11.9.7. アイテム操作のタイムアウト - バックアップ

ItemOperationTimeout は、非同期 BackupItemAction 操作の待機時間を指定します。デフォルト値は 1h です。

次のシナリオでは、バックアップ ItemOperationTimeout を使用します。

  • Data Mover 1.2.x のみ。
  • Data Mover の場合は、BackupStorageLocation にアップロードおよびダウンロードします。タイムアウトに達してもバックアップアクションが完了しない場合は、失敗としてマークされます。ストレージボリュームのサイズが大きいため、タイムアウトの問題が原因で Data Mover の操作が失敗する場合は、このタイムアウト設定を増やす必要がある場合があります。

手順

  • 次の例のように、Backuo CR マニフェストの Backup.spec.itemOperationTimeout ブロックの値を編集します。

    apiVersion: velero.io/v1
    kind: Backup
    metadata:
     name: <backup_name>
    spec:
     itemOperationTimeout: 1h
    # ...

4.11.10. CR の問題のバックアップおよび復元

Backup および Restore カスタムリソース (CR) でこれらの一般的な問題が発生する可能性があります。

4.11.10.1. バックアップ CR はボリュームを取得できません

Backup CR は、エラーメッセージ InvalidVolume.NotFound: The volume ‘vol-xxxx' does not exist を表示します。

原因

永続ボリューム (PV) とスナップショットの場所は異なるリージョンにあります。

解決方法

  1. DataProtectionApplication マニフェストの spec.snapshotLocations.velero.config.region キーの値を編集して、スナップショットの場所が PV と同じリージョンにあるようにします。
  2. 新しい Backup CR を作成します。

4.11.10.2. バックアップ CR ステータスは進行中のままです

Backup CR のステータスは InProgress のフェーズのままであり、完了しません。

原因

バックアップが中断された場合は、再開することができません。

解決方法

  1. Backup CR の詳細を取得します。

    $ oc -n {namespace} exec deployment/velero -c velero -- ./velero \
      backup describe <backup>
  2. Backup CR を削除します。

    $ oc delete backup <backup> -n openshift-adp

    進行中の Backup CR はファイルをオブジェクトストレージにアップロードしていないため、バックアップの場所をクリーンアップする必要はありません。

  3. 新しい Backup CR を作成します。

4.11.10.3. バックアップ CR ステータスが PartlyFailed のままになる

Restic が使用されていない Backup CR のステータスは、PartiallyFailed フェーズのままで、完了しません。関連する PVC のスナップショットは作成されません。

原因

CSI スナップショットクラスに基づいてバックアップが作成されているが、ラベルがない場合、CSI スナップショットプラグインはスナップショットの作成に失敗します。その結果、Velero Pod は次のようなエラーをログに記録します。

+

time="2023-02-17T16:33:13Z" level=error msg="Error backing up item" backup=openshift-adp/user1-backup-check5 error="error executing custom action (groupResource=persistentvolumeclaims, namespace=busy1, name=pvc1-user1): rpc error: code = Unknown desc = failed to get volumesnapshotclass for storageclass ocs-storagecluster-ceph-rbd: failed to get volumesnapshotclass for provisioner openshift-storage.rbd.csi.ceph.com, ensure that the desired volumesnapshot class has the velero.io/csi-volumesnapshot-class label" logSource="/remote-source/velero/app/pkg/backup/backup.go:417" name=busybox-79799557b5-vprq

解決方法

  1. Backup CR を削除します。

    $ oc delete backup <backup> -n openshift-adp
  2. 必要に応じて、BackupStorageLocation に保存されているデータをクリーンアップして、領域を解放します。
  3. ラベル velero.io/csi-volumesnapshot-class=trueVolumeSnapshotClass オブジェクトに適用します。

    $ oc label volumesnapshotclass/<snapclass_name> velero.io/csi-volumesnapshot-class=true
  4. 新しい Backup CR を作成します。

4.11.11. Restic の問題

Restic を使用してアプリケーションのバックアップを作成すると、これらの問題が発生する可能性があります。

4.11.11.1. root_squash が有効になっている NFS データボリュームの Restic パーミッションエラー

Restic Pod ログには、エラーメッセージ controller=pod-volume-backup error="fork/exec/usr/bin/restic: permission denied" が表示されます。

原因

NFS データボリュームで root_squash が有効になっている場合、Resticnfsnobody にマッピングされ、バックアップを作成する権限がありません。

解決方法

この問題を解決するには、Restic の補足グループを作成し、そのグループ ID を DataProtectionApplication マニフェストに追加します。

  1. NFS データボリューム上に Restic の補足グループを作成します。
  2. NFS ディレクトリーに setgid ビットを設定して、グループの所有権が継承されるようにします。
  3. 次の例のように、spec.configuration.restic.supplementalGroups パラメーターおよびグループ ID を DataProtectionApplication マニフェストに追加します。

    spec:
      configuration:
        restic:
          enable: true
          supplementalGroups:
          - <group_id> 1
    1
    補助グループ ID を指定します。
  4. Restic Pod が再起動し、変更が適用されるまで待機します。

4.11.11.2. バケットが空になった後に、Restic Backup CR を再作成することはできない

namespace の Restic Backup CR を作成し、オブジェクトストレージバケットを空にしてから、同じ namespace の Backup CR を再作成すると、再作成された Backup CR は失敗します。

velero Pod ログにエラーメッセージstderr=Fatal: unable to open config file: Stat: The specified key does not exist.\nIs there a repository at the following location? が表示されます。

原因

オブジェクトストレージから Restic ディレクトリーが削除された場合、Velero は ResticRepository マニフェストから Restic リポジトリーを再作成または更新しません。詳細については、Velero issue 4421 を参照してください。

解決方法

  • 次のコマンドを実行して、関連する Restic リポジトリーを namespace から削除します。

    $ oc delete resticrepository openshift-adp <name_of_the_restic_repository>

    次のエラーログでは、mysql-persistent が問題のある Restic リポジトリーです。わかりやすくするために、リポジトリーの名前は斜体で表示されます。

     time="2021-12-29T18:29:14Z" level=info msg="1 errors
     encountered backup up item" backup=velero/backup65
     logSource="pkg/backup/backup.go:431" name=mysql-7d99fc949-qbkds
     time="2021-12-29T18:29:14Z" level=error msg="Error backing up item"
     backup=velero/backup65 error="pod volume backup failed: error running
     restic backup, stderr=Fatal: unable to open config file: Stat: The
     specified key does not exist.\nIs there a repository at the following
     location?\ns3:http://minio-minio.apps.mayap-oadp-
     veleo-1234.qe.devcluster.openshift.com/mayapvelerooadp2/velero1/
     restic/mysql-persistent\n: exit status 1" error.file="/remote-source/
     src/github.com/vmware-tanzu/velero/pkg/restic/backupper.go:184"
     error.function="github.com/vmware-tanzu/velero/
     pkg/restic.(*backupper).BackupPodVolumes"
     logSource="pkg/backup/backup.go:435" name=mysql-7d99fc949-qbkds

4.11.12. must-gather ツールの使用

must-gather ツールを使用して、OADP カスタムリソースのログ、メトリック、および情報を収集できます。

must-gather データはすべてのカスタマーケースに割り当てられる必要があります。

前提条件

  • cluster-admin ロールを持つユーザーとして OpenShift Container Platform クラスターにログインしている。
  • OpenShift CLI (oc) がインストールされている。

手順

  1. must-gather データを保存するディレクトリーに移動します。
  2. 次のデータ収集オプションのいずれかに対して、oc adm must-gather コマンドを実行します。

    $ oc adm must-gather --image=registry.redhat.io/oadp/oadp-mustgather-rhel8:v1.1

    データは must-gather/must-gather.tar.gz として保存されます。このファイルを Red Hat カスタマーポータル で作成したサポートケースにアップロードすることができます。

    $ oc adm must-gather --image=registry.redhat.io/oadp/oadp-mustgather-rhel8:v1.1 \
      -- /usr/bin/gather_metrics_dump

    この操作には長時間かかる場合があります。データは must-gather/metrics/prom_data.tar.gz として保存されます。

4.11.12.1. must-gather ツールを使用する場合のオプションの組み合わせ

現時点では、たとえば安全でない TLS 接続を許可しながらタイムアウトしきい値を指定するなど、must-gather スクリプトを組み合わせることはできません。状況によっては、次の例のように must-gather コマンドラインで内部変数を設定することで、この制限を回避できます。

$ oc adm must-gather --image=brew.registry.redhat.io/rh-osbs/oadp-oadp-mustgather-rhel8:1.1.1-8  -- skip_tls=true /usr/bin/gather_with_timeout <timeout_value_in_seconds>

この例では、gather_with_timeout スクリプトを実行する前に、skip_tls 変数を設定します。その結果、Gather_with_timeoutGather_without_tls が組み合わされます。

この方法で指定できる他の変数は次のとおりです。

  • logs_since、デフォルト値は 72h
  • request_timeout、デフォルト値は 0s

4.11.13. OADP モニタリング

OpenShift Container Platform は、ユーザーと管理者がクラスターを効果的に監視および管理できるだけでなく、クラスター上で実行されているユーザーアプリケーションやサービスのワークロードパフォーマンスを監視および分析できるようにする監視スタックを提供します (イベント発生時のアラートの受信など)。

4.11.13.1. OADP モニタリングの設定

OADP Operator は、OpenShift モニタリングスタックによって提供される OpenShift ユーザーワークロードモニタリングを利用して、Velero サービスエンドポイントからメトリックを取得します。モニタリングスタックを使用すると、ユーザー定義のアラートルールを作成したり、OpenShift メトリッククエリーフロントエンドを使用してメトリックをクエリーしたりできます。

ユーザーワークロードモニタリングを有効にすると、Grafana などの Prometheus 互換のサードパーティー UI を設定して使用し、Velero メトリックを視覚化することができます。

メトリックをモニタリングするには、ユーザー定義プロジェクトのモニタリングを有効にし、openshift-adp namespace に存在するすでに有効にな OADP サービスエンドポイントからそれらのメトリックを取得する ServiceMonitor リソースを作成する必要があります。

前提条件

  • cluster-admin 権限を持つアカウントを使用して OpenShift Container Platform クラスターにアクセスできる。
  • クラスター監視 config map が作成されました。

手順

  1. openshift-monitoring namespace で cluster-monitoring-config ConfigMap オブジェクトを編集します。

    $ oc edit configmap cluster-monitoring-config -n openshift-monitoring
  2. data セクションの config.yaml フィールドで、enableUserWorkload オプションを追加または有効にします。

    apiVersion: v1
    data:
      config.yaml: |
        enableUserWorkload: true 1
    kind: ConfigMap
    metadata:
    # ...
    1
    このオプションを追加するか、true に設定します
  3. しばらく待って、openshift-user-workload-monitoring namespace で次のコンポーネントが稼働しているかどうかを確認して、ユーザーワークロードモニタリングのセットアップを検証します。

    $ oc get pods -n openshift-user-workload-monitoring

    出力例

    NAME                                   READY   STATUS    RESTARTS   AGE
    prometheus-operator-6844b4b99c-b57j9   2/2     Running   0          43s
    prometheus-user-workload-0             5/5     Running   0          32s
    prometheus-user-workload-1             5/5     Running   0          32s
    thanos-ruler-user-workload-0           3/3     Running   0          32s
    thanos-ruler-user-workload-1           3/3     Running   0          32s

  4. openshift-user-workload-monitoringuser-workload-monitoring-config ConfigMap が存在することを確認します。存在する場合、この手順の残りの手順はスキップしてください。

    $ oc get configmap user-workload-monitoring-config -n openshift-user-workload-monitoring

    出力例

    Error from server (NotFound): configmaps "user-workload-monitoring-config" not found

  5. ユーザーワークロードモニタリングの user-workload-monitoring-config ConfigMap オブジェクトを作成し、2_configure_user_workload_monitoring.yaml ファイル名に保存します。

    出力例

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: user-workload-monitoring-config
      namespace: openshift-user-workload-monitoring
    data:
      config.yaml: |

  6. 2_configure_user_workload_monitoring.yaml ファイルを適用します。

    $ oc apply -f 2_configure_user_workload_monitoring.yaml
    configmap/user-workload-monitoring-config created

4.11.13.2. OADP サービスモニターの作成

OADP は、DPA の設定時に作成される openshift-adp-velero-metrics-svc サービスを提供します。ユーザーのワークロード監視で使用されるサービスモニターは、定義されたサービスを指す必要があります。

次のコマンドを実行して、サービスの詳細を取得します。

手順

  1. openshift-adp-velero-metrics-svc サービスが存在することを確認します。これには、ServiceMonitor オブジェクトのセレクターとして使用される app.kubernetes.io/name=velero ラベルが含まれている必要があります。

    $ oc get svc -n openshift-adp -l app.kubernetes.io/name=velero

    出力例

    NAME                               TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
    openshift-adp-velero-metrics-svc   ClusterIP   172.30.38.244   <none>        8085/TCP   1h

  2. 既存のサービスラベルと一致する ServiceMonitor YAML ファイルを作成し、そのファイルを 3_create_oadp_service_monitor.yaml として保存します。サービスモニターは openshift-adp-velero-metrics-svc サービスが存在する openshift-adp namespace に作成されます。

    ServiceMonitor オブジェクトの例

    apiVersion: monitoring.coreos.com/v1
    kind: ServiceMonitor
    metadata:
      labels:
        app: oadp-service-monitor
      name: oadp-service-monitor
      namespace: openshift-adp
    spec:
      endpoints:
      - interval: 30s
        path: /metrics
        targetPort: 8085
        scheme: http
      selector:
        matchLabels:
          app.kubernetes.io/name: "velero"

  3. 3_create_oadp_service_monitor.yaml ファイルを適用します。

    $ oc apply -f 3_create_oadp_service_monitor.yaml

    出力例

    servicemonitor.monitoring.coreos.com/oadp-service-monitor created

検証

  • OpenShift Container Platform Web コンソールの Administrator パースペクティブを使用して、新しいサービスモニターが Up 状態であることを確認します。

    1. ObserveTargets ページに移動します。
    2. Filter が選択されていないこと、または User ソースが選択されていることを確認し、Text 検索フィールドに openshift-adp と入力します。
    3. サービスモニターの Status のステータスが Up であることを確認します。

      図4.1 OADP メトリックのターゲット

      OADP メトリックのターゲット

4.11.13.3. アラートルールの作成

OpenShift Container Platform モニタリングスタックでは、アラートルールを使用して設定されたアラートを受信できます。OADP プロジェクトのアラートルールを作成するには、ユーザーワークロードの監視で収集されたメトリックの 1 つを使用します。

手順

  1. サンプル OADPBackupFailing アラートを含む PrometheusRule YAML ファイルを作成し、4_create_oadp_alert_rule.yaml として保存します。

    OADPBackupFailing アラートのサンプル

    apiVersion: monitoring.coreos.com/v1
    kind: PrometheusRule
    metadata:
      name: sample-oadp-alert
      namespace: openshift-adp
    spec:
      groups:
      - name: sample-oadp-backup-alert
        rules:
        - alert: OADPBackupFailing
          annotations:
            description: 'OADP had {{$value | humanize}} backup failures over the last 2 hours.'
            summary: OADP has issues creating backups
          expr: |
            increase(velero_backup_failure_total{job="openshift-adp-velero-metrics-svc"}[2h]) > 0
          for: 5m
          labels:
            severity: warning

    このサンプルでは、アラートは次の条件で表示されます。

    • 過去 2 時間に失敗した新しいバックアップの数が 0 より大きく増加しており、その状態が少なくとも 5 分間継続します。
    • 最初の増加時間が 5 分未満の場合、アラートは Pending 状態になり、その後、Firing 状態に変わります。
  2. 4_create_oadp_alert_rule.yaml ファイルを適用して、openshift-adp namespace に PrometheusRule オブジェクトを作成します。

    $ oc apply -f 4_create_oadp_alert_rule.yaml

    出力例

    prometheusrule.monitoring.coreos.com/sample-oadp-alert created

検証

  • アラートがトリガーされた後は、次の方法でアラートを表示できます。

    • Developer パースペクティブで、Observe メニューを選択します。
    • ObserveAlerting メニューの下の Administrator パースペクティブで、Filter ボックスの User を選択します。それ以外の場合、デフォルトでは Platform アラートのみが表示されます。

      図4.2 OADP バックアップ失敗アラート

      OADP バックアップ失敗アラート

関連情報

4.11.13.4. 利用可能なメトリックのリスト

これらは、OADP によって提供されるメトリックとその Type のリストです。

メトリクス名説明

kopia_content_cache_hit_bytes

キャッシュから取得したバイト数

カウンター

kopia_content_cache_hit_count

コンテンツがキャッシュから取得された回数

カウンター

kopia_content_cache_malformed

不正なコンテンツがキャッシュから読み取られた回数

カウンター

kopia_content_cache_miss_count

コンテンツがキャッシュ内で見つからずフェッチされた回数

カウンター

kopia_content_cache_missed_bytes

基盤となるストレージから取得したバイト数

カウンター

kopia_content_cache_miss_error_count

基盤となるストレージでコンテンツが見つからなかった回数

カウンター

kopia_content_cache_store_error_count

コンテンツをキャッシュに保存できなかった回数

カウンター

kopia_content_get_bytes

GetContent() を使用して取得されたバイト数

カウンター

kopia_content_get_count

GetContent() が呼び出された回数

カウンター

kopia_content_get_error_count

GetContent() が呼び出され、結果がエラーであった回数

カウンター

kopia_content_get_not_found_count

GetContent() が呼び出されて結果が見つからなかった回数

カウンター

kopia_content_write_bytes

WriteContent() に渡されるバイト数

カウンター

kopia_content_write_count

WriteContent() が呼び出された回数

カウンター

velero_backup_attempt_total

試行されたバックアップの合計数

カウンター

velero_backup_deletion_attempt_total

試行されたバックアップ削除の合計数

カウンター

velero_backup_deletion_failure_total

失敗したバックアップ削除の合計数

カウンター

velero_backup_deletion_success_total

成功したバックアップ削除の合計数

カウンター

velero_backup_duration_seconds

バックアップの完了にかかる時間 (秒単位)

ヒストグラム

velero_backup_failure_total

失敗したバックアップの合計数

カウンター

velero_backup_items_errors

バックアップ中に発生したエラーの合計数

ゲージ

velero_backup_items_total

バックアップされたアイテムの総数

ゲージ

velero_backup_last_status

バックアップの最終ステータス。値 1 は成功、値 0 は成功です。

ゲージ

velero_backup_last_successful_timestamp

最後にバックアップが正常に実行された時刻、秒単位の Unix タイムスタンプ

ゲージ

velero_backup_partial_failure_total

部分的に失敗したバックアップの合計数

カウンター

velero_backup_success_total

成功したバックアップの合計数

カウンター

velero_backup_tarball_size_bytes

バックアップのサイズ (バイト単位)

ゲージ

velero_backup_total

既存のバックアップの現在の数

ゲージ

velero_backup_validation_failure_total

検証に失敗したバックアップの合計数

カウンター

velero_backup_warning_total

警告されたバックアップの総数

カウンター

velero_csi_snapshot_attempt_total

CSI が試行したボリュームスナップショットの合計数

カウンター

velero_csi_snapshot_failure_total

CSI で失敗したボリュームスナップショットの総数

カウンター

velero_csi_snapshot_success_total

CSI が成功したボリュームスナップショットの総数

カウンター

velero_restore_attempt_total

試行された復元の合計数

カウンター

velero_restore_failed_total

失敗したリストアの合計数

カウンター

velero_restore_partial_failure_total

部分的に失敗したリストアの合計数

カウンター

velero_restore_success_total

成功した復元の合計数

カウンター

velero_restore_total

現在の既存のリストアの数

ゲージ

velero_restore_validation_failed_total

検証に失敗したリストアの失敗の合計数

カウンター

velero_volume_snapshot_attempt_total

試行されたボリュームスナップショットの総数

カウンター

velero_volume_snapshot_failure_total

失敗したボリュームスナップショットの総数

カウンター

velero_volume_snapshot_success_total

成功したボリュームスナップショットの総数

カウンター

4.11.13.5. Observe UI を使用したメトリックの表示

OpenShift Container Platform Web コンソールのメトリックは、Administrator または Developer パースペクティブから表示できます。これらのパースペクティブには、openshift-adp プロジェクトへのアクセス権が必要です。

手順

  • ObserveMetrics ページに移動します。

    • Developer パースペクティブを使用している場合は、次の手順に従います。

      1. Custom query を選択するか、Show PromQL リンクをクリックします。
      2. クエリーを入力し、Enter をクリックします。
    • Administrator パースペクティブを使用している場合は、テキストフィールドに式を入力し、Run Queries を選択します。

      図4.3 OADP メトリッククエリー

      OADP メトリッククエリー