本页面介绍了您在使用 Backup for GKE 时可能会遇到的系统相关错误、备份资源时需要考虑的事项,以及问题排查步骤。
错误 100020102:严格宽容模式 - 备份 CRD 失败 - 不支持 v1beta1 API 版本
当尝试备份最初以 apiextensions.k8s.io/v1beta1 版本应用的 CustomResourceDefinition 时,如果因缺少 apiextensions.k8s.io/v1 API 版本中所需的结构化架构而失败,则会发生错误 100020102。此错误会导致以下错误消息:Strict permissive mode - Failed to backup CRD - Unsupported v1beta1 API Version。
出现此错误的原因是 apiextensions.k8s.io/v1 API 版本已在 Google Kubernetes Engine 1.22 版中被移除。如需详细了解 GKE 1.22 版中移除的 API,请参阅 GKE v1.22 中移除的 API。
非宽容模式下的备份操作行为
在非宽容模式或严格备份方案中,如果备份操作遇到无法备份的资源(例如使用 v1beta1 API 创建的 CustomResourceDefinition),则备份操作会失败。出现此错误是因为资源缺少 v1 API 所需的结构化架构。如果存在此 CustomResourceDefinition,则会被视为严重错误,因为它可能无法正确恢复到较新的集群。
如需解决此错误,请按照以下说明操作:
运行
kubectl get crd命令,找出有问题的CustomResourceDefinition:kubectl get crd CRD_NAME将
CRD_NAME替换为错误消息中的CustomResourceDefinition的名称。在 YAML 输出中,通过查找以下条件来确认
CustomResourceDefinition是否已从vbeta1API 正确转换为v1API:spec.versions:通过查看spec.versions字段下列出的每个版本,找到spec.versions条件。如果任何spec.versions缺少schema.openAIV3Schema字段,则表示CustomResourceDefinition没有为相应版本定义结构化架构。status.conditions:通过查找type:NonStructuralSchema条件来找到status.conditions条件。如果status.conditions的status为true,则表明该架构不是结构化架构。
按照以下步骤将
CustomResourceDefinition升级到v1API 版本:通过添加结构化架构来修改现有
CustomResourceDefinition,使其与v1标准兼容,该架构定义了自定义资源的每个字段及其类型。如需详细了解如何添加结构化架构,请参阅指定结构化架构。将兼容的
v1清单应用到您的集群。
如果升级成功,请重新尝试备份操作。否则,请使用以下方法之一来解决此问题:
如果集群中未使用
CustomResourceDefinition,请运行kubectl delete crd命令删除CustomResourceDefinition。kubectl delete crd CRD_NAME将
CRD_NAME替换为您要删除的CustomResourceDefinition的名称。对备份方案启用宽容模式,这样一来,Backup for GKE 便可跳过资源(包括
v1beta1API 版本中的CustomResourceDefinitions),并继续执行其余的备份操作。如需详细了解如何启用宽容模式,请参阅对备份方案启用宽容模式。
重新尝试备份操作。如果操作仍失败,请与 Cloud Customer Care 联系以获取进一步帮助。
错误 100040102:未找到命名空间
尝试执行备份操作失败时,发生错误 100040102,该错误表明无法在集群内找到在备份范围中指定的命名空间。Backup for GKE 代理无法找到在 BackupPlan 配置的 selectedNamespaces 字段中明确列出的一个或多个命名空间。Backup for GKE 要求在启动备份操作时,所有指定的命名空间都必须存在于集群中。如果找不到命名空间,则会出现以下错误消息:
Namespace [NAMESPACE_NAME] is not found.
如需解决此问题,请按照以下说明操作:
通过检查
BackupPlan配置中的selectedNamespaces列表,验证命名空间是否已正确输入。运行
kubectl get namespace命令,确认错误消息中报告的命名空间是否存在:kubectl get namespace NAMESPACE_NAME将
NAMESPACE_NAME替换为错误消息中报告的命名空间的名称。如果命名空间不存在,系统会显示一条消息,指出未找到该命名空间,例如
Error from server (NotFound): namespaces "[NAMESPACE_NAME]" not found。更正
BackupPlan。如果命名空间拼写有误,请使用正确的命名空间名称更新BackupPlan。如果命名空间确实已不存在,且无需备份,请将其从BackupPlan配置的selectedNamespaces列表中移除。在对
BackupPlan进行必要的更正后,重新尝试备份操作并启动新的备份。
如果操作仍失败,请与 Cloud Customer Care 联系以获取进一步帮助。