排查 Azure Kubernetes 服务备份和还原问题

本文提供故障排除步骤,可帮助你解决 Azure Kubernetes 服务 (AKS) 备份、还原和管理错误。

AKS 备份扩展安装错误解决方法

方案 1

错误消息

{Helm installation from path [] for release [azure-aks-backup] failed with the following error: err [release azure-aks-backup failed, and has been uninstalled due to atomic being set: failed post-install: timed out waiting for the condition]} occurred while doing the operation: {Installing the extension} on the config"`

原因:已成功安装扩展,但不会生成 pod,因为所需的计算和内存不适用于 Pod。

解决方法:若要解决此问题,请增加群集中的节点数,以提高足够的计算和内存来生成 Pod。 若要在 Azure 门户上缩放节点池,请执行以下步骤:

  1. 在 Azure 门户上,打开 AKS 群集
  2. 转到“设置”下的“节点池”。
  3. 选择“缩放节点池”,然后更新“节点计数范围”的最小值最大值
  4. 选择“应用”。

方案 2

错误消息

BackupStorageLocation "default" is unavailable: rpc error: code = Unknown desc = azure.BearerAuthorizer#WithAuthorization: Failed to refresh the Token for request to https://management.chinacloudapi.cn/subscriptions/e30af180-aa96-4d81-981a-b67570b0d615/resourceGroups/AzureBackupRG_chinanorth_1/providers/Microsoft.Storage/storageAccounts/devhayyabackup/listKeys?%24expand=kerb&api-version=2019-06-01: StatusCode=404 -- Original Error: adal: Refresh request failed. Status Code = '404'. Response body: no azure identity found for request clientID 4e95##### REDACTED #####0777`

Endpoint http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&client_id=4e95dcc5-a769-4745-b2d9-

原因:在 AKS 群集上启用 Pod 托管标识时,会将名为 aks-addon-exceptionAzurePodIdentityException 添加到 kube-system 命名空间。 AzurePodIdentityException 允许带有特定标签的 Pod 访问 Azure 实例元数据服务 (IMDS) 终结点,而不会被 NMI 服务器拦截。

扩展 Pod 不可免除,需要手动启用 Microsoft Entra Pod 标识。

解决方法:在 AKS 群集中创建 pod-identity 异常(仅适用于 dataprotection-microsoft 命名空间,而不适用于 kube-system)。 了解详细信息

  1. 运行以下命令:

    az aks pod-identity exception add --resource-group shracrg --cluster-name shractestcluster --namespace dataprotection-microsoft --pod-labels app.kubernetes.io/name=dataprotection-microsoft-kubernetes
    
  2. 若要验证群集中的 Azurepodidentityexception,请运行以下命令:

    kubectl get Azurepodidentityexceptions --all-namespaces
    
  3. 若要将“存储 Blob 数据参与者”角色分配给扩展标识,请运行以下命令:

    az role assignment create --assignee-object-id $(az k8s-extension show --name azure-aks-backup --cluster-name aksclustername --resource-group aksclusterresourcegroup --cluster-type managedClusters --query aksAssignedIdentity.principalId --output tsv) --role 'Storage Blob Data Contributor' --scope /subscriptions/subscriptionid/resourceGroups/storageaccountresourcegroup/providers/Microsoft.Storage/storageAccounts/storageaccountname
    

方案 3

错误消息

{"Message":"Error in the getting the Configurations: error {Post \https://chinanorth2.dp.kubernetesconfiguration.azure.com/subscriptions/ subscriptionid /resourceGroups/ aksclusterresourcegroup /provider/managedclusters/clusters/ aksclustername /configurations/getPendingConfigs?api-version=2021-11-01\: dial tcp: lookup chinanorth2.dp.kubernetesconfiguration.azure.com on 10.63.136.10:53: no such host}","LogType":"ConfigAgentTrace","LogLevel":"Error","Environment":"prod","Role":"ClusterConfigAgent","Location":"chinanorth2","ArmId":"/subscriptions/ subscriptionid /resourceGroups/ aksclusterresourcegroup /providers/Microsoft.ContainerService/managedclusters/ aksclustername ","CorrelationId":"","AgentName":"ConfigAgent","AgentVersion":"1.8.14","AgentTimestamp":"2023/01/19 20:24:16"}`

原因:在 AKS 群集中使用群集扩展需要特定的 FQDN/应用程序规则。 了解详细信息

出现此错误的原因是缺少这些 FQDN 规则,这导致群集扩展服务中的配置信息不可用。

解决方法:若要解决此问题,需要为 DP 终结点创建 CoreDNS-custom override,以便通过公用网络传递。

  1. 提取群集中的现有 CoreDNS-custom YAML(将其保存在本地以供以后参考):

    kubectl get configmap coredns-custom -n kube-system -o yaml
    
  2. 覆盖 chinanorth2 DP 端点到公共 IP 的映射(使用以下 YAML):

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: coredns-custom 
      namespace: kube-system
    data:
        aksdp.override: |
              hosts { 
                  20.40.200.153 chinanorth2.dp.kubernetesconfiguration.azure.com
                  fallthrough
               }
    

    现在运行以下命令以应用更新 yaml 文件:

    kubectl apply -f corednsms.yaml
    
  3. 要强制重新加载 coredns pod,请运行以下命令:

    kubectl delete pod --namespace kube-system -l k8s-app=kube-dns
    
  4. 若要从 ExtensionAgent pod 执行 NSlookup 以检查 coreDNS-custom 是否正常工作,请运行以下命令:

    kubectl exec -i -t pod/extension-agent-<pod guid that's there in your cluster> -n kube-system -- nslookup chinanorth2.dp.kubernetesconfiguration.azure.com
    
  5. 若要检查 ExtensionAgent pod 的日志,请运行以下命令:

    kubectl logs pod/extension-agent-<pod guid that’s there in your cluster> -n kube-system --tail=200
    
  6. 删除并重新安装备份扩展以启动备份。

与备份扩展安装后相关的错误

出现这些错误代码是因为 AKS 群集中安装的备份扩展存在问题。

KubernetesBackupListExtensionsError:

原因:作为验证的一部分,备份保管库会检查群集是否已安装备份扩展。 为此,保管库 MSI 需要 AKS 群集的读者权限,以便列出群集中安装的所有扩展。

建议的操作:将读者角色重新分配给保管库 MSI(移除现有角色分配并再次分配读者角色),因为已分配的读者角色缺少其中的 list-extension 权限。 如果重新分配失败,请使用其他备份保管库配置备份。

UserErrorKubernetesBackupExtensionNotFoundError

原因:作为验证的一部分,备份保管库会检查群集是否已安装备份扩展。 保管库将执行列出群集中已安装扩展的操作。 如果列表中缺少备份扩展,则会出现此错误。

建议的操作:使用 CL 或 Azure 门户客户端删除扩展,然后再次安装该扩展。

UserErrorKubernetesBackupExtensionHasErrors

原因:群集中安装的备份扩展存在一些内部错误。

建议的操作:使用 CL 或 Azure 门户客户端删除扩展,然后再次安装该扩展。

UserErrorKubernetesBackupExtensionIdentityNotFound

原因:AKS 备份要求在群集内安装备份扩展。 扩展及其安装创建了一个用户标识,称为扩展 MSI。 此 MSI 是在包含 AKS 群集节点池的资源组中创建的。 此 MSI 可获取分配用于访问备份存储位置的所需角色。 该错误代码表明缺少扩展标识。

建议的操作:使用 CLI 或 Azure 门户客户端删除扩展,然后再次安装该扩展。 新标识将与扩展一起创建。

KubernetesBackupCustomResourcesTrackingTimeOutError

原因:AKS 的 Azure 备份要求在群集中安装备份扩展。 要执行备份和还原操作,请在群集中创建自定义资源。 通过这些 CR 执行备份相关操作的扩展生成的 Pod。 当扩展无法更新这些 PR 的状态时,会发生此错误。

建议的操作:需要通过运行命令 kubectl get pods -n dataprotection.microsoft 来验证扩展的运行状况。 如果 Pod 未处于运行状态,则将群集中的节点数增加 1 或增加计算限制。 然后等待几分钟后再次运行该命令,此操作应会将 Pod 的状态更改为正在运行。 如果问题仍然存在,请删除并重新安装扩展。

BackupPluginPodRestartedDuringBackupError

原因:AKS 群集中的备份扩展 Pod (dataprotection-microsoft-kubernetes-agent) 由于当前节点上的 CPU/内存资源不足而出现不稳定,导致 OOM(内存不足)终止事件。 这可能是由于备份扩展 Pod 请求的计算较低。

建议的操作:若要解决此问题,建议增加分配给此 Pod 的计算值。 通过这样做,它将自动预配到计算资源充足的 AKS 群集内的不同节点上。

此 Pod 的当前计算值为:

resources.requests.cpu 为 500m resources.requests.memory 为 128Mi Kindly,通过更新“resources.requests.memory”参数将内存分配修改为 512Mi。 如果问题仍然存在,建议在内存分配后将“resources.requests.cpu”参数增加到 900m。 可以按照以下步骤增加参数的值:

  1. 在 Azure 门户中导航到“AKS 群集”边栏选项卡。
  2. 单击“扩展+应用程序”,然后选择“azure-aks-backup”扩展。
  3. 通过添加以下键值对来更新门户中的配置设置。 resources.requests.cpu 900m resources.requests.memory 512Mi

BackupPluginDeleteBackupOperationFailed

原因:备份扩展应运行以删除备份。

建议的操作:如果群集正在运行,请验证扩展是否处于正常状态。 检查扩展 Pod 是否正在生成,否则增加节点。 如果失败,请尝试删除并重新安装扩展。 如果删除了备份的群集,则手动删除快照和元数据。

ExtensionTimedOutWaitingForBackupItemSync

原因:备份扩展等待备份项与存储帐户同步。

建议的操作:如果出现此错误代码,请重试备份操作或重新安装扩展。

基于备份存储位置的错误

出现这些错误代码是因为 AKS 群集中安装的备份扩展存在问题。

UserErrorDeleteBackupFailedBackupStorageLocationReadOnly

原因:备份扩展安装期间作为输入提供的存储帐户处于“只读”状态,不允许从 Blob 容器中删除备份数据

建议的操作:将存储帐户状态从“只读”更改为“写入”

UserErrorDeleteBackupFailedBackupStorageLocationNotFound

原因:在扩展安装过程中,将会提供备份存储位置作为输入,其中包含一个存储帐户和 Blob 容器。 如果在扩展安装过程中删除或错误添加该位置,则会出现此错误。

建议的操作:删除备份扩展,然后使用正确的存储帐户和 Blob 容器作为输入重新安装它。

UserErrorBackupFailedBackupStorageLocationReadOnly

原因:备份扩展安装过程中作为输入提供的存储帐户处于“只读”状态,不允许在 Blob 容器上写入备份数据

建议的操作:将存储帐户状态从“只读”更改为“写入”

UserErrorNoDefaultBackupStorageLocationFound

原因:在扩展安装过程中,将会提供备份存储位置作为输入,其中会包含一个存储帐户和 Blob 容器。 如果在扩展安装过程中删除或错误输入了该位置,则会出现此错误。

建议的操作:删除备份扩展,然后使用正确的存储帐户和 Blob 容器作为输入重新安装它。

UserErrorExtensionMSIMissingPermissionsOnBackupStorageLocation

原因:备份扩展应在备份存储位置(存储帐户)上具有“存储 Blob 数据参与者”角色。 扩展标识将会分配有此角色。

建议的操作:如果缺少此角色,请使用 Azure 门户或 CLI 在存储帐户上重新分配此缺失的权限。

UserErrorBackupStorageLocationNotReady

原因:在扩展安装过程中,将会提供备份存储位置作为输入,其中会包含一个存储帐户和 Blob 容器。 备份扩展应在备份存储位置(存储帐户)上具有“存储 Blob 数据参与者”角色。 扩展标识将会分配有此角色。

建议的操作:如果扩展标识无权访问存储帐户,则会出现此错误。 如果在配置保护操作时首次安装 AKS 备份扩展,则会出现此错误。 这发生在所授予权限传播到 AKS 备份扩展所需要的时间内。 解决方法是等待一小时,然后重试保护配置。 否则,请使用 Azure 门户或 CLI 在存储帐户上重新分配此缺失的权限。

UserErrorSnapshotResourceGroupHasLocks

原因:对作为备份扩展输入提供的快照资源组应用删除锁或读取锁时,会出现此错误代码。

建议的操作:如果你正在配置新的备份实例,请使用没有删除锁或读取锁的资源组。 如果备份实例已配置,则从快照资源组中删除锁。

基于保管库备份的错误

启用 AKS 备份以将备份存储在保管库标准数据存储中时,可能会出现这些错误代码。

DppUserErrorVaultTierPolicyNotSupported

原因:当创建备份策略时,如果使用了为某一区域中备份保管库的保管库标准数据存储定义的保留规则,但该区域不支持此数据存储,则会出现此错误代码。

建议的操作:使用在 Azure 门户上定义的保管库标准持续时间更新保留规则:

  1. 选择该规则旁边的“编辑”图标

    屏幕截图显示了如何编辑 AKS 备份的保留期。

  2. 清除“保管库标准”旁边的复选框,然后选择“更新”

    屏幕截图显示了如何清除保管库标准复选框。

  3. 为操作层备份创建备份策略(仅适用于 AKS 群集的快照)。

AKS 备份和还原作业已完成但出现警告

UserErrorPVSnapshotDisallowedByPolicy

错误代码:UserErrorPVSnapshotDisallowedByPolicy

原因:通过订阅分配了一个 Azure 策略,该策略停止了 CSI 驱动程序,因而无法创建卷快照。

建议的操作:删除停止磁盘快照操作的 Azure 策略,然后执行按需备份。

UserErrorPVSnapshotLimitReached

错误代码:UserErrorPVSnapshotLimitReached

原因:永久性卷在某个时间点可以存在的快照数量有限制。 对于基于 Azure 磁盘的永久性卷,限制为 500 个快照。 当由于存在的快照数超过支持数量限制,因而未创建特定永久性卷的快照时,就会出现此错误。

建议的操作:更新备份策略以缩短保留期,并等待备份保管库删除较旧的恢复点。

CSISnapshottingTimedOut

错误代码:CSISnapshottingTimedOut

原因:由于 CSI 驱动程序提取快照句柄超时,快照失败。

建议的操作:查看日志,并通过运行按需备份来重试该操作以获取成功快照,或者等待下一次计划的备份执行。

UserErrorHookExecutionFailed

错误代码:UserErrorHookExecutionFailed

原因:所应用的、与备份和还原一起运行的挂钩遇到错误,因此未成功应用。

建议的操作:查看日志,更新挂钩,然后重试备份/还原操作。

UserErrorNamespaceNotFound

错误代码:UserErrorNamespaceNotFound

原因:执行备份时,备份配置中提供的命名空间缺失。 提供的命名空间有错误或者已被删除。

建议的操作:检查是否已正确提供所要备份的命名空间。

UserErrorPVCHasNoVolume

错误代码:UserErrorPVCHasNoVolume

原因:未将永久性卷附加到上下文中的永久性卷声明 (PVC)。 因此不会备份 PVC。

建议的操作:如果需要备份,请将卷附加到 PVC。

UserErrorPVCNotBoundToVolume

错误代码:UserErrorPVCNotBoundToVolume

原因:上下文中的 PVC 处于“挂起”状态,并且未向其附加永久性卷。 因此不会备份 PVC。

建议的操作:如果需要备份,请将卷附加到 PVC。

UserErrorPVNotFound

错误代码:UserErrorPVNotFound

原因:永久性卷的基础存储媒体缺失。

建议的操作:进行检查,并附加一个附加了实际存储媒体的新永久性卷。

UserErrorStorageClassMissingForPVC

错误代码:UserErrorStorageClassMissingForPVC

原因:AKS 备份会检查正在使用的存储类,但由于该类不可用,因此跳过了为永久性卷创建快照的操作。

建议的操作:更新 PVC 规范,使其包含使用的存储类。

UserErrorSourceandTargetClusterCRDVersionMismatch

错误代码:UserErrorSourceandTargetClusterCRDVersionMismatch

原因:在还原期间,源 AKS 群集和目标 AKS 群集使用了不同的 FlowSchemaPriorityLevelConfigurations CR 版本。 由于群集版本不匹配,某些 Kubernetes 资源未还原。

建议的操作:对目标群集使用与源群集相同的群集版本,或者手动应用 CR。

LinkedAuthorizationFailed

错误代码:LinkedAuthorizationFailed

原因:若要执行还原操作,用户需要对备份的 AKS 群集具有读取权限。

建议的操作:分配对源 AKS 群集的“读取者”角色,然后继续执行还原操作。

后续步骤