4.5. 故障排除
您可以使用 OpenShift CLI 工具或 Velero CLI 工具调试 Velero 自定义资源(CR)。Velero CLI 工具提供更详细的日志和信息。
您可以检查 安装问题、备份和恢复 CR 问题,以及 Restic 问题。
您可以使用 must-gather
工具来收集日志、CR 信息和 Prometheus 指标数据。
您可以通过以下方法获取 Velero CLI 工具:
- 下载 Velero CLI 工具
- 访问集群中的 Velero 部署中的 Velero 二进制文件
4.5.1. 下载 Velero CLI 工具
您可以按照 Velero 文档页面中的说明下载并安装 Velero CLI 工具。
该页面包括:
- 使用 Homebrew 的 macOS
- GitHub
- 使用 Chocolatey 的 Windows
先决条件
- 您可以访问启用了 DNS 和容器网络的 Kubernetes 集群 v1.16 或更高版本。
-
您已在本地安装了
kubectl
。
流程
- 打开浏览器,进入到 Verleo 网站上的"安装 CLI"。
- 按照 macOS、GitHub 或 Windows 的适当流程。
根据以下表,下载适用于 OADP 和 OpenShift Container Platform 版本的 Velero 版本:
表 4.2. OADP-Velero-OpenShift Container Platform 版本关系 OADP 版本 Velero 版本 OpenShift Container Platform 版本 1.0.0
4.6 及更新的版本
1.0.1
4.6 及更新的版本
1.0.2
4.6 及更新的版本
1.0.3
4.6 及更新的版本
1.1.0
4.9 及更新的版本
1.1.1
4.9 及更新的版本
1.1.2
4.9 及更新的版本
4.5.2. 访问集群中的 Velero 部署中的 Velero 二进制文件
您可以使用 shell 命令访问集群中的 Velero 部署中的 Velero 二进制文件。
先决条件
-
您的
DataProtectionApplication
自定义资源的状态为Reconcile complete
。
流程
输入以下命令设定所需的别名:
$ alias velero='oc -n openshift-adp exec deployment/velero -c velero -it -- ./velero'
4.5.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
-
错误
-
fatal
-
panic
对于多数日志,建议使用 debug
。
4.5.4. 使用 Velero CLI 工具调试 Velero 资源
您可以调试 Backup
和 Restore
自定义资源(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
命令检索与 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
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.5.5. 因内存不足或 CPU 造成 pod 崩溃或重启
如果 Velero 或 Restic pod 因为缺少内存或 CPU 而导致崩溃,您可以为其中任何一个资源设置特定的资源请求。
4.5.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: requests: cpu: 500m memory: 256Mi
4.5.5.2. 为 Restic pod 设置资源请求
您可以使用 configuration.restic.podConfig.resourceAllocations
specification 字段为 Restic
pod 设置特定的资源请求。
流程
在 YAML 文件中设置
cpu
和memory
资源请求:Restic 文件示例
apiVersion: oadp.openshift.io/v1alpha1 kind: DataProtectionApplication ... configuration: restic: podConfig: resourceAllocations: requests: cpu: 500m memory: 256Mi
资源请求字段的值必须遵循与 Kubernetes 资源要求相同的格式。另外,如果您没有指定 configuration.velero.podConfig.resourceAllocations
或 configuration.restic.podConfig.resourceAllocations
,则 Velero pod 或 Restic pod 的默认 resources
规格如下:
requests: cpu: 500m memory: 128Mi
4.5.6. Velero 和准入 Webhook 的问题
Velero 在恢复过程中解决准入 Webhook 问题的能力有限。如果您的工作负载带有准入 webhook,您可能需要使用额外的 Velero 插件或更改如何恢复工作负载。
通常,带有准入 Webhook 的工作负载需要您首先创建特定类型的资源。如果您的工作负载具有子资源,因为准入 webhook 通常阻止子资源,则会出现这种情况。
例如,创建或恢复顶层对象,如 service.serving.knative.dev
通常会自动创建子资源。如果您首先这样做,则不需要使用 Velero 创建和恢复这些资源。这可避免由 Velero 可使用的准入 Webhook 阻断子资源的问题。
4.5.6.1. 为使用准入 webhook 的 Velero 备份恢复临时解决方案
本节介绍了使用准入 webhook 的一些类型的 Velero 备份恢复资源所需的额外步骤。
4.5.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.5.6.1.2. 恢复 IBM AppConnect 资源
如果您使用 Velero 恢复具有准入 webhook 的 IBM AppConnect 资源时遇到问题,您可以在此过程中运行检查。
流程
检查集群中是否有
kind: MutatingWebhookConfiguration
的变异准入插件:$ oc get mutatingwebhookconfigurations
-
检查每个
kind: MutatingWebhookConfiguration
的 YAML 文件,以确保其没有规则块创建存在问题的对象。如需更多信息,请参阅官方 Kuberbetes 文档。 -
检查在备份时使用的
type: Configuration.appconnect.ibm.com/v1beta1
中的spec.version
被已安装的 Operator 支持。
4.5.7. 安装问题
在安装数据保护应用程序时,您可能会遇到使用无效目录或不正确的凭证导致的问题。
4.5.7.1. 备份存储包含无效目录
Velero
pod 日志显示错误消息,备份存储包含无效的顶级目录
。
原因
对象存储包含不是 Velero 目录的顶级目录。
解决方案
如果对象存储不适用于 Velero,则必须通过设置 DataProtectionApplication
清单中的 spec.backupLocations.velero.objectStorage.prefix
参数为存储桶指定一个前缀。
4.5.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 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
4.5.8. 备份和恢复 CR 问题
您可能会遇到 Backup
和 Restore
自定义资源(CR)的常见问题。
4.5.8.1. 备份 CR 无法检索卷
Backup
CR 显示错误消息 InvalidVolume.NotFound: The volume ‘vol-xxxx’ does not exist
。
原因
持久性卷(PV)和快照位置位于不同的区域。
解决方案
-
编辑
DataProtectionApplication
清单中的spec.snapshotLocations.velero.config.region
键的值,使快照位置位于与 PV 相同的区域。 -
创建新的
Backup
CR。
4.5.8.2. 备份 CR 状态在进行中
Backup
CR 的状态保留在 InProgress
阶段,且未完成。
原因
如果备份中断,则无法恢复。
解决方案
检索
Backup
CR 的详细信息:$ oc -n {namespace} exec deployment/velero -c velero -- ./velero \ backup describe <backup>
删除
Backup
CR:$ oc delete backup <backup> -n openshift-adp
您不需要清理备份位置,因为正在进行中的
Backup
CR 没有上传文件到对象存储。-
创建新的
Backup
CR。
4.5.8.3. 备份 CR 状态处于 PartiallyFailed
在没有 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
解决方案
删除
Backup
CR:$ oc delete backup <backup> -n openshift-adp
-
如果需要,清理
BackupStorageLocation
上存储的数据以释放空间。 将标签
velero.io/csi-volumesnapshot-class=true
应用到VolumeSnapshotClass
对象:$ oc label volumesnapshotclass/<snapclass_name> velero.io/csi-volumesnapshot-class=true
-
创建新的
Backup
CR。
4.5.9. Restic 问题
在使用 Restic 备份应用程序时,您可能会遇到这些问题。
4.5.9.1. 启用了 root_squash 的 NFS 数据卷的 Restic 权限错误
Restic
pod 日志显示错误消息, controller=pod-volume-backup error="fork/exec/usr/bin/restic: permission denied"
。
原因
如果您的 NFS 数据卷启用了 root_squash
,Restic
映射到 nfsnobody
,且没有创建备份的权限。
解决方案
您可以通过为 Restic
创建补充组并将组 ID 添加到 DataProtectionApplication
清单中来解决这个问题:
-
在 NFS 数据卷中为
Restic
创建补充组。 -
在 NFS 目录上设置
setgid
位,以便继承组所有权。 将
spec.configuration.restic.supplementalGroups
参数和组 ID 添加到DataProtectionApplication
清单中,如下例所示:spec: configuration: restic: enable: true supplementalGroups: - <group_id> 1
- 1
- 指定补充组 ID。
-
等待
Restic
pod 重启,以便应用更改。
4.5.9.2. 在存储桶被强制后重新创建 Restic Backup CR
如果您为命名空间创建 Restic Backup
CR,请清空对象存储的存储桶,然后为同一命名空间重新创建 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 问题 4421。
解决方案
运行以下命令,从命名空间中删除相关的 Restic 存储库:
$ 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.5.10. 使用 must-gather 工具
您可以使用 must-gather
工具收集有关 OADP 自定义资源的日志、指标和信息。
must-gather
数据必须附加到所有客户案例。
先决条件
-
您必须使用具有
cluster-admin
角色的用户登录到 OpenShift Container Platform 集群。 -
已安装 OpenShift CLI (
oc
)。
流程
-
进入要存储
must-gather
数据的目录。 为以下数据收集选项之一运行
oc adm must-gather
命令:$ oc adm must-gather --image=registry.redhat.io/oadp/oadp-mustgather-rhel8:v1.1
数据保存为
must-gather/must-gather.tar.gz
。您可以将此文件上传到红帽客户门户网站中的支持问题单中。$ 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
。
使用 Prometheus 控制台查看指标数据
您可以使用 Prometheus 控制台查看指标数据。
流程
解压缩
prom_data.tar.gz
文件:$ tar -xvzf must-gather/metrics/prom_data.tar.gz
创建本地 Prometheus 实例:
$ make prometheus-run
命令输出 Prometheus URL。
输出
Started Prometheus on http://localhost:9090
- 启动 Web 浏览器,再导航到 URL 以使用 Prometheus Web 控制台查看数据。
查看数据后,删除 Prometheus 实例和数据:
$ make prometheus-cleanup