本页面介绍了您在使用 Backup for GKE 时可能会遇到的权限错误、执行操作时需要考虑的事项,以及如何解决错误。
错误 100010101:无法备份 PersistentVolumeClaim - 租户项目缺少 IAM 绑定
当尝试备份 PersistentVolumeClaim 因租户项目缺少 Identity and Access Management 绑定而失败时,会发生错误 100010101,导致显示错误消息 Failed to backup PersistentVolumeClaim - Missing IAM binding for tenant project。
Backup for GKE 会创建 GKE 集群的 Persistent Disk 的快照。这些快照位于您的 Google Cloud 项目(也称为使用方项目)中,并由在它管理的租户
项目中创建。 Google Cloud 租户项目位于 google.com 组织内,与您自己的组织分开。
租户项目中的服务代理需要特定权限才能使用客户管理的加密密钥 (CMEK) 来加密集群的 PersistentVolumeClaim 引用的 Persistent Disk。此权限用于加密和解密快照数据。如果 service-TENANT_PROJECT_NUMBER@compute-system. 服务代理缺少磁盘的 CMEK 的 roles/cloudkms.cryptoKeyEncrypterDecrypter 角色,则备份操作会失败。
如需解决此错误,请按照以下说明操作:
在 Google Cloud 控制台中验证您是否拥有足够的 IAM 权限来修改 Cloud Key Management Service 密钥的 IAM 政策,例如
roles/cloudkms.admin或roles/owner。使用备份操作失败的
status reason消息中的TENANT_PROJECT_NUMBER值,找到租户项目的 Compute Engine 服务代理。例如service-TENANT_PROJECT_NUMBER@compute-system.。找到用于加密的 Persistent Disk 的以下 CMEK 信息:
密钥名称:加密密钥的名称。
密钥环:密钥所在的密钥环的名称。
位置:密钥所在的位置。 Google Cloud 例如
global或us-central1。
如需向租户项目的 Compute Engine 服务代理授予 CMEK 的
roles/cloudkms.cryptoKeyEncrypterDecrypter角色,请使用 Google Cloud CLI 运行gcloud kms keys add-iam-policy-binding命令:gcloud kms keys add-iam-policy-binding KEY_NAME \ --keyring KEY_RING \ --location LOCATION \ --member "serviceAccount:service-TENANT_PROJECT_NUMBER@compute-system." \ --role roles/cloudkms.cryptoKeyEncrypterDecrypter替换以下内容:
KEY_NAME:加密密钥的名称。KEY_RING:密钥环的名称。LOCATION:密钥的 Google Cloud 位置。 例如global或us-central1。TENANT_PROJECT_NUMBER:从备份操作失败的status reason消息中获取的租户项目编号。
如果该命令成功运行,则输出如下所示:
- members: - serviceAccount:service-987654321098@compute-system. role: roles/cloudkms.cryptoKeyEncrypterDecrypter重新测试备份操作。如果该操作仍未成功,请与 Cloud Customer Care 联系以获取进一步帮助。
错误 100010104:无法备份 PersistentVolumeClaim - 创建快照时违反了组织政策限制条件
当尝试备份 PersistentVolumeClaim 时因创建快照期间违反了组织政策限制条件而失败,会发生错误 100010104,导致显示错误消息 Failed to backup PersistentVolumeClaim - Org policy constraint violation while creating snapshot。
Backup for GKE 会创建 GKE 集群的 Persistent Disk 的快照。这些快照位于您的 Google Cloud 项目(也
称为使用方项目)中,并由在它管理的租户项目中创建。 Google Cloud租户项目位于 google.com 组织内,与您自己的组织分开。
您的组织政策规定了您可以在何处创建存储资源。Constraint constraints/compute.storageResourceUseRestrictions violated 错误表示资源或快照违反了政策,因为它是在不属于您允许的组织结构的租户项目中创建的。由于租户项目位于 Google 的组织内,因此它超出了您定义的政策范围,这会导致备份失败。
如需解决此错误,请按照以下说明操作:
找到实现
constraints/compute.storageResourceUseRestrictions限制条件的组织政策。如需详细了解如何使用 Google Cloud 控制台查看组织政策,请参阅查看组织政策。修改
constraints/compute.storageResourceUseRestrictions政策,以将 Backup for GKE 使用的folders/77620796932租户项目文件夹纳入其许可清单。将文件夹添加到许可清单后,保存政策更改。
在组织政策更新并传播(通常需要几分钟)后,重新测试备份操作。备份应在不违反存储资源使用限制的情况下继续进行。如果该操作仍未成功,请与 Cloud Customer Care 联系以获取进一步帮助。
错误 100010106:无法备份 PersistentVolumeClaim - Backup for GKE 服务代理缺少 IAM 绑定
当尝试备份 PersistentVolumeClaim 因 Backup for GKE 服务代理缺少 Identity and Access Management 绑定而失败时,会发生错误 100010106,导致显示错误消息 Failed to backup PVC - Missing IAM binding for Backup for GKE service agent。
Backup for GKE 需要拥有使用 BackupPlan 的客户管理的加密密钥 (CMEK) 来加密和解密卷永久性磁盘的权限。如果 Backup for GKE 服务代理缺少 BackupPlan CMEK 的 roles/cloudkms.cryptoKeyEncrypterDecrypter 角色,则备份操作会失败。
如需解决此错误,请按照以下说明操作:
确定您的项目特有的 Google 管理的 Backup for GKE 服务代理。例如
service-PROJECT_NUMBER@gcp-sa-gkebackup.。您可以使用以下方法查找项目编号:使用 Google Cloud 控制台中的 Google Cloud 项目信息中心。
使用 Google Cloud CLI 运行
gcloud projects describe命令:gcloud projects describe PROJECT_ID –format="value(projectNumber)"将
PROJECT_ID替换为项目的唯一名称。
确定以下 CMEK 详细信息:
密钥名称:加密密钥的名称。
密钥环:密钥所在的密钥环的名称。
位置:您的
BackupPlanCMEK 所在 的位置。 Google Cloud 例如global或us-central1。
如需向 Backup for GKE 服务代理授予 CMEK 的
roles/cloudkms.cryptoKeyEncrypterDecrypter角色,请使用 Google Cloud CLI 运行gcloud kms keys add-iam-policy-binding命令:gcloud kms keys add-iam-policy-binding KEY_NAME \ --keyring KEY_RING \ --location LOCATION \ --member "serviceAccount:service-PROJECT_NUMBER@gcp-sa-gkebackup." \ --role roles/cloudkms.cryptoKeyEncrypterDecrypter替换以下内容:
KEY_NAME:加密密钥的名称。KEY_RING:密钥环的名称。LOCATION:密钥的 Google Cloud 位置。 例如global或us-central1。PROJECT_NUMBER:您的 Google Cloud 项目编号。
验证您是否拥有 Cloud Key Management Service 密钥所需的 Identity and Access Management 权限。例如
roles/cloudkms.admin或roles/owner。验证您是否拥有已授予的权限。在上一个
gcloud kms keys add-iam-policy-binding命令的输出中,查找类似于以下内容的条目:-members: -serviceAccount:service-123456789012@gcp-sa-gkebackup. role: roles/cloudkms.cryptoKeyEncrypterDecrypter授予必要权限后,重新测试备份操作。 如果操作未成功完成,请与 Cloud Customer Care 联系以获取进一步帮助。
错误 100010107:无法备份 PersistentVolumeClaim - 缺少 IAM 绑定 - 代理服务账号 (KCP)
当您尝试执行 Backup for GKE 备份操作,但 Google Kubernetes Engine 集群服务代理无权访问客户管理的加密密钥 (CMEK) 时,会发生错误 100010107,导致显示消息 Failed to backup PVC - Missing IAM binding - agent service account (KCP)。
Google Kubernetes Engine 集群服务代理(通常采用 service-PROJECT_NUMBER@container-engine-robot. 格式)对于 GKE 集群与 Google Cloud服务交互至关重要。当备份方案使用客户管理的加密密钥 (CMEK) 时。此服务代理需要拥有使用您的 CMEK 加密和解密备份数据的权限。如果备份方案缺少 CMEK 的 roles/cloudkms.cryptoKeyEncrypterDecrypter 角色,则从集群启动的备份操作会失败并显示 permission denied 错误。
如需解决此错误,请按照以下问题排查说明操作:
验证您是否拥有修改 Cloud Key Management Service 密钥的 IAM 政策的适当权限。例如,
cloudkms.admin或roles/owner。确定 Google Kubernetes Engine 集群服务代理。此服务代理由 Google Cloud 为 GKE 集群自动创建和管理。例如
service-PROJECT_NUMBER@container-engine-robot.。 您需要项目编号才能组合完整的服务帐号。您可以使用以下方法之一查找项目编号:使用 Google Cloud 控制台中的 Google Cloud 项目信息中心。
使用 Google Cloud CLI 运行
gcloud projects describe命令:gcloud projects describe PROJECT_ID –-format="value(projectNumber)"将
PROJECT_ID替换为您的项目 ID。
找到以下 CMEK 信息:
密钥名称:加密密钥的名称。
密钥环:密钥所在的密钥环的名称。
位置:密钥所在的位置。 Google Cloud 例如
global或us-central1。
在 CMEK 级层授予
roles/cloudkms.cryptoKeyEncrypterDecrypter角色。Google Kubernetes Engine 服务代理需要拥有加密密钥的权限。如需授予 CMEK 的roles/cloudkms.cryptoKeyEncrypterDecrypter角色,请使用 Google Cloud CLI 运行gcloud kms key add-iam-policy-binding命令:gcloud kms keys add-iam-policy-binding KEY_NAME \ --keyring KEY_RING \ --location LOCATION \ --member "serviceAccount:service-PROJECT_NUMBER@container-engine-robot." \ --role roles/cloudkms.cryptoKeyEncrypterDecrypter替换以下内容:
KEY_NAME:加密密钥的名称。KEY_RING:密钥环的名称。LOCATION:密钥的 Google Cloud 位置。 例如global或us-central1。PROJECT_NUMBER:项目的名称。
输出类似于以下内容:
- members: - serviceAccount:service-123456789012@container-engine-robot. role: roles/cloudkms.cryptoKeyEncrypterDecrypter ```重新尝试 Backup for GKE 操作。如果操作仍失败,请与 Cloud Customer Care 联系以获取进一步帮助。
错误 100010109:无法备份 PersistentVolumeClaim - DiskSettings 政策不允许目标备份区域
如果 DiskSettings 访问位置政策不允许目标备份区域,则会发生错误 100010109。
了解错误
如果客户针对正在备份的集群中引用的某些磁盘位置将 DiskSettings 访问位置政策设置为 SPECIFIC_REGIONS,则会发生此错误。由于此访问位置政策仅允许特定区域作为有效的快照创建位置,因此如果目标存储位置不在该列表中,则备份会被拒绝。发生这种情况时,快照创建会失败,并显示类似于以下内容的消息:
No permission to read source disk in us-central1 from target snapshot in us-east1.
问题排查步骤
- 确定来源和目标区域:查看错误消息,找到被拒绝的来源磁盘位置(例如
us-central1)和目标快照区域(例如us-east1)。 更新 DiskSettings 政策:如需解决此问题,您必须更新
DiskSettings,以允许集群中引用的磁盘位置的目标存储位置。您可以使用 Google Cloud CLI 将目标区域添加到访问位置许可清单来实现此目的。对于可用区级磁盘(例如,将
us-east1添加为us-central1-a中的磁盘允许的区域):gcloud beta compute disk-settings update --access-location-policy=specific-regions --add-access-locations=us-east1 --zone=us-central1-a对于区域级磁盘(例如,将
us-east1添加为us-central1中的磁盘允许的区域):gcloud beta compute disk-settings update --access-location-policy=specific-regions --add-access-locations=us-east1 --region=us-central1
重新测试备份操作:更新
DiskSettings以允许目标备份区域后,重新尝试备份操作。
错误 100020101:无法备份 PersistentVolumeClaim - PersistentVolumeClaim 绑定到不受支持的 PersistentVolume 类型
当尝试备份 PersistentVolumeClaim 因 PersistentVolumeClaim 绑定到不受支持的 PersistentVolume 类型而失败时,会发生错误 100020101。此错误会导致以下错误消息:PersistentVolumeClaims are bound to PersistentVolumes of unsupported types and cannot be backed up.。
当 Backup for GKE 操作遇到绑定到使用以下卷类型的 PersistentVolume 的 PersistentVolumeClaim 时,会发生此错误:Backup for GKE 不支持使用该卷类型进行数据备份。Backup for GKE 主要支持备份 Persistent Disk 卷中的数据。如果
PersistentVolumeClaim 绑定到 Persistent Disk 的 PersistentVolume,
则 PersistentVolumeClaim 的数据备份操作会失败。
如需解决此错误,请按照以下问题排查说明操作:
通过运行
kubectl get pvc命令,列出所有PersistentVolumeClaims以及与其绑定的PersistentVolumes。查看此列表,找出由不受支持的卷类型提供支持的PersistentVolumes。kubectl get pvc --all-namespaces -o wide通过运行
kubectl describe pv命令,确定由 Backup for GKE 不支持的卷类型提供支持的PersistentVolume的卷类型:kubectl describe pv PERSISTENT_VOLUME_NAME替换以下内容:
PERSISTENT_VOLUME_NAME:在上一步的输出中,以列VOLUME形式列出的具有不受支持的卷类型的PersistentVolume的名称。在输出中,使用
Source和Driver字段获取卷预配器详细信息:对于受支持的永久性磁盘:输出类似于
Source.Driver: pd.csi.storage.gke.io或Source.Type:GCEPersistentDisk。对于导致错误的不受支持类型:输出为非永久性磁盘驱动程序,例如
Source.Driver:filestore.csi.storage.gke.io。
请使用以下方法之一来解决此错误:
迁移到 Persistent Disk:我们建议使用此方法进行完整数据 备份。如果您需要备份实际卷数据,则必须使用 Persistent Disk,这需要将数据从不受支持的卷类型迁移到新的永久性磁盘 CSI 卷。如需迁移永久性磁盘卷方面的帮助,请与 Cloud Customer Care 联系。
在 Backup for GKE 中启用宽容模式:如果不需要为不受支持的卷备份数据,我们建议使用此方法。如果迁移数据不可行或不必要(例如,如果卷由外部服务提供支持,并且您计划在恢复操作期间重新挂接该卷),您可以将 Backup for GKE 备份方案配置为允许在宽容模式下继续进行备份。如需详细了解如何启用宽容模式,请参阅对备份方案启用宽容模式。
重新尝试 Backup for GKE 操作。根据您选择的解决错误的方法,Backup for GKE 操作的行为方式如下:
如果您已迁移到永久性磁盘卷,则该卷(包括其数据)备份应该会成功。
如果您启用了宽容模式,则备份操作应该会成功,但系统不会备份不受支持的卷的数据。
如果操作仍失败,请与 Cloud Customer Care 联系以获取进一步帮助。
错误 100020104:无法备份 PersistentVolumeClaim - PersistentVolumeClaim 未绑定到 PersistentVolume
当尝试备份 PersistentVolumeClaim 因 PersistentVolumeClaim 未绑定到 PersistentVolume 而失败时,会发生错误 100020104。此错误会导致以下错误消息:Failed to backup PVC - PVC Not Bound to a Persistent Volume。
如果 Backup for GKE 操作尝试备份未成功绑定到 PersistentVolume 的 PersistentVolumeClaim,则会发生此错误。
PersistentVolumeClaim 必须先绑定到 PersistentVolume,然后才能
供使用方工作负载(例如 Pod)使用,并随后由
Backup for GKE 备份。如果 PersistentVolumeClaim 保持 Pending 状态,则表示没有合适的 PersistentVolume 可用,或者无法预配或绑定它,这会导致备份操作失败。PersistentVolumeClaim 保持未绑定的常见原因是,其关联的 StorageClass 使用 WaitForFirstConsumer 绑定模式,但尚无 Pod 或其他工作负载尝试使用 PersistentVolumeClaim。
如需解决此错误,请按照以下问题排查说明操作:
如需检查集群中所有
PersistentVolumeClaims的状态并确定未绑定的PersistentVolumeClaim,请运行kubectl get pvc命令:kubectl get pvc --all-namespaces | grep `Pending`确定未绑定到
PersistentVolume的PersistentVolumeClaim后,运行kubectl describe pvc命令,以检索有关未绑定PersistentVolumeClaim的信息:kubectl describe pvc PVC_NAME -n NAMESPACE_NAME替换以下内容:
PVC_NAME:备份失败的PersistentVolumeClaim的名称。NAMESPACE_NAME:PersistentVolumeClaim所在的命名空间的名称。
显示说明后,使用
Status和Events字段确定PersistentVolumeClaim是否绑定到PersistentVolume。 如果您仍然无法确定PersistentVolumeClaim未 绑定到PersistentVolume的原因,或者无法解决已确定的 问题,则可以对备份方案启用宽容模式。如需详细了解如何启用宽容模式,请参阅对备份方案启用宽容模式。