4.4. 故障排除


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

您可以检查 安装问题备份和恢复 CR 问题,以及 Restic 问题

您可以使用 must-gather 工具来收集日志、CR 信息和 Prometheus 指标数据。

您可以通过以下方法获取 Velero CLI 工具:

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

4.4.1. 下载 Velero CLI 工具

您可以按照 Velero 文档页面中的说明下载并安装 Velero CLI 工具。

该页面包括:

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

先决条件

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

流程

  1. 打开浏览器,进入到 Verleo 网站上的"安装 CLI"
  2. 按照 macOS、GitHub 或 Windows 的适当流程。
  3. 根据以下表,下载适用于 OADP 版本的 Velero 版本:

    表 4.2. OADP-Velero 版本关系
    OADP 版本Velero 版本

    0.2.6

    1.6.0

    0.5.5

    1.7.1

    1.0.0

    1.7.1

    1.0.1

    1.7.1

    1.0.2

    1.7.1

    1.0.3

    1.7.1

4.4.2. 访问集群中的 Velero 部署中的 Velero 二进制文件

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

先决条件

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

流程

  • 输入以下命令设定所需的别名:

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

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

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

Velero CR

使用 oc describe 命令检索与 BackupRestore 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
  • 错误
  • fatal
  • panic

对于多数日志,建议使用 debug

4.4.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>

示例

$ 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 命令检索与 BackupRestore 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

logs 命令

使用 velero logs 命令检索 BackupRestore 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.4.5. 安装问题

在安装数据保护应用程序时,您可能会遇到使用无效目录或不正确的凭证导致的问题。

4.4.5.1. 备份存储包含无效目录

Velero pod 日志显示错误消息,备份存储包含无效的顶级目录

原因

对象存储包含不是 Velero 目录的顶级目录。

解决方案

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

4.4.5.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 provider 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.4.6. 备份和恢复 CR 问题

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

4.4.6.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.4.6.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.4.7. Restic 问题

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

4.4.7.1. 启用了 root_squash 的 NFS 数据卷的 Restic 权限错误

Restic pod 日志显示错误消息, controller=pod-volume-backup error="fork/exec/usr/bin/restic: permission denied"

原因

如果您的 NFS 数据卷启用了 root_squashRestic 映射到 nfsnobody,且没有创建备份的权限。

解决方案

您可以通过为 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.4.7.2. 恢复 Restic 备份的 CR 是 "PartiallyFailed", "Failed",或保留 "InProgress"

Restic 备份的 Restore CR 使用 PartiallyFailedFailed 状态完成,或者保持 InProgress,且不完成。

如果状态是 PartiallyFailedFailedVelero pod 日志会显示错误消息,level=error msg="unable to successfully restic restore of pod 的 volumes"

如果状态是 InProgressRestore CR 日志不可用,且 Restic pod 日志中不会出现任何错误。

原因

DeploymentConfig 对象重新部署 Restore pod,从而导致 Restore CR 失败。

解决方案

  1. 创建一个 Restore CR,它排除 ReplicationControllerDeploymentConfigTemplateInstances 资源:

    $ velero restore create --from-backup=<backup> -n openshift-adp \ 1
      --include-namespaces <namespace> \ 2
      --exclude-resources replicationcontroller,deploymentconfig,templateinstances.template.openshift.io \
      --restore-volumes=true
    1
    指定 Backup CR 的名称。
    2
    Backup CR 中指定 include-namespaces
  2. 验证 Restore CR 的状态是否为 Completed

    $ oc get restore -n openshift-adp <restore> -o jsonpath='{.status.phase}'
  3. 创建一个 Restore CR,以包括 ReplicationControllerDeploymentConfig 资源:

    $ velero restore create --from-backup=<backup> -n openshift-adp \
      --include-namespaces <namespace> \
      --include-resources replicationcontroller,deploymentconfig \
      --restore-volumes=true
  4. 验证 Restore CR 的状态是否为 Completed

    $ oc get restore -n openshift-adp <restore> -o jsonpath='{.status.phase}'
  5. 验证备份资源是否已恢复:

    $ oc get all -n <namespace>

4.4.7.3. 在存储桶被强制后重新创建 Restic Backup CR

如果您为命名空间创建 Restic Backup CR,请清空 S3 存储桶,然后为同一命名空间重新创建 Backup CR,重新创建的 Backup CR 会失败。

velero pod 日志显示错误消息 msg="Error check repository for stale locks"

原因

如果在对象存储上删除了 Restic 目录,Velero 不会在 ResticRepository 清单中创建 Restic 存储库。详情请参阅(Velero issue 4421)。

4.4.8. 使用 must-gather 工具

您可以使用 must-gather 工具收集有关 OADP 自定义资源的日志、指标和信息。

must-gather 数据必须附加到所有客户案例。

您可以使用以下数据收集选项运行 must-gather 工具:

  • 完全 must-gather 数据收集为安装 OADP Operator 的所有命名空间收集 Prometheus metrics、pod 日志和 Velero CR 信息。
  • 基本的 must-gather 数据收集在特定持续时间内收集 pod 日志和 Velero CR 信息,例如一小时或 24 小时。Prometheus 指标和重复日志不包含在内。
  • 使用超时的 must-gather 数据收集。如果有许多 Backup CR 失败,则数据收集需要很长时间。您可以通过设置超时值来提高性能。
  • Prometheus 指标数据转储下载包含 Prometheus 收集的数据的存档文件。

先决条件

  • 您必须使用具有 cluster-admin 角色的用户登录到 OpenShift Container Platform 集群。
  • 已安装 OpenShift CLI (oc)。

流程

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

    • 完整的 must-gather 数据收集,包括 Prometheus 指标:

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

      数据保存为 must-gather/must-gather.tar.gz。您可以将此文件上传到红帽客户门户网站中的支持问题单中。

    • 特定持续时间内,基本 must-gather 数据收集功能不进行 Prometheus 指标:

      $ oc adm must-gather --image=registry.redhat.io/oadp/oadp-mustgather-rhel8:v1.0 \
        -- /usr/bin/gather_<time>_essential 1
      1
      以小时为单位指定时间。允许的值是 1h6h24h72hall,例如 gather_1h_essentialgather_all_essential
    • 使用超时的 must-gather 数据收集:

      $ oc adm must-gather --image=registry.redhat.io/oadp/oadp-mustgather-rhel8:v1.0 \
        -- /usr/bin/gather_with_timeout <timeout> 1
      1
      以秒为单位指定超时值。
    • Prometheus 指标数据转储:

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

      此操作可能需要很长时间。数据保存为 must-gather/metrics/prom_data.tar.gz

使用 Prometheus 控制台查看指标数据

您可以使用 Prometheus 控制台查看指标数据。

流程

  1. 解压缩 prom_data.tar.gz 文件:

    $ tar -xvzf must-gather/metrics/prom_data.tar.gz
  2. 创建本地 Prometheus 实例:

    $ make prometheus-run

    命令输出 Prometheus URL。

    输出

    Started Prometheus on http://localhost:9090

  3. 启动 Web 浏览器,再导航到 URL 以使用 Prometheus Web 控制台查看数据。
  4. 查看数据后,删除 Prometheus 实例和数据:

    $ make prometheus-cleanup
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.