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
。
流程
- 打开浏览器,进入到 Verleo 网站上的"安装 CLI"。
- 按照 macOS、GitHub 或 Windows 的适当流程。
根据以下表,下载适用于 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
命令检索与 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.4.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.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
4.4.6. 备份和恢复 CR 问题
您可能会遇到 Backup
和 Restore
自定义资源(CR)的常见问题。
4.4.6.1. 备份 CR 无法检索卷
Backup
CR 显示错误消息 InvalidVolume.NotFound: The volume ‘vol-xxxx’ does not exist
。
原因
持久性卷(PV)和快照位置位于不同的区域。
解决方案
-
编辑
DataProtectionApplication
清单中的spec.snapshotLocations.velero.config.region
键的值,使快照位置位于与 PV 相同的区域。 -
创建新的
Backup
CR。
4.4.6.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.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_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.4.7.2. 恢复 Restic 备份的 CR 是 "PartiallyFailed", "Failed",或保留 "InProgress"
Restic 备份的 Restore
CR 使用 PartiallyFailed
或 Failed
状态完成,或者保持 InProgress
,且不完成。
如果状态是 PartiallyFailed
或 Failed
,Velero
pod 日志会显示错误消息,level=error msg="unable to successfully restic restore of pod 的 volumes"
。
如果状态是 InProgress
,Restore
CR 日志不可用,且 Restic
pod 日志中不会出现任何错误。
原因
DeploymentConfig
对象重新部署 Restore
pod,从而导致 Restore
CR 失败。
解决方案
创建一个
Restore
CR,它排除ReplicationController
、DeploymentConfig
和TemplateInstances
资源:$ 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
验证
Restore
CR 的状态是否为Completed
:$ oc get restore -n openshift-adp <restore> -o jsonpath='{.status.phase}'
创建一个
Restore
CR,以包括ReplicationController
和DeploymentConfig
资源:$ velero restore create --from-backup=<backup> -n openshift-adp \ --include-namespaces <namespace> \ --include-resources replicationcontroller,deploymentconfig \ --restore-volumes=true
验证
Restore
CR 的状态是否为Completed
:$ oc get restore -n openshift-adp <restore> -o jsonpath='{.status.phase}'
验证备份资源是否已恢复:
$ 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
)。
流程
-
进入存储
must-gather
数据的目录。 为以下数据收集选项之一运行
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
- 以小时为单位指定时间。允许的值是
1h
、6h
、24h
、72h
或all
,例如gather_1h_essential
或gather_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 控制台查看指标数据。
流程
解压缩
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