5.26. OADP 故障排除


5.26.1. 故障排除

您可以使用以下方法排除 OADP 问题:

5.26.2. Velero CLI 工具

您可以使用以下选项获取 velero CLI 工具:

  • 下载 velero CLI 工具
  • 访问集群中的 Velero 部署中的 velero 二进制文件

5.26.2.1. 下载 Velero CLI 工具

您可以按照 Velero 文档页面中的说明下载并安装 Velero CLI 工具。该页包括以下选项的说明:

  • 使用 Homebrew 的 macOS
  • GitHub
  • 使用 Chocolatey 的 Windows

先决条件

  • 您可以访问启用了 DNS 和容器网络的 Kubernetes 集群 v1.16 或更高版本。
  • 您已在本地安装了 kubectl

流程

  1. 打开浏览器,进入到在 Velero 网站上的"安装 CLI"
  2. 按照 macOS、GitHub 或 Windows 的适当流程。
  3. 下载适用于 OADP 和 OpenShift Container Platform 版本的 Velero 版本。
Expand
OADP 版本Velero 版本OpenShift Container Platform 版本

1.3.0

{velero-1.12}

4.12-4.15

1.3.1

{velero-1.12}

4.12-4.15

1.3.2

{velero-1.12}

4.12-4.15

1.3.3

{velero-1.12}

4.12-4.15

1.3.4

{velero-1.12}

4.12-4.15

1.3.5

{velero-1.12}

4.12-4.15

1.4.0

{velero-1.14}

4.14-4.18

1.4.1

{velero-1.14}

4.14-4.18

1.4.2

{velero-1.14}

4.14-4.18

1.4.3

{velero-1.14}

4.14-4.18

1.5.0

{velero-1.16}

4.19

您可以使用 shell 命令访问集群中的 Velero 部署中的 Velero 二进制文件。

先决条件

  • 您的 DataProtectionApplication 自定义资源的状态为 Reconcile complete

流程

  • 使用以下命令设置所需的别名:

    $ alias velero='oc -n openshift-adp exec deployment/velero -c velero -it -- ./velero'
    Copy to Clipboard Toggle word wrap

5.26.2.3. 使用 OpenShift CLI 工具调试 Velero 资源

您可以使用 OpenShift CLI 工具检查 Velero 自定义资源(CR)和 Velero pod 日志来调试失败的备份或恢复。

流程

  • 使用以下 oc describe 命令,检索与 BackupRestore CR 关联的警告和错误概述:

    $ oc describe <velero_cr> <cr_name>
    Copy to Clipboard Toggle word wrap
  • 使用以下 oc logs 命令检索 Velero pod 日志:

    $ oc logs pod/<velero>
    Copy to Clipboard Toggle word wrap
  • DataProtectionApplication 资源中指定 Velero 日志级别,如下例所示。

    注意

    这个选项可从 OADP 1.0.3 开始。

    Velero 日志级别文件示例

    apiVersion: oadp.openshift.io/v1alpha1
    kind: DataProtectionApplication
    metadata:
      name: velero-sample
    spec:
      configuration:
        velero:
          logLevel: warning
    Copy to Clipboard Toggle word wrap

    可用的 logLevel 值如下:

  • trace
  • debug
  • info
  • warning
  • 错误
  • fatal
  • panic

    对于大多数日志,使用 info logLevel 值。

5.26.2.4. 使用 Velero CLI 工具调试 Velero 资源

您可以调试 BackupRestore 自定义资源(CR)并使用 Velero CLI 工具检索日志。Velero CLI 工具比 OpenShift CLI 工具提供更详细的信息。

流程

  • 使用 oc exec 命令运行 Velero CLI 命令:

    $ oc -n openshift-adp exec deployment/velero -c velero -- ./velero \
      <backup_restore_cr> <command> <cr_name>
    Copy to Clipboard Toggle word wrap

    oc exec 命令示例

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

  • 使用以下 velero --help 选项列出所有 Velero CLI 命令:

    $ oc -n openshift-adp exec deployment/velero -c velero -- ./velero \
      --help
    Copy to Clipboard Toggle word wrap
  • 使用以下 velero logs 命令检索 BackupRestore CR 的日志:

    $ oc -n openshift-adp exec deployment/velero -c velero -- ./velero \
      <backup_restore_cr> logs <cr_name>
    Copy to Clipboard Toggle word wrap

    velero logs 命令示例

    $ oc -n openshift-adp exec deployment/velero -c velero -- ./velero \
      restore logs ccc7c2d0-6017-11eb-afab-85d0007f5a19-x4lbf
    Copy to Clipboard Toggle word wrap

  • 使用以下 velero describe 命令检索与 BackupRestore CR 关联的警告和错误概述:

    $ oc -n openshift-adp exec deployment/velero -c velero -- ./velero \
      <backup_restore_cr> describe <cr_name>
    Copy to Clipboard Toggle word wrap

    velero describe 命令示例

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

    velero describe 请求的输出中会显示以下类型的恢复错误和警告:

  • Velero: 与 Velero 本身操作相关的信息列表,例如:与连接到云相关的信息,读取备份文件等
  • 集群:与备份和恢复集群范围的资源相关的消息列表
  • 命名空间:与备份或恢复存储在命名空间中资源相关的消息列表

    这些类别中的一个或多个错误会导致 Restore 操作接收 PartiallyFailed 而不是 Completed 状态。警告不会造成完成状态的更改。

    对这些恢复错误考虑以下内容:

  • 对于特定于资源的错误,即 ClusterNamespaces 错误,restore describe --details 输出包含了一个资源列表,其中包含 Velero 恢复的所有资源。对于具有此类错误的任何资源,请检查资源是否实际位于集群中。
  • 如果存在 Velero 错误,但没有特定于资源的错误,在 describe 命令的输出中没有完成恢复,且没有恢复工作负载中的实际问题。在这种情况下,请仔细验证部署后应用程序。

    例如,如果输出包含 PodVolumeRestore 或节点代理相关的错误,请检查 PodVolumeRestoresDataDownloads 的状态。如果其中任何失败或仍在运行,则卷数据可能已被完全恢复。

5.26.3. 因内存不足或 CPU 造成 pod 崩溃或重启

如果 Velero 或 Restic pod 因为缺少内存或 CPU 而导致崩溃,您可以为其中任何一个资源设置特定的资源请求。资源请求字段的值必须遵循与 Kubernetes 资源要求相同的格式。

如果您没有指定 configuration.velero.podConfig.resourceAllocationsconfiguration.restic.podConfig.resourceAllocations,请参阅 Velero 或 Restic pod 的以下默认 resources 规格配置:

requests:
  cpu: 500m
  memory: 128Mi
Copy to Clipboard Toggle word wrap

5.26.3.1. 为 Velero pod 设置资源请求

您可以使用 oadp_v1alpha1_dpa.yaml 文件中的 configuration.velero.podConfig.resourceAllocations 规格字段为 Velero pod 设置特定的资源请求。

流程

  • 在 YAML 文件中设置 cpumemory 资源请求:

    Velero 文件示例

    apiVersion: oadp.openshift.io/v1alpha1
    kind: DataProtectionApplication
    ...
    configuration:
      velero:
        podConfig:
          resourceAllocations: 
    1
    
            requests:
              cpu: 200m
              memory: 256Mi
    Copy to Clipboard Toggle word wrap

    1
    列出的 resourceAllocations 用于平均使用。

5.26.3.2. 为 Restic pod 设置资源请求

您可以使用 configuration.restic.podConfig.resourceAllocations specification 字段为 Restic pod 设置特定的资源请求。

注意

在 OADP 1.5.0 中,configuration.restic.podConfig.resourceAllocations specification 字段从 Data Protection Application (DPA) 中删除。使用 nodeAgent 部分,将 uploaderType 字段设置为 Kopia 而不是 Restic

流程

  • 在 YAML 文件中设置 cpumemory 资源请求:

    Restic 文件示例

    apiVersion: oadp.openshift.io/v1alpha1
    kind: DataProtectionApplication
    ...
    configuration:
      restic:
        podConfig:
          resourceAllocations: 
    1
    
            requests:
              cpu: 1000m
              memory: 16Gi
    Copy to Clipboard Toggle word wrap

    1
    列出的 resourceAllocations 用于平均使用。

5.26.3.3. 为节点Agent pod 设置资源请求

您可以使用 configuration.nodeAgent.podConfig.resourceAllocations 规格字段为 nodeAgent pod 设置特定的资源请求。

注意

在 OADP 1.5.0 中,configuration.restic.podConfig.resourceAllocations specification 字段从 Data Protection Application (DPA) 中删除。使用 nodeAgent 部分,将 uploaderType 字段设置为 Kopia 而不是 Restic

流程

  1. 在 YAML 文件中设置 cpumemory 资源请求:

    nodeAgent.yaml 文件示例

    apiVersion: oadp.openshift.io/v1alpha1
    kind: DataProtectionApplication
    metadata:
      name: ts-dpa
    spec:
      backupLocations:
      - velero:
          default: true
          objectStorage:
            bucket: oadp.....njph
            prefix: velero
          credential:
            key: cloud
            name: cloud-credentials-gcp
          provider: gcp
      configuration:
        velero:
          defaultPlugins:
          - gcp
          - openshift
          - csi
        nodeAgent:
          enable: true
          uploaderType: kopia
          podConfig:
            resourceAllocations: 
    1
    
              requests:
                cpu: 1000m
                memory: 16Gi 
    2
    Copy to Clipboard Toggle word wrap

    1
    显示的资源分配示例是平均使用量。
    2
    您可以根据基础架构和使用情况修改此参数。
  2. 运行以下命令来创建 DPA CR:

    $ oc create -f nodeAgent.yaml
    Copy to Clipboard Toggle word wrap

验证

  1. 使用以下命令验证 nodeAgent pod 是否正在运行:

    $ oc get pods
    Copy to Clipboard Toggle word wrap

    输出示例

    NAME                                                        READY   STATUS      RESTARTS   AGE
    node-agent-hbj9l                                            1/1     Running     0          97s
    node-agent-wmwgz                                            1/1     Running     0          95s
    node-agent-zvc7k                                            1/1     Running     0          98s
    openshift-adp-controller-manager-7f9db86d96-4lhgq           1/1     Running     0          137m
    velero-7b6c7fb8d7-ppc8m                                     1/1     Running     0          4m2s
    Copy to Clipboard Toggle word wrap

  2. 通过描述其中一个 nodeAgent pod 来检查资源请求:

    $ oc describe pod node-agent-hbj9l | grep -C 5 Requests
    Copy to Clipboard Toggle word wrap

    输出示例

          --log-format=text
        State:          Running
          Started:      Mon, 09 Jun 2025 16:22:15 +0530
        Ready:          True
        Restart Count:  0
        Requests:
          cpu:     1
          memory:  1Gi
        Environment:
          NODE_NAME:            (v1:spec.nodeName)
          VELERO_NAMESPACE:    openshift-adp (v1:metadata.namespace)
    Copy to Clipboard Toggle word wrap

Velero 在恢复过程中解决准入 Webhook 问题的能力有限。如果您的工作负载带有准入 webhook,您可能需要使用额外的 Velero 插件或更改如何恢复工作负载。

通常,带有准入 Webhook 的工作负载需要您首先创建特定类型的资源。如果您的工作负载具有子资源,因为准入 webhook 通常阻止子资源,则会出现这种情况。

例如,创建或恢复顶层对象,如 service.serving.knative.dev 通常会自动创建子资源。如果您首先这样做,则不需要使用 Velero 创建和恢复这些资源。这可避免由 Velero 可使用的准入 Webhook 阻断子资源的问题。

注意

Velero 插件作为单独的进程启动。当 Velero 操作完成后,无论是否成功,它们都会退出。接收到 received EOF, stopping recv loop 消息表示插件操作已完成。这并不意味着发生了错误。

5.26.4.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
    Copy to Clipboard Toggle word wrap

5.26.4.2. 恢复 IBM AppConnect 资源

如果您使用 Velero 恢复具有准入 webhook 的 IBM® AppConnect 资源时遇到问题,您可以在此过程中运行检查。

流程

  1. 输入/运行以下命令,检查集群中是否有 kind: MutatingWebhookConfiguration 的变异准入插件:

    $ oc get mutatingwebhookconfigurations
    Copy to Clipboard Toggle word wrap
  2. 检查每个 kind: MutatingWebhookConfiguration 的 YAML 文件,以确保其没有规则块创建存在问题的对象。如需更多信息,请参阅官方 Kubernetes 文档
  3. 检查在备份时使用的 type: Configuration.appconnect.ibm.com/v1beta1 中的 spec.version 被已安装的 Operator 支持。

5.26.4.3. 避免 Velero 插件 panic 错误

缺少 secret 可能会导致 Velero 插件在镜像流备份过程中出现 panic 错误。

当备份和 Backup Storage Location (BSL) 在 Data Protection Application (DPA) 之外进行管理时,OADP 控制器不会创建相关的 oadp-<bsl_name>-<bsl_provider>-registry-secret 参数。

在备份操作过程中,OpenShift Velero 插件在 镜像流 备份上出现 panic,并显示以下错误:

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…
Copy to Clipboard Toggle word wrap

使用以下临时解决方案来避免 Velero 插件 panic 错误。

流程

  1. 运行以下命令,使用相关标签标记自定义 BSL:

    $ oc label backupstoragelocations.velero.io <bsl_name> app.kubernetes.io/component=bsl
    Copy to Clipboard Toggle word wrap
  2. 在标记 BSL 后,等待 DPA 协调。

    注意

    您可以通过对 DPA 本身进行任何更改来强制进行协调。

验证

  • 在协调了 DPA 后,使用以下命令确认已创建了参数,并且正确的 registry 数据已填充到其中:

    $ oc -n openshift-adp get secret/oadp-<bsl_name>-<bsl_provider>-registry-secret -o json | jq -r '.data'
    Copy to Clipboard Toggle word wrap

如果您在同时启用了 cloudstoragerestic 的情况下配置 Data Protection Application (DPA),openshift-adp-controller-manager pod 会无限期重复崩溃和重启过程,直到 pod 出现一个崩溃循环分段错误为止。

在配置一个 DPA 时,定义 velerocloudstorage。否则,openshift-adp-controller-manager pod 可能会因为以下设置而失败,并显示 crash loop 分段错误:

  • 如果您同时定义了 velerocloudstorageopenshift-adp-controller-manager 会失败。
  • 如果 velerocloudstorage 都没有定义,openshift-adp-controller-manager 会失败。

有关此问题的更多信息,请参阅 OADP-1054

5.26.5. OADP 安装问题

在安装 Data Protection Application (DPA) 时,您可能会遇到使用无效目录或不正确的凭证导致的问题。

5.26.5.1. 解决备份存储中的无效目录

对象存储包含不是 Velero 目录的顶级目录。Velero pod 日志显示以下错误信息:

Backup storage contains invalid top-level directories.
Copy to Clipboard Toggle word wrap

流程

  • 如果对象存储不适用于 Velero,则必须通过设置 DataProtectionApplication 清单中的 spec.backupLocations.velero.objectStorage.prefix 参数为存储桶指定一个前缀。

5.26.5.2. 解决不正确的 AWS 凭证

如果用于创建 Secret 对象的 credentials-velero 文件被错误地格式化,则可能会出现多个错误,包括以下示例:

  • oadp-aws-registry pod 日志显示以下出错信息:

    `InvalidAccessKeyId: The AWS Access Key Id you provided does not exist in our records.`
    Copy to Clipboard Toggle word wrap
  • Velero pod 日志显示以下错误信息:

    NoCredentialProviders: no valid providers in chain.
    Copy to Clipboard Toggle word wrap

流程

  • 确保 credentials-velero 文件已正确格式化,如下例所示:

    credentials-velero 文件示例

    [default] 
    1
    
    aws_access_key_id=AKIAIOSFODNN7EXAMPLE 
    2
    
    aws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
    Copy to Clipboard Toggle word wrap

    1
    AWS 默认配置集。
    2
    不用使用括号 (", ') 把值括起来。

5.26.6. OADP Operator 问题

OpenShift API for Data Protection (OADP) Operator 可能会遇到它无法解决的问题。

5.26.6.1. 解决 OADP Operator 的静默失败

OADP Operator 的 S3 存储桶可能为空,但在运行 oc get po -n <oadp_operator_namespace> 命令时,您会看到 Operator 的状态变为 Running

在这种情况下,Operator 被认为有静默地失败,因为它错误地报告它正在运行。这个问题是因为云凭证提供的权限不足。

要解决这个问题,检索备份存储位置列表 (BSL),并检查每个 BSL 的清单是否有凭证问题。

流程

  1. 使用 OpenShift 或 Velero 命令行界面(CLI)检索 BSLs 列表:

    1. 使用 OpenShift CLI (oc) 检索 BSLs 列表:

      $ oc get backupstoragelocations.velero.io -A
      Copy to Clipboard Toggle word wrap
    2. 使用 velero CLI 检索 BSLs 列表:

      $ velero backup-location get -n <oadp_operator_namespace>
      Copy to Clipboard Toggle word wrap
  2. 使用上一步中的 BSLs 列表,并运行以下命令来检查每个 BSL 的清单中的错误:

    $ oc get backupstoragelocations.velero.io -n <namespace> -o yaml
    Copy to Clipboard Toggle word wrap

    结果示例

    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: ""
    Copy to Clipboard Toggle word wrap

5.26.7. OADP 超时

通过扩展超时,可以允许复杂的或资源密集型的进程在没有预先终止的情况下成功完成。此配置可减少错误、重试或失败。

确保您在扩展超时设置时符合正常的逻辑,,以便不会因为设置的超时时间太长导致隐藏了底层存在的问题。考虑并监控满足进程需求和整体系统性能的适当超时值。

以下 OADP 超时演示了如何和何时实现这些参数的说明:

5.26.7.1. 实施 restic 超时

spec.configuration.nodeAgent.timeout 参数定义 Restic 超时。默认值为 1h

在以下情况下,使用 nodeAgent 部分中的 Restic timeout 参数:

  • 对总 PV 数据使用量大于 500GB 的 Restic 备份。
  • 如果备份超时并显示以下错误:

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

流程

  • 编辑 DataProtectionApplication 自定义资源(CR)清单的 spec.configuration.nodeAgent.timeout 块中的值,如下例所示:

    apiVersion: oadp.openshift.io/v1alpha1
    kind: DataProtectionApplication
    metadata:
     name: <dpa_name>
    spec:
      configuration:
        nodeAgent:
          enable: true
          uploaderType: restic
          timeout: 1h
    # ...
    Copy to Clipboard Toggle word wrap

5.26.7.2. 实施 velero 资源超时

resourceTimeout 定义在超时发生前等待 Velero 资源的时间,如等待 Velero 自定义资源定义 (CRD)可用、volumeSnapshot 删除和存储库可用。默认值为 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
    # ...
    Copy to Clipboard Toggle word wrap
5.26.7.2.1. 实施 velero 默认项目操作超时

defaultItemOperationTimeout 设置定义在超时前在异步 BackupItemActionsRestoreItemActions 上等待的时长。默认值为 1h

在以下情况下使用 defaultItemOperationTimeout

  • 只有 Data Mover 1.2.x。
  • 要指定一个特定备份或恢复应等待异步操作完成的时间长度。在 OADP 功能上下文中,这个值用于涉及 Container Storage Interface (CSI) Data Mover 功能的异步操作。
  • 当使用 defaultItemOperationTimeout 在 Data Protection Application (DPA) 中定义 defaultItemOperationTimeout 时,它适用于备份和恢复操作。您可以使用 itemOperationTimeout 来只定义这些 CR 的备份过程或恢复过程,如以下 "Item operation timeout - restore" 和 "Item operation timeout - backup" 部分所述。

流程

  • 编辑 DataProtectionApplication CR 清单的 spec.configuration.velero.defaultItemOperationTimeout 块中的值,如下例所示:

    apiVersion: oadp.openshift.io/v1alpha1
    kind: DataProtectionApplication
    metadata:
     name: <dpa_name>
    spec:
      configuration:
        velero:
          defaultItemOperationTimeout: 1h
    # ...
    Copy to Clipboard Toggle word wrap

5.26.7.3. 实施 Data Mover 超时

timeout 是一个用户提供的、完成 VolumeSnapshotBackupVolumeSnapshotRestore 的超时值。默认值为 10m

在以下情况下使用 Data Mover timeout

  • 如果创建 VolumeSnapshotBackups (VSBs) 和 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
    # ...
    Copy to Clipboard Toggle word wrap

5.26.7.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
    # ...
    Copy to Clipboard Toggle word wrap

5.26.7.5. 实施项目操作超时 - 恢复

ItemOperationTimeout 设置用于指定等待 RestoreItemAction 操作的时间。默认值为 1h

在以下情况下,使用 restore 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
    # ...
    Copy to Clipboard Toggle word wrap

5.26.7.6. 实施项目操作超时 - 备份

ItemOperationTimeout 设置指定用于等待异步 BackupItemAction 操作的时间。默认值为 1h

在以下情况下,使用 backup ItemOperationTimeout

  • 只有 Data Mover 1.2.x。
  • 对于 Data Mover,上传到 BackupStorageLocation 或从其中下载。如果在达到超时时没有完成备份操作,它将标记为失败。如果因为存储卷太大出现超时并导致数据 Data Mover 操作失败,则可能需要增加这个超时设置。

流程

  • 编辑 Backup CR 清单的 Backup.spec.itemOperationTimeout 块中的值,如下例所示:

    apiVersion: velero.io/v1
    kind: Backup
    metadata:
     name: <backup_name>
    spec:
     itemOperationTimeout: 1h
    # ...
    Copy to Clipboard Toggle word wrap

5.26.8. 备份和恢复 CR 问题

您可能会遇到以下 BackupRestore 自定义资源 (CR) 的常见问题。

  • 备份 CR 无法检索卷
  • 备份 CR 状态在进行中
  • 备份 CR 状态处于 PartiallyFailed phase/state/etc

5.26.8.1. 备份 CR 无法检索卷的故障排除问题

如果持久性卷 (PV) 和快照位置位于不同的区域,则 Backup 自定义资源 (CR) 会显示以下错误信息:

错误示例

InvalidVolume.NotFound: The volume ‘vol-xxxx’ does not exist.
Copy to Clipboard Toggle word wrap

流程

  1. 编辑 DataProtectionApplication 清单中的 spec.snapshotLocations.velero.config.region 键的值,使快照位置位于与 PV 相同的区域。
  2. 创建新的 Backup CR。

如果备份中断,则无法恢复,Backup 客户资源 (CR) 的状态一直处于 InProgress 阶段,且无法完成。

流程

  1. 运行以下命令,检索 Backup CR 的详情:

    $ oc -n {namespace} exec deployment/velero -c velero -- ./velero \
      backup describe <backup>
    Copy to Clipboard Toggle word wrap
  2. 运行以下命令来删除 Backup CR:

    $ oc delete backups.velero.io <backup> -n openshift-adp
    Copy to Clipboard Toggle word wrap

    您不需要清理备份位置,因为正在进行的 Backup CR 没有上传文件到对象存储。

  3. 创建新的 Backup CR。
  4. 运行以下命令查看 Velero 备份详情:

    $ velero backup describe <backup_name> --details
    Copy to Clipboard Toggle word wrap

在没有 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
Copy to Clipboard Toggle word wrap

流程

  1. 运行以下命令来删除 Backup CR:

    $ oc delete backups.velero.io <backup> -n openshift-adp
    Copy to Clipboard Toggle word wrap
  2. 如果需要,清理 BackupStorageLocation 资源中保存的数据以释放空间。
  3. 运行以下命令,将 velero.io/csi-volumesnapshot-class=true 标签应用到 VolumeSnapshotClass 对象:

    $ oc label volumesnapshotclass/<snapclass_name> velero.io/csi-volumesnapshot-class=true
    Copy to Clipboard Toggle word wrap
  4. 创建新的 Backup CR。

5.26.9. Restic 问题

在使用 Restic 备份应用程序时,您可能会遇到这些问题。

  • 启用了 root_squash esource/parameter 的 NFS 数据卷的 Restic 权限错误
  • 在存储桶被清空后,无法重新创建 Restic Backup CR
  • 因为 pod 安全准入 (PSA) 策略有改变,Restic 恢复在 OpenShift Container Platform 4.14 上部分失败

5.26.9.1. NFS 数据卷的 Restic 权限错误故障排除

如果您的 NFS 数据卷启用了 root_squash 参数,Restic 映射设置为 nfsnobody 值,且没有创建备份的权限,Restic 的 pod 日志会显示以下错误信息:

错误示例

controller=pod-volume-backup error="fork/exec/usr/bin/restic: permission denied".
Copy to Clipboard Toggle word wrap

您可以通过为 Restic 创建补充组并将组 ID 添加到 DataProtectionApplication 清单中来解决这个问题。

流程

  1. 在 NFS 数据卷中为 Restic 创建补充组。
  2. 在 NFS 目录上设置 setgid 位,以便继承组所有权。
  3. spec.configuration.nodeAgent.supplementalGroups 参数和组 ID 添加到 DataProtectionApplication 清单中,如下例所示:

    apiVersion: oadp.openshift.io/v1alpha1
    kind: DataProtectionApplication
    # ...
    spec:
      configuration:
        nodeAgent:
          enable: true
          uploaderType: restic
          supplementalGroups:
          - <group_id> 
    1
    
    # ...
    Copy to Clipboard Toggle word wrap
    1
    指定补充组 ID。
  4. 等待 Restic pod 重启,以便应用更改。

如果 Restic 目录从对象存储中删除,Velero 不会从 ResticRepository 清单重新创建或更新 Restic 仓库。如需更多信息,请参阅 Velero issue 4421

如果您为命名空间创建 Restic Backup CR,请清空对象存储的存储桶,然后为同一命名空间重新创建 Backup CR,重新创建的 Backup CR 会失败。在本例中,velero pod 日志显示以下错误信息:

+ .sample 错误

stderr=Fatal: unable to open config file: Stat: The specified key does not exist.\nIs there a repository at the following location?
Copy to Clipboard Toggle word wrap

流程

  • 运行以下命令,从命名空间中删除相关的 Restic 存储库:

    $ oc delete resticrepository openshift-adp <name_of_the_restic_repository>
    Copy to Clipboard Toggle word wrap

    在以下错误日志中,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
    Copy to Clipboard Toggle word wrap

OpenShift Container Platform 4.14 强制执行一个 pod 安全准入 (PSA) 策略,该策略可能会在 Restic 恢复过程中阻止 pod 的就绪度。

如果创建 Pod 时找不到 SecurityContextConstraints (SCC) 资源,并且 pod 上的 PSA 策略没有设置为满足所需的标准,则 Pod 准入将被拒绝。

造成这个问题的原因是 Velero 资源恢复的顺序。

错误示例

\"level=error\" in line#2273: time=\"2023-06-12T06:50:04Z\"
level=error msg=\"error restoring mysql-869f9f44f6-tp5lv: pods\\\
"mysql-869f9f44f6-tp5lv\\\" is forbidden: violates PodSecurity\\\
"restricted:v1.24\\\": privil eged (container \\\"mysql\\\
" must not set securityContext.privileged=true),
allowPrivilegeEscalation != false (containers \\\
"restic-wait\\\", \\\"mysql\\\" must set securityContext.allowPrivilegeEscalation=false), unrestricted capabilities (containers \\\
"restic-wait\\\", \\\"mysql\\\" must set securityContext.capabilities.drop=[\\\"ALL\\\"]), seccompProfile (pod or containers \\\
"restic-wait\\\", \\\"mysql\\\" must set securityContext.seccompProfile.type to \\\
"RuntimeDefault\\\" or \\\"Localhost\\\")\" logSource=\"/remote-source/velero/app/pkg/restore/restore.go:1388\" restore=openshift-adp/todolist-backup-0780518c-08ed-11ee-805c-0a580a80e92c\n
velero container contains \"level=error\" in line#2447: time=\"2023-06-12T06:50:05Z\"
level=error msg=\"Namespace todolist-mariadb,
resource restore error: error restoring pods/todolist-mariadb/mysql-869f9f44f6-tp5lv: pods \\\
"mysql-869f9f44f6-tp5lv\\\" is forbidden: violates PodSecurity \\\"restricted:v1.24\\\": privileged (container \\\
"mysql\\\" must not set securityContext.privileged=true),
allowPrivilegeEscalation != false (containers \\\
"restic-wait\\\",\\\"mysql\\\" must set securityContext.allowPrivilegeEscalation=false), unrestricted capabilities (containers \\\
"restic-wait\\\", \\\"mysql\\\" must set securityContext.capabilities.drop=[\\\"ALL\\\"]), seccompProfile (pod or containers \\\
"restic-wait\\\", \\\"mysql\\\" must set securityContext.seccompProfile.type to \\\
"RuntimeDefault\\\" or \\\"Localhost\\\")\"
logSource=\"/remote-source/velero/app/pkg/controller/restore_controller.go:510\"
restore=openshift-adp/todolist-backup-0780518c-08ed-11ee-805c-0a580a80e92c\n]",
Copy to Clipboard Toggle word wrap

流程

  1. 在 DPA 自定义资源 (CR) 中,检查或设置 Velero 服务器上的 restore-resource-priorities 字段,以确保在资源列表的 pod 之前列出 securitycontextconstraints

    $ oc get dpa -o yaml
    Copy to Clipboard Toggle word wrap

    DPA CR 示例

    # ...
    configuration:
      restic:
        enable: true
      velero:
        args:
          restore-resource-priorities: 'securitycontextconstraints,customresourcedefinitions,namespaces,storageclasses,volumesnapshotclass.snapshot.storage.k8s.io,volumesnapshotcontents.snapshot.storage.k8s.io,volumesnapshots.snapshot.storage.k8s.io,datauploads.velero.io,persistentvolumes,persistentvolumeclaims,serviceaccounts,secrets,configmaps,limitranges,pods,replicasets.apps,clusterclasses.cluster.x-k8s.io,endpoints,services,-,clusterbootstraps.run.tanzu.vmware.com,clusters.cluster.x-k8s.io,clusterresourcesets.addons.cluster.x-k8s.io' 
    1
    
        defaultPlugins:
        - gcp
        - openshift
    Copy to Clipboard Toggle word wrap

    1
    如果您有一个现有的恢复资源优先级列表,请确保将现有列表与完整列表合并。
  2. 确保应用程序 pod 的安全标准一致(如为部署修复 PodSecurity Admission 警告 中所述)以防止部署警告。如果应用程序与安全标准不一致,无论 SCC 是什么,都可能会出现错误。 
注意

这个解决方案是临时的,永久解决方案正在讨论中。 

5.26.10. OADP Data 包含测试

DataProtectionTest (DPT) 是一个自定义资源 (CR),它提供验证 OADP 配置的框架。DPT CR 检查并报告以下参数信息:

  • 将备份上传到对象存储的性能。
  • 持久性卷声明的 CSI 快照就绪度。
  • 存储桶配置,如加密和版本控制。

在 DPT CR 中使用此信息,您可以确保正确配置并正确配置您的数据保护环境,并根据设置配置执行。

5.26.10.1. OADP DataProtectionTest CR 规格字段

您可以在 DataProtectionTest (DPT) 自定义资源 (CR) 中配置以下规格字段。

Expand
表 5.21. DPT CR spec 字段
字段类型描述

backupLocationName

string

DataProtectionApplication (DPA) CR 中配置的 BackupStorageLocation CR 的名称。

backupLocationSpec

object

BackupStorageLocation CR 的内联规格。

uploadSpeedTestConfig

object

配置,以运行到对象存储的上传速度测试。

csiVolumeSnapshotTestConfigs

list

持久性卷声明列表,对它们进行快照来验证快照的就绪度。

forceRun

布尔值

即使状态为 CompleteFailed,也重新运行 DPT CR。

skipTLSVerify

布尔值

如果设置为 true,则绕过 TLS 证书验证。

5.26.10.2. OADP DataProtectionTest CR 状态字段

您可以使用以下 status 字段查看 DataProtectionTest (DPT) 自定义资源 (CR) 的状态:

Expand
表 5.22. DPT CR 状态字段
字段类型描述

phase

string

DPT CR 的当前阶段。值是 InProgressCompleteFailed

lastTested

timestamp

DPT CR 最后一次运行时的时间戳。

uploadTest

object

上传速度测试的结果。

bucketMetadata

object

有关存储桶加密和版本控制的信息。

snapshotTests

list

每个持久性卷声明的快照测试结果。

snapshotSummary

string

快照聚合的传递/失败摘要。例如,2/2 passed

s3Vendor

string

AWS S3 兼容存储桶供应商。例如,AWS、MinIO、Ceph。

errorMessage

string

如果 DPT CR 失败,错误消息。

5.26.10.3. 使用 DataProtectionTest 自定义资源

您可以配置 DataProtectionTest (DPT) 自定义资源 (CR),然后运行 DPT CR 来验证 Container Storage Initiative (CSI) 快照就绪,并将性能上传到存储桶。

先决条件

  • 已以具有 cluster-admin 角色的用户身份登录到 OpenShift Container Platform 集群。
  • 已安装 OpenShift CLI(oc)。
  • 已安装 OADP Operator。
  • 您已创建了 DataProtectionApplication (DPA) CR。
  • 您已配置了备份存储位置 (BSL) 来存储备份。
  • 您有一个应用程序,并在单独的命名空间中运行持久性卷声明 (PVC)。

流程

  1. 为 DPT CR 创建清单文件,如下例所示:

    apiVersion: oadp.openshift.io/v1alpha1
    kind: DataProtectionTest
    metadata:
      name: dpt-sample
      namespace: openshift-adp
    spec:
      backupLocationName: <bsl_name> 
    1
    
      csiVolumeSnapshotTestConfigs: 
    2
    
      - snapshotClassName: csi-gce-pd-vsc
        timeout: 90s
        volumeSnapshotSource:
          persistentVolumeClaimName: <pvc1_name> 
    3
    
          persistentVolumeClaimNamespace: <pvc_namespace> 
    4
    
      - snapshotClassName: csi-gce-pd-vsc
        timeout: 120s
        volumeSnapshotSource:
          persistentVolumeClaimName: <pvc2_name> 
    5
    
          persistentVolumeClaimNamespace: <pvc_namespace>
      forceRun: false 
    6
    
      uploadSpeedTestConfig: 
    7
    
        fileSize: 200MB
        timeout: 120s
    Copy to Clipboard Toggle word wrap
    1
    指定 BSL 的名称。
    2
    指定 csiVolumeSnapshotTestConfigs 列表。在本例中,会测试两个 PVC。
    3
    指定第一个 PVC 的名称。
    4
    指定 PVC 的命名空间。
    5
    指定第二个 PVC 的名称。
    6
    如果要使 OADP 控制器跳过重新运行测试,请将 forceRun 标志设置为 false
    7
    通过设置 fileSizetimeout 字段来配置 uploadSpeedTestConfig 对象。
  2. 运行以下命令来创建 DPT CR:

    $ oc create -f <dpt_file_name> 
    1
    Copy to Clipboard Toggle word wrap
    1
    指定 DPT 清单的文件名。

验证

  1. 运行以下命令,验证 DPT CR 的阶段是否为 Complete

    $ oc get dpt dpt-sample
    Copy to Clipboard Toggle word wrap

    输出示例如下:

    NAME         PHASE      LASTTESTED   UPLOADSPEED(MBPS)   ENCRYPTION   VERSIONING   SNAPSHOTS    AGE
    dpt-sample   Complete   17m          546                 AES256       Enabled      2/2 passed   17m
    Copy to Clipboard Toggle word wrap
  2. 运行以下命令,验证 CSI 快照是否已就绪,数据上传测试是否成功:

    $ oc get dpt dpt-sample -o yaml
    Copy to Clipboard Toggle word wrap

    输出示例如下:

    apiVersion: oadp.openshift.io/v1alpha1
    kind: DataProtectionTest
    ....
    status:
      bucketMetadata: 
    1
    
        encryptionAlgorithm: AES256
        versioningStatus: Enabled
      lastTested: "202...:47:51Z"
      phase: Complete
      s3Vendor: AWS 
    2
    
      snapshotSummary: 2/2 passed 
    3
    
      snapshotTests:
      - persistentVolumeClaimName: mysql-data
        persistentVolumeClaimNamespace: ocp-mysql
        readyDuration: 24s
        status: Ready
      - persistentVolumeClaimName: mysql-data1
        persistentVolumeClaimNamespace: ocp-mysql
        readyDuration: 40s
        status: Ready
      uploadTest: 
    4
    
        duration: 3.071s
        speedMbps: 546
        success: true
    Copy to Clipboard Toggle word wrap
    1
    存储桶元数据信息。
    2
    S3 存储桶供应商。
    3
    CSI 快照测试概述。
    4
    上传测试详细信息。

您可以通过指定备份存储位置 (BSL) 规格而不是 BSL 名称来配置 DataProtectionTest (DPT) 自定义资源( CR)。然后,运行 DPT CR 来验证 Container Storage Initiative (CSI) 快照就绪,数据上传性能到存储桶。

先决条件

  • 已以具有 cluster-admin 角色的用户身份登录到 OpenShift Container Platform 集群。
  • 已安装 OpenShift CLI(oc)。
  • 已安装 OADP Operator。
  • 您已创建了 DataProtectionApplication (DPA) CR。
  • 您已配置存储桶来存储备份。
  • 您已创建了 Secret 对象来访问存储桶存储。
  • 您有一个应用程序,并在单独的命名空间中运行持久性卷声明 (PVC)。

流程

  1. 为 DPT CR 创建清单文件,如下例所示:

    apiVersion: oadp.openshift.io/v1alpha1
    kind: DataProtectionTest
    metadata:
      name: dpt-sample
      namespace: openshift-adp
    spec:
      backupLocationSpec: 
    1
    
        provider: aws
        default: true
        objectStorage:
          bucket: sample-bucket 
    2
    
          prefix: velero
        config:
          region: us-east-1 
    3
    
          profile: "default"
          insecureSkipTLSVerify: "true"
          s3Url: "https://s3.amazonaws.com/sample-bucket"
        credential: 
    4
    
          name: cloud-credentials
          key: cloud
      uploadSpeedTestConfig: 
    5
    
        fileSize: 50MB
        timeout: 120s
      csiVolumeSnapshotTestConfigs: 
    6
    
        - volumeSnapshotSource:
            persistentVolumeClaimName: mongo
            persistentVolumeClaimNamespace: mongo-persistent
          snapshotClassName: csi-snapclass
          timeout: 2m
      forceRun: true
      skipTLSVerify: true 
    7
    Copy to Clipboard Toggle word wrap
    1
    通过指定云供应商等详情来配置 BSL 规格。
    2
    指定存储桶名称。在本例中,存储桶名称为 sample-bucket
    3
    指定云供应商区域。
    4
    指定存储桶的云凭证。
    5
    (可选)通过设置 fileSizetimeout 字段来配置 uploadSpeedTestConfig 对象。
    6
    配置 csiVolumeSnapshotTestConfigs 对象。
    7
    设置为 true,以在 DPT CR 运行期间跳过 TLS 证书验证。
  2. 运行以下命令来创建 DPT CR:

    $ oc create -f <dpt_file_name> 
    1
    Copy to Clipboard Toggle word wrap
    1
    指定 DPT 清单的文件名。

验证

  1. 运行以下命令,验证 DPT CR 的阶段是否为 Complete

    $ oc get dpt dpt-sample
    Copy to Clipboard Toggle word wrap

    输出示例如下:

    NAME         PHASE      LASTTESTED   UPLOADSPEED(MBPS)   ENCRYPTION   VERSIONING   SNAPSHOTS    AGE
    dpt-sample   Complete   17m          546                 AES256       Enabled      2/2 passed   17m
    Copy to Clipboard Toggle word wrap

如果您在 Azure 对象存储上使用 OADP,则需要将 Azure STORAGE_ACCOUNT_ID 指定为 secret 对象的一部分。使用以下步骤在 Azure 集群上运行 DataProtectionTest (DPT) 自定义资源 (CR)。

先决条件

  • 您已以具有 cluster-admin 角色的用户身份登录到 Azure 集群。
  • 已安装 OpenShift CLI(oc)。
  • 已安装 OADP Operator。
  • 您已配置存储桶来存储备份。
  • 您有一个应用程序,并在单独的命名空间中运行持久性卷声明 (PVC)。

流程

  1. Storage Blob Data Contributor 角色添加到 Azure storageAccount 对象,以避免 DPT 运行失败。运行以下命令:

    $ az role assignment create \
    --assignee "$AZURE_CLIENT_ID" \
    --role "Storage Blob Data Contributor" \
    --scope "/subscriptions/$AZURE_SUBSCRIPTION_ID/resourceGroups/$AZURE_RESOURCE_GROUP/providers/Microsoft.Storage/storageAccounts/$AZURE_STORAGE_ACCOUNT_ID"
    Copy to Clipboard Toggle word wrap
  2. 在终端中,导出 Azure 参数,并使用参数创建一个 secret 凭证文件,如下例所示。

    要在 Azure 上运行 DPT CR,您需要在 secret 凭证文件中指定 STORAGE_ACCOUNT_ID 参数。

    AZURE_SUBSCRIPTION_ID=<subscription-id>
    AZURE_TENANT_ID=<tenant-id>
    AZURE_CLIENT_ID=<client-id>
    AZURE_CLIENT_SECRET=<client-secret>
    AZURE_RESOURCE_GROUP=<resource-group>
    AZURE_STORAGE_ACCOUNT_ID=<storage-account>
    Copy to Clipboard Toggle word wrap
  3. 创建 Secret CR,如下例所示:

    $ oc create secret generic cloud-credentials-azure -n openshift-adp --from-file cloud=<credentials_file_path>
    Copy to Clipboard Toggle word wrap
  4. 使用以下示例中显示的配置创建 DataProtectionApplication (DPA) CR:

    apiVersion: oadp.openshift.io/v1alpha1
    kind: DataProtectionApplication
    metadata:
      name: ts-dpa
      namespace: openshift-adp
    spec:
      configuration:
        velero:
          defaultPlugins:
            - azure
            - openshift
      backupLocations:
        - velero:
            config:
              resourceGroup: oadp-....-b7q4-rg
              storageAccount: oadp...kb7q4
              subscriptionId: 53b8f5...fd54c8a
            credential:
              key: cloud
              name: cloud-credentials-azure 
    1
    
            provider: azure
            default: true
            objectStorage:
              bucket: <bucket_name>
              prefix: velero
    Copy to Clipboard Toggle word wrap
    1
    指定 Secret 对象的名称。在本例中,名称是 cloud-credentials-azure
  5. 通过指定备份存储位置的名称 (BSL)、VolumeSnapshotClass 对象和持久性卷声明详情来创建 DPT CR,如下例所示:

    apiVersion: oadp.openshift.io/v1alpha1
    kind: DataProtectionTest
    metadata:
      name: dpt-sample
      namespace: openshift-adp
    spec:
      backupLocationName: <bsl_name> 
    1
    
      uploadSpeedTestConfig:
        fileSize: 40MB
        timeout: 120s
      csiVolumeSnapshotTestConfigs:
        - snapshotClassName: csi-azuredisk-vsc 
    2
    
          timeout: 90s
          volumeSnapshotSource:
            persistentVolumeClaimName: mysql-data 
    3
    
            persistentVolumeClaimNamespace: ocp-mysql 
    4
    
        - snapshotClassName: csi-azuredisk-vsc
          timeout: 120s
          volumeSnapshotSource:
            persistentVolumeClaimName: mysql-data1
            persistentVolumeClaimNamespace: ocp-mysql
    Copy to Clipboard Toggle word wrap
    1
    指定 BSL 的名称。
    2
    Azure 快照类名称。
    3
    持久性卷声明的名称。
    4
    持久性卷声明命名空间的名称。
  6. 运行 DPT CR 以验证快照是否就绪。

在运行 DataProtectionTest (DPT) 自定义资源 (CR) 时,请使用下表来排除常见问题。

Expand
表 5.23. DPT CR 故障排除
错误原因解决方案

DPT 处于 InProgress 状态

存储桶凭证或存储桶访问失败

检查 Secret 对象、存储桶权限和日志。

上传测试失败

不正确的 Secret 对象或 S3 端点

检查 BackupStorageLocation 对象配置和访问密钥。

快照测试失败

CSI 快照控制器配置不正确

检查 VolumeSnapshotClass 对象可用性和 CSI 驱动程序日志。

未填充存储桶加密或版本

云供应商限制

并非所有对象存储供应商都会一致公开这些字段。

5.26.11. 使用 must-gather 工具

您可以使用 must-gather 工具收集有关 OADP 自定义资源的日志和信息。must-gather 数据必须附加到所有客户案例。

must-gather 工具是一个容器,它不会一直运行。must-gather 命令会调用该工具并会运行几分钟。

5.26.11.1. 使用 must-gather 工具

您可以使用以下选项运行 must-gather 工具。要使用一个选项,请在 must-gather 命令中添加与该选项对应的标记。

默认配置
此配置会为安装 OADP Operator 的所有命名空间收集 pod 日志、OADP 和 Velero 自定义资源 (CR) 信息。
Timeout(超时)
如果有许多 Backup CR 失败,则数据收集需要很长时间。您可以通过设置超时值来提高性能。
不安全的 TLS 连接
如果使用自定义 CA 证书,请使用带有不安全 TLS 连接的 must-gather 工具。

must-gather 工具使用收集的信息生成 Markdown 输出文件。Markdown 文件位于集群目录中。

如需有关支持的标记的更多信息,请在 must-gather 工具中使用 help 标记,如下例所示:

$ oc adm must-gather --image=registry.redhat.io/oadp/oadp-mustgather-rhel9:v1.5 -- /usr/bin/gather -h
Copy to Clipboard Toggle word wrap

先决条件

  • 已以具有 cluster-admin 角色的用户身份登录到 OpenShift Container Platform 集群。
  • 已安装 OpenShift CLI(oc)。

流程

  1. 进入存储 must-gather 数据的目录。
  2. 为以下数据收集选项之一运行 oc adm must-gather 命令:

    • 要使用 must-gather 工具的默认配置,请运行以下命令:

      $ oc adm must-gather --image=registry.redhat.io/oadp/oadp-mustgather-rhel9:v1.5
      Copy to Clipboard Toggle word wrap
    • 要将 timeout 标志与 must-gather 工具一起使用,请运行以下命令:

      $ oc adm must-gather --image=registry.redhat.io/oadp/oadp-mustgather-rhel9:v1.5 -- /usr/bin/gather --request-timeout 1m 
      1
      Copy to Clipboard Toggle word wrap
      1
      在本例中,超时为 1 分钟。
    • 要将不安全的 TLS 连接标记与 must-gather 工具一起使用,请运行以下命令:

      $ oc adm must-gather --image=registry.redhat.io/oadp/oadp-mustgather-rhel9:v1.5 -- /usr/bin/gather --skip-tls
      Copy to Clipboard Toggle word wrap
    • 要将不安全的 TLS 连接和 must-gather 工具的超时标记结合使用,请运行以下命令:

      $ oc adm must-gather --image=registry.redhat.io/oadp/oadp-mustgather-rhel9:v1.5 -- /usr/bin/gather --request-timeout 15s --skip-tls 
      1
      Copy to Clipboard Toggle word wrap
      1
      在本例中,超时为 15 秒。默认情况下,--skip-tls 标志值为 false。将值设为 true 以允许不安全的 TLS 连接。

验证

  1. 验证 Markdown 输出文件是否在以下位置生成: must-gather.local.89…​054550/registry.redhat.io/oadp-mustgather-rhel9:v1.5-sha256-0…​84/clusters/a4…​86/oadp-must-gather-summary.md
  2. 通过在 Markdown 预览中打开文件来查看 Markdown 文件中的 must-gather 数据。如需示例输出,请参考以下镜像:您可以将此输出文件上传到红帽客户门户网站中的支持问题单中。

    图 5.2. must-gather 工具的 markdown 输出示例

5.26.12. OADP 监控

通过使用 OpenShift Container Platform 监控堆栈,用户和管理员可以有效地执行以下任务:

  • 监控和管理集群
  • 分析用户应用程序的工作负载性能
  • 监控集群中运行的服务
  • 当事件发生时接收警报

5.26.12.1. OADP 监控设置

OADP Operator 利用 OpenShift Monitoring Stack 提供的 OpenShift User Workload Monitoring 从 Velero 服务端点检索指标。监控堆栈允许使用 OpenShift Metrics 查询前端创建用户定义的 Alerting Rules 或查询指标。

启用 User Workload Monitoring 后,可以配置和使用任何与 Prometheus 兼容的第三方 UI (如 Grafana)来视觉化 Velero 指标。

监控指标需要为用户定义的项目启用监控,并创建一个 ServiceMonitor 资源,以便从位于 openshift-adp 命名空间中的已启用的 OADP 服务端点中提取这些指标。

注意

OADP 对 Prometheus 指标的支持以尽力提供,且不被支持。

有关设置监控堆栈的更多信息,请参阅配置用户工作负载监控

先决条件

  • 可以使用具有 cluster-admin 权限的账户访问 OpenShift Container Platform 集群。
  • 您已创建了集群监控配置映射。

流程

  1. 使用以下命令编辑 openshift-monitoring 命名空间中的 cluster-monitoring-config ConfigMap 对象:

    $ oc edit configmap cluster-monitoring-config -n openshift-monitoring
    Copy to Clipboard Toggle word wrap
  2. 使用以下命令在 data 部分的 config.yaml 字段中添加或启用 enableUserWorkload 选项:

    apiVersion: v1
    kind: ConfigMap
    data:
      config.yaml: |
        enableUserWorkload: true 
    1
    
    metadata:
    # ...
    Copy to Clipboard Toggle word wrap
    1
    添加这个选项或设置为 true
  3. 等待一段较短时间,检查以下组件是否在 openshift-user-workload-monitoring 命名空间中运行来验证用户工作负载监控设置:

    $ oc get pods -n openshift-user-workload-monitoring
    Copy to Clipboard Toggle word wrap

    输出示例

    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
    Copy to Clipboard Toggle word wrap

  4. 验证 openshift-user-workload-monitoring 中是否存在 user-workload-monitoring-config ConfigMap。如果存在,请跳过这个过程中的剩余步骤。

    $ oc get configmap user-workload-monitoring-config -n openshift-user-workload-monitoring
    Copy to Clipboard Toggle word wrap

    输出示例

    Error from server (NotFound): configmaps "user-workload-monitoring-config" not found
    Copy to Clipboard Toggle word wrap

  5. 为 User Workload Monitoring 创建一个 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: |
    Copy to Clipboard Toggle word wrap

  6. 使用以下命令应用 2_configure_user_workload_monitoring.yaml 文件:

    $ oc apply -f 2_configure_user_workload_monitoring.yaml
    configmap/user-workload-monitoring-config created
    Copy to Clipboard Toggle word wrap

5.26.12.2. 创建 OADP 服务监控器

OADP 提供了一个 openshift-adp-velero-metrics-svc 服务,它会在配置 Data Protection Application (DPA) 时创建。用户工作负载监控服务监控器需要指向定义的服务。要获取有关该服务的详细信息,请完成以下步骤。

流程

  1. 确保 openshift-adp-velero-metrics-svc 服务存在。它应包含 app.kubernetes.io/name=velero 标签,该标签用作 ServiceMonitor 对象的选择器。

    $ oc get svc -n openshift-adp -l app.kubernetes.io/name=velero
    Copy to Clipboard Toggle word wrap

    输出示例

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

  2. 创建一个与现有 service 标签匹配的 ServiceMonitor YAML 文件,并将文件保存为 3_create_oadp_service_monitor.yaml。服务监控器在 openshift-adp 命名空间中创建,其中 openshift-adp-velero-metrics-svc 服务所在的位置。

    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"
    Copy to Clipboard Toggle word wrap

  3. 应用 3_create_oadp_service_monitor.yaml 文件:

    $ oc apply -f 3_create_oadp_service_monitor.yaml
    Copy to Clipboard Toggle word wrap

    输出示例

    servicemonitor.monitoring.coreos.com/oadp-service-monitor created
    Copy to Clipboard Toggle word wrap

验证

  • 使用 OpenShift Container Platform Web 控制台的 Administrator 视角确认新服务监控器处于 Up 状态:等待几分钟,使服务监控器到达 Up 状态。

    1. 进入到 Observe Targets 页面。
    2. 确保没有选择 Filter,或选择了 User source,并在 Text 搜索字段中输入 openshift-adp
    3. 验证服务监控器的 Status 的状态是否为 Up

      图 5.3. OADP 指标目标

5.26.12.3. 创建警报规则

OpenShift Container Platform 监控堆栈使用 Alerting Rules 接收配置的警报。要为 OADP 项目创建 Alerting 规则,请使用用户工作负载监控提取的其中一个指标。

流程

  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
    Copy to Clipboard Toggle word wrap

    在本例中,Alert 在以下情况下显示:

    • 在过去 2 小时中,新的失败的备份数量大于 0,相同的状态至少持续了 5 分钟。
    • 如果第一次增加的时间小于 5 分钟,则 Alert 将处于 Pending 状态,之后它将进入 Firing 状态。
  2. 应用 4_create_oadp_alert_rule.yaml 文件,该文件在 openshift-adp 命名空间中创建 PrometheusRule 对象:

    $ oc apply -f 4_create_oadp_alert_rule.yaml
    Copy to Clipboard Toggle word wrap

    输出示例

    prometheusrule.monitoring.coreos.com/sample-oadp-alert created
    Copy to Clipboard Toggle word wrap

验证

  • 在触发 Alert 后,您可以使用以下方法查看它:

    • Developer 视角中,选择 Observe 菜单。
    • Observe Alerting 菜单下的 Administrator 视角中,在 Filter 框中选择 User。否则,默认只会显示 Platform Alerts。

      图 5.4. OADP 备份失败警报

5.26.12.4. 可用指标列表

请参阅下表,了解由 OADP 提供的 Velero 指标参数以及它们的类型:

Expand
表 5.24. Velero 指标
指标名称描述类型

velero_backup_tarball_size_bytes

备份的大小,以字节为单位

量表

velero_backup_total

当前存在的备份数量

量表

velero_backup_attempt_total

试图备份的总数

计数

velero_backup_success_total

成功备份的总数

计数

velero_backup_partial_failure_total

部分失败的备份总数

计数

velero_backup_failure_total

失败备份的总数

计数

velero_backup_validation_failure_total

验证失败的备份总数

计数

velero_backup_duration_seconds

完成备份所需的时间,以秒为单位

Histogram

velero_backup_duration_seconds_bucket

指标 velero_backup_duration_seconds 的直方存储桶的观察总数

计数

velero_backup_duration_seconds_count

指标 velero_backup_duration_seconds的观察总数

计数

velero_backup_duration_seconds_sum

指标 velero_backup_duration_seconds 的观察总数

计数

velero_backup_deletion_attempt_total

试图备份删除的总数

计数

velero_backup_deletion_success_total

成功删除备份的总数

计数

velero_backup_deletion_failure_total

删除失败的备份总数

计数

velero_backup_last_successful_timestamp

备份最后一次运行成功的时间,Unix 时间戳(以秒为单位)

量表

velero_backup_items_total

备份的项目总数

量表

velero_backup_items_errors

备份过程中遇到的错误总数

量表

velero_backup_warning_total

警告备份的总数

计数

velero_backup_last_status

备份的最后状态。1 代表成功,0 代表失败

量表

velero_restore_total

当前存在的恢复数量

量表

velero_restore_attempt_total

尝试恢复的总数

计数

velero_restore_validation_failed_total

恢复失败验证的总数

计数

velero_restore_success_total

成功恢复的总数

计数

velero_restore_partial_failure_total

恢复部分失败的总数

计数

velero_restore_failed_total

恢复的失败总数

计数

velero_volume_snapshot_attempt_total

尝试的卷快照总数

计数

velero_volume_snapshot_success_total

成功卷快照的总数

计数

velero_volume_snapshot_failure_total

失败的卷快照总数

计数

velero_csi_snapshot_attempt_total

CSI 试图卷快照的总数

计数

velero_csi_snapshot_success_total

CSI 成功卷快照总数

计数

velero_csi_snapshot_failure_total

CSI 失败卷快照的总数

计数

5.26.12.5. 使用 Observe UI 查看指标

您可以从 AdministratorDeveloper 视角查看 OpenShift Container Platform Web 控制台中的指标,该视角必须有权访问 openshift-adp 项目。

流程

  • 进入到 Observe Metrics 页面:

    • 如果使用 Developer 视角,请按照以下步骤执行:

      1. 选择 Custom query,或者点 Show PromQL 链接。
      2. 输入查询并点 Enter
    • 如果使用 Administrator 视角,请在文本字段中输入表达式,然后选择 Run Queries

      图 5.5. OADP 指标查询

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat