4.19. Velero 和准入 Webhook 的问题
Velero 在恢复过程中解决准入 Webhook 问题的能力有限。如果您的工作负载带有准入 webhook,您可能需要使用额外的 Velero 插件或更改如何恢复工作负载。
通常,带有准入 Webhook 的工作负载需要您首先创建特定类型的资源。如果您的工作负载具有子资源,因为准入 webhook 通常阻止子资源,则会出现这种情况。
例如,创建或恢复顶层对象,如 service.serving.knative.dev
通常会自动创建子资源。如果您首先这样做,则不需要使用 Velero 创建和恢复这些资源。这可避免由 Velero 可使用的准入 Webhook 阻断子资源的问题。
4.19.1. 为使用准入 webhook 的 Velero 备份恢复临时解决方案
对于使用准入 webhook 的几种类型的 Velero 备份,您需要额外的步骤来恢复资源。
4.19.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.19.1.2. 恢复 IBM AppConnect 资源
如果您使用 Velero 恢复具有准入 webhook 的 IBM® AppConnect 资源时遇到问题,您可以在此过程中运行检查。
流程
检查集群中是否有
kind: MutatingWebhookConfiguration
的变异准入插件:$ oc get mutatingwebhookconfigurations
-
检查每个
kind: MutatingWebhookConfiguration
的 YAML 文件,以确保其没有规则块创建存在问题的对象。如需更多信息,请参阅官方 Kubernetes 文档。 -
检查在备份时使用的
type: Configuration.appconnect.ibm.com/v1beta1
中的spec.version
被已安装的 Operator 支持。
4.19.2. OADP 插件的已知问题
以下章节介绍了 OpenShift API for Data Protection (OADP) 插件中的已知问题:
4.19.2.1. 因为缺少 secret,Velero 插件在镜像流备份过程中会出现错误
当在数据保护应用程序(DPA)范围外管理备份和备份存储位置(BSL)时,OADP 控制器,这意味着 DPA 协调不会创建相关的 oadp-<bsl_name>-<bl_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.19.2.1.1. 临时解决方案以避免出现错误
要避免 Velero 插件 panic 错误,请执行以下步骤:
使用相关标签标记自定义 BSL:
$ oc label backupstoragelocations.velero.io <bsl_name> app.kubernetes.io/component=bsl
在标记 BSL 后,等待 DPA 协调。
注意您可以通过对 DPA 本身进行任何更改来强制进行协调。
当 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.19.2.2. OpenShift ADP Controller 分段错误
如果您在同时启用了 cloudstorage
和 restic
的情况下配置 DPA,openshift-adp-controller-manager
pod 会无限期重复崩溃和重启过程,直到 pod 出现一个崩溃循环分段错误为止。
您只能定义 velero
或 cloudstorage
,它们是互斥的字段。
-
如果您同时定义了
velero
和cloudstorage
,openshift-adp-controller-manager
会失败。 -
如果
velero
和cloudstorage
都没有定义,openshift-adp-controller-manager
也将失败。
有关此问题的更多信息,请参阅 OADP-1054。
4.19.2.2.1. OpenShift ADP Controller 分段错误临时解决方案
在配置一个 DPA 时,您必须定义 velero
或 cloudstorage
。如果您在 DPA 中同时定义了这两个 API,openshift-adp-controller-manager
pod 会失败,并显示崩溃循环分段错误。
4.19.3. Velero 插件返回 "received EOF, stop recv loop" 信息
Velero 插件作为单独的进程启动。当 Velero 操作完成后,无论是否成功,它们都会退出。接收到 received EOF, stopping recv loop
消息表示插件操作已完成。这并不意味着发生了错误。