全部产品
Search
文档中心

容器服务 Kubernetes 版 ACK:备份中心FAQ

更新时间:Nov 06, 2024

本文介绍使用备份中心时遇到的常见问题及其解决方案。

索引

类别

问题

获取报错信息

通用操作

控制台

通用

备份

转换存储类(原制作快照)

恢复

其他

通用操作

说明

若您通过kubectl命令行工具使用备份中心,在问题排查之前,请先将备份服务组件migrate-controller升级至最新版本,组件升级不会影响已有的备份。关于升级操作,请参见管理组件

当您的备份任务、转换存储类(原制作快照)、恢复任务的状态为FailedPartiallyFailed时,您可以通过以下方式获取相关报错提示信息。

  • 将鼠标悬浮至任务状态列的FailedPartiallyFailed上,获取错误的概况信息,例如RestoreError: snapshot cross region request failedimage.png

  • 如需获取更详细的错误信息,您可以执行以下命令查询任务对应资源的Event记录,例如RestoreError: process advancedvolumesnapshot failed avs: snapshot-hz, err: transition canceled with error: the ECS-snapshot related ram policy is missing

    • 备份任务

      kubectl -n csdr describe applicationbackup <backup-name> 
    • 转换存储类(原制作快照)任务

      kubectl -n csdr describe converttosnapshot <backup-name>
    • 恢复任务

      kubectl -n csdr describe applicationrestore <restore-name>

控制台界面提示“工作组件运行异常”或“当前数据拉取失败”

问题现象

控制台界面提示工作组件运行异常当前数据拉取失败

问题原因

备份中心组件安装异常。

解决方案

  • 检查集群中的节点是否存在。若不存在,备份中心将无法部署。

  • 确认集群是否使用Flexvolume存储插件。若集群使用Flexvolume存储插件,请将集群的Flexvolume插件迁移至CSI插件。具体操作,请参见Flexvolume集群migrate-controller组件无法正常拉起

  • 若您通过kubectl命令行工具使用备份中心,请检查相关YAML配置是否有误。具体操作,请参见通过kubectl实现集群应用的备份和恢复

  • 若您的集群为ACK专有版集群或注册集群,请确认是否配置了相关权限。具体操作,请参见ACK专有集群注册集群

  • 检查csdr命名空间下的无状态应用csdr-controller和csdr-velero是否因为资源、调度限制等原因无法正常部署,确认问题并进行修复。

控制台界面提示已存在同名的资源,请修改名称后再试

问题现象

在创建或删除备份、转换存储类(原制作快照)、恢复任务时,控制台界面提示已存在同名的资源,请修改名称后再试

问题原因

在控制台删除任务时,将在集群中创建deletrequest资源,由工作组件进行系列删除操作,不仅仅删除对应的备份资源。关于命令行操作也类似,请参见通过命令行工具实现备份和恢复

如果删除操作错误或在处理deleterequest资源流程中出错,将导致部分集群中的部分资源无法删除,出现存在同名资源的提示。

解决方案

  • 根据提示删除对应的同名资源。例如,报错提示deleterequests.csdr.alibabacloud.com "xxxxx-dbr" already exists,您可以通过以下命令删除。

    kubectl -n csdr delete deleterequests xxxxx-dbr
  • 使用新的名称创建对应的任务。

跨集群恢复应用时,无法选择已创建的备份进行恢复

问题现象

跨集群恢复应用时,无法选择备份任务进行恢复。

问题原因

  • 原因1:备份仓库未与当前集群进行关联,即未初始化仓库。

    初始化仓库操作会将备份仓库的基础信息(OSS Bucket)下发到当前集群中,然后将备份仓库中已成功备份完成的数据在集群中进行初始化。只有初始化操作完成后,才可以在当前集群中选择到该备份仓库中的备份数据进行恢复操作。

  • 原因2:初始化仓库失败,即当前集群backuplocation资源状态为Unavailable

  • 原因3:备份任务未完成或备份失败。

解决方案

  • 解决方案1:

创建恢复任务页面,单击备份仓库右侧的初始化仓库,待备份仓库初始化完成后,再选择待恢复的任务。

  • 解决方案2:

执行以下命令,确认backuplocation资源的状态。

kubectl get -ncsdr backuplocation <backuplocation-name> 

预期输出:

NAME                    PHASE       LAST VALIDATED   AGE
<backuplocation-name>   Available   3m36s            38m

如果状态为Unavailable,请参见任务状态为Failed,且提示包含"VaultError: xxx"的解决方案处理。

解决方案3:

在备份集群控制台,确认相关备份任务已成功,即备份任务状态为Completed。若备份状态异常,请重新排查原因。具体操作,请参见索引

控制台界面提示当前组件所依赖的服务角色尚未被授权

问题现象

在进入应用备份控制台时,界面提示当前组件所依赖的服务角色尚未被授权,错误码为AddonRoleNotAuthorized

问题原因

备份中心组件migrate-controller在v1.8.0版本进行了ACK托管集群的云资源鉴权逻辑优化。阿里云账号下集群首次安装或升级至该版本时,需要阿里云账号完成云资源授权。

解决方案

  • 若您当前使用阿里云账号登录,请单击复制授权链接在浏览器中打开或者单击去授权完成阿里云账号授权。

  • 若您当前使用RAM用户(子账号)登录,请单击复制授权链接后,发送给阿里云账号完成授权。

任务状态为Failed,且提示包含"internal error"

出现此问题,请提交工单处理。

任务状态为Failed,且提示包含"create cluster resources timeout"

问题现象

任务状态为Failed,且提示包含"create cluster resources timeout"。

问题原因

转换存储类(原制作快照)、恢复任务期间,可能会创建临时Pod、存储声明、存储卷等资源,这些资源创建后若长时间未可用,将会报"create cluster resources timeout"错误提示。

解决方案

  1. 执行以下命令,通过Event快速定位异常的资源及失败原因。

    kubectl -ncsdr describe <applicationbackup/converttosnapshot/applicationrestore> <task-name> 

    预期输出:

    ……wait for created tmp pvc default/demo-pvc-for-convert202311151045 for convertion bound time out

    表明集群用于转换存储类的存储声明长时间未处于Bound状态,存储声明所在的命名空间为default,存储声明的名称为demo-pvc-for-convert202311151045

  2. 执行以下命令,查询存储声明的状态及异常原因。

    kubectl -ndefault describe pvc demo-pvc-for-convert202311151045 

    以下为备份中心场景常见的异常原因,更多信息,请参见存储异常问题排查

    • 集群/节点资源不足或状态异常。

    • 恢复集群不存在对应的存储类。请通过转换存储类(原制作快照)转换至恢复集群已有的存储类后进行恢复。

    • 存储类关联的底层存储不可用,例如指定的云盘类型不支持在当前可用区使用。

    • alibabacloud-cnfs-nas关联的CNFS异常。请参见通过CNFS管理NAS文件系统(推荐)

    • 在多可用区集群恢复时,选择volumeBindingMode为Immediate的存储类。

任务状态为Failed,且提示包含"addon status is abnormal"

问题现象

任务状态为Failed,且提示包含"addon status is abnormal"。

问题原因

csdr命名空间中组件运行异常。

解决方案

请参见原因1及解决方案:csdr命名空间中组件运行异常处理。

任务状态为Failed,且提示包含"VaultError: xxx"

问题现象

备份、恢复或快照转换任务状态为Failed,且提示VaultError: backup vault is unavailable: xxx

问题原因

  • OSS Bucket不存在。

  • 集群OSS权限未配置。

  • OSS Bucket网络访问不通。

解决方案

  1. 登录OSS管理控制台,确认备份仓库绑定的OSS Bucket已存在。

    若OSS Bucket缺失,请创建Bucket并重新绑定。具体操作,请参见控制台创建存储空间

  2. 确认集群OSS权限已配置。

    • ACK Pro版集群:无需配置OSS权限,确认集群备份仓库关联的OSS Bucket名称以cnfs-oss-**命名。

    • ACK专有版集群和注册集群:需配置OSS权限。具体操作,请参见安装备份服务组件并配置权限

    对于使用非控制台方式安装或升级组件至v1.8.0或以上版本的ACK托管集群,可能缺少OSS相关权限。您可以通过以下命令进行排查。

    kubectl get secret -n kube-system | grep addon.aliyuncsmanagedbackuprestorerole.token

    预期输出:

    addon.aliyuncsmanagedbackuprestorerole.token          Opaque                      1      62d

    若存在以上输出:则此集群只需要使用cnfs-oss-*开头的Bucket,无需配置OSS权限。

    若没有以上输出,可以通过以下方式完成授权。

    • 参考ACK专有版集群和注册集群,配置OSS权限。具体操作,请参见安装备份服务组件并配置权限

    • 使用阿里云账号单击去授权完成阿里云账号授权,该授权对整个阿里云账号只需操作一次。

    说明

    备份仓库不支持同名重建,也不支持绑定非cnfs-oss-**命名的OSS Bucket。若您已绑定过非cnfs-oss-**命名的OSS Bucket,请重新创建非同名的备份仓库,并绑定符合命名要求的OSS Bucket。

  3. 使用以下命令,确认集群相关网络配置。

    kubectl get backuplocation <backuplocation-name> -n csdr -o yaml | grep network

    输出结果类似如下内容:

    network: internal
    • 当network为internal时,说明备份仓库通过内网访问OSS Bucket。

    • 当network为public时,说明备份仓库通过公网访问OSS Bucket。使用公网访问OSS Bucket时,若具体报错原因为访问超时,请检查集群是否具有公网开启能力。相关处理请参见为已有集群开启公网访问能力

    以下三种情况,备份仓库必须通过公网访问OSS Bucket。

    • 集群和OSS Bucket不在同一Region。

    • 当前集群为ACK Edge集群

    • 当前集群为注册集群,且没有通过CEN、高速通道专线、VPN等方式与云上VPC互通;或已与云上VPC互通,但未配置指向该地域OSS内网网段的路由。您需要配置指向该地域OSS内网网段的路由。

    如果必须通过公网访问OSS Bucket时,您可以使用以下命令,将OSS Bucket的访问方式修改为公网访问。以下代码中<backuplocation-name>为备份仓库的名称,<region-id>为OSS Bucket所在的地域,例如cn-hangzhou。

    kubectl patch -ncsdr backuplocation/<backuplocation-name> --type='json' -p   '[{"op":"add","path":"/spec/config","value":{"network":"public","region":"<region-id>"}}]'
    kubectl patch -ncsdr backupstoragelocation/<backuplocation-name> --type='json' -p   '[{"op":"add","path":"/spec/config","value":{"network":"public","region":"<region-id>"}}]'

备份、恢复或快照转换任务状态为Failed,且提示backup location is not ok, please maybe check access oss

问题现象

备份、恢复或快照转换任务状态为Failed,且提示backup location is not ok, please maybe check access oss

问题原因及解决方案

集群为1.20及以上版本

可能原因

可能由于备份服务组件migrate-controller版本过低。

解决方案

请将备份服务组件migrate-controller升级至最新版本即可解决。具体操作,请参见管理组件

集群为1.20以下版本

可能原因

  • 需要额外保证各备份仓库关联的OSS Bucket子路径是相互独立的,即不存在包含关系,如//A/A/A/B,且只能存储备份中心产生的备份数据,否则,涉及的备份仓库将不可用。

  • 任务状态为Failed,且提示包含"VaultError: xxx"中的可能原因一致。

解决方案

需要额外保证各备份仓库关联的OSS Bucket子路径是相互独立的,且只能存储备份中心产生的备份数据。您可以使用以下命令进一步检查确认。以下代码中<backuplocation-name>为备份仓库的名称。

kubectl describe backupstoragelocation <backuplocation-name> -n csdr | grep message

输出结果类似如下内容:

Backup store contains invalid top-level directories: ****

表明该备份仓库关联的OSS Bucket子路径下有其他数据。您可以选择以下方式解决:

  • 升级集群版本至1.20及以上,并将备份服务组件migrate-controller升级至最新版本。

  • 新建关联空路径的备份仓库并重新命名,请勿删除后重建同名的备份仓库。

备份、恢复或快照转换任务长期处于Inprogress状态

原因1及解决方案:csdr命名空间中组件运行异常

确认组件运行状态,并查询组件异常原因。

  1. 执行以下命令,查询csdr命名空间中的组件是否出现重启或无法启动的情况。

    kubectl get pod -n csdr
  2. 执行以下命令,查询组件重启或无法启动的原因。

    kubectl describe pod <pod-name> -n csdr
  • 若原因是OOM异常重启

    请执行以下命令,调整对应Deployment的Limit值。其中,csdr-controller-***对应<deploy-name>csdr-controllercsdr-velero-***对应<deploy-name>csdr-velero

    kubectl patch deploy  <deploy-name> -p '{"spec":{"containers":{"resources":{"limits":"<new-limit-memory>"}}}}'
  • 若原因是HBR权限未配置导致拉起失败:请参见以下步骤处理。

    1. 确认集群已开通云备份服务。

      • 未开通:请开通云备份服务。具体操作,请参见云备份

      • 已开通:请转下一步。

    2. 确认ACK专有版集群和注册集群已配置云备份权限。

    3. 执行以下命令,确认云备份 Client组件所需Token是否存在。

      kubectl describe <hbr-client-***>

      若Event报错提示couldnt find key HBR_TOKEN,表明Token缺失,请参见以下步骤处理。

      1. 执行以下命令,查询对应hbr-client-***所在节点。

        kubectl get pod <hbr-client-***> -n csdr -owide
      2. 执行以下命令,将对应Node的labels: csdr.alibabacloud.com/agent-enabletrue修改为false

        kubectl label node <node-name> csdr.alibabacloud.com/agent-enable=false --overwrite
        重要
        • 重新进行备份恢复时,将自动创建Token并拉起hbr-client。

        • 将其他集群的Token拷贝到本集群,由此拉起的hbr-client不可用。您需要删除已拷贝的Token,以及由此Token拉起的hbr-client-*** Pod,然后再执行上述步骤。

原因2及解决方案:云盘数据备份时,集群快照权限未配置

若您对挂载云盘数据卷的应用使用数据备份功能时,长期处于InProgress状态。请执行以下命令,查询集群新创建的VolumeSnapshot资源。

kubectl get volumesnapshot -n <backup-namespace>

部分预期输出:

NAME                    READYTOUSE      SOURCEPVC         SOURCESNAPSHOTCONTENT         ...
<volumesnapshot-name>   true                              <volumesnapshotcontent-name>  ...

若所有的volumesnapshotREADYTOUSE长期处于false状态,请参见如下步骤处理。

  1. 登录ECS管理控制台,确认是否已开启云盘快照服务。

    • 未开启:请在对应地域开通云盘快照。具体操作,请参见开通快照

    • 已开启:请转下一步。

  2. 确认集群CSI组件运行正常。

    kubectl -nkube-system get pod -l app=csi-provisioner
  3. 确认是否已配置云盘快照的使用权限。

    ACK专有版集群

    1. 登录容器服务管理控制台,在左侧导航栏单击集群

    2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择集群信息

    3. 集群信息页面,单击集群资源页签,确认后单击Master RAM角色右侧链接进入权限管理页面。

    4. 权限策略列表,查看云盘快照权限是否正常。

      • k8sMasterRolePolicy-Csi-***权限策略已存在,且已配置k8sMasterRolePolicy-Csi-***k8sMasterRolePolicy-Csi-***权限,表明云盘快照权限正常。请提交工单处理。

      • k8sMasterRolePolicy-Csi-***权限策略缺失,请为Master RAM角色授予如下云盘快照权限策略。具体操作,请参见创建自定义权限策略为RAM角色授权

        {
            "Version": "1",
            "Statement": [
                {
                    "Action": [
                        "ecs:DescribeDisks",
                        "ecs:DescribeInstances",
                        "ecs:DescribeAvailableResource",
                        "ecs:DescribeInstanceTypes",
                        "nas:DescribeFileSystems",
                        "ecs:CreateSnapshot",
                        "ecs:DeleteSnapshot",
                        "ecs:DescribeSnapshotGroups",
                        "ecs:CreateAutoSnapshotPolicy",
                        "ecs:ApplyAutoSnapshotPolicy",
                        "ecs:CancelAutoSnapshotPolicy",
                        "ecs:DeleteAutoSnapshotPolicy",
                        "ecs:DescribeAutoSnapshotPolicyEX",
                        "ecs:ModifyAutoSnapshotPolicyEx",
                        "ecs:DescribeSnapshots",
                        "ecs:CopySnapshot",
                        "ecs:CreateSnapshotGroup",
                        "ecs:DeleteSnapshotGroup"
                    ],
                    "Resource": [
                        "*"
                    ],
                    "Effect": "Allow"
                }
            ]
        }
    5. 权限配置完成后,若问题仍未解决,请提交工单处理。

    ACK托管版集群

    1. 使用RAM管理员登录RAM控制台

    2. 在左侧导航栏,选择身份管理 > 角色

    3. 角色页面,在搜索框中搜索AliyunCSManagedCsiRole,查询该角色的授权策略中是否包含以下策略内容。

      {
          "Version": "1",
          "Statement": [
              {
                  "Action": [
                      "ecs:DescribeDisks",
                      "ecs:DescribeInstances",
                      "ecs:DescribeAvailableResource",
                      "ecs:DescribeInstanceTypes",
                      "nas:DescribeFileSystems",
                      "ecs:CreateSnapshot",
                      "ecs:DeleteSnapshot",
                      "ecs:DescribeSnapshotGroups",
                      "ecs:CreateAutoSnapshotPolicy",
                      "ecs:ApplyAutoSnapshotPolicy",
                      "ecs:CancelAutoSnapshotPolicy",
                      "ecs:DeleteAutoSnapshotPolicy",
                      "ecs:DescribeAutoSnapshotPolicyEX",
                      "ecs:ModifyAutoSnapshotPolicyEx",
                      "ecs:DescribeSnapshots",
                      "ecs:CopySnapshot",
                      "ecs:CreateSnapshotGroup",
                      "ecs:DeleteSnapshotGroup"
                  ],
                  "Resource": [
                      "*"
                  ],
                  "Effect": "Allow"
              }
          ]
      }

    注册集群

    仅节点均为阿里云ECS的注册集群才能使用云盘快照功能。请检查安装CSI存储插件时是已进行相关授权。相关操作,请参见为CSI组件配置RAM权限

原因3及解决方案:使用除云盘外的其他类型存储卷

备份中心migrate-controller组件从v1.7.7版本开始,支持云盘类型数据备份跨地域恢复,其他类型数据跨地域恢复暂未支持。若您使用的是阿里云OSS等支持公网访问的存储产品,可先静态创建存储声明、存储卷后再恢复应用。具体操作,请参考使用OSS静态存储卷

备份状态为Failed,且提示包含"backup already exists in OSS bucket"

问题现象

备份状态为Failed,且提示包含"backup already exists in OSS bucket"。

问题原因

此前创建的同名备份实际存放在备份仓库关联的OSS Bucket中。

实际存在的备份在当前集群中不可见的原因:

  • 正在进行的备份或失败的备份不会同步到其他集群。

  • 在非备份集群删除备份,只会对其打标,不会实际在OSS Bucket中删除。打标的备份不再同步至新关联的集群。

  • 当前集群未关联备份所使用的备份仓库,即未初始化。

解决方案

使用新的名称重新创建备份仓库。

备份状态为Failed,且提示包含"get target namespace failed"

问题现象

备份状态为Failed,且提示包含"get target namespace failed"。

问题原因

一般出现在通过定时创建的备份任务中。选择命名空间的方式不同,备份结果也不同。

  • 选择包含方式时,选择的命名空间均已被删除。

  • 选择排除方式时,集群中除选择的命名空间外无其他命名空间。

解决方案

备份计划支持编辑,您可以调整命名空间的选择方式及对应的命名空间。

备份状态为Failed,且提示包含"velero backup process timeout"

问题现象

备份状态为Failed,且提示包含"velero backup process timeout"。

问题原因

  • 原因1:应用备份的子任务超时。应用备份的子任务所需时间与集群资源量、集群APIServer时延等多方面因素相关。备份中心migrate-controller组件从v1.7.7版本开始,默认超时时间为60分钟。

  • 原因2:备份仓库使用的Bucket的存储类型为归档存储、冷归档存储或深度冷归档存储。为保证备份流程的一致性,过程中记录元信息的文件需要由组件在OSS服务端更新,未解冻的文件不支持该操作。

解决方案

  • 解决方案1:修改备份集群中备份子任务超时时间的全局配置。

    执行以下命令,在applicationBackup中增加velero_timeout_minutes配置项,单位为分钟。

    kubectl edit -ncsdr cm csdr-config

    例如,需要将超时时间设置为100分钟,则需要进行如下修改:

    apiVersion: v1
    data:
      applicationBackup: |
        ... #省略展示
        velero_timeout_minutes: 100

    修改完成后,执行以下命令重启以使csdr-controller生效。

    kubectl -ncsdr delete pod -l control-plane=csdr-controller
  • 解决方案2:将备份仓库使用的Bucket存储类型修改为标准存储。

    如果您期望以归档存储类型存放备份数据,您可以通过生命周期规则配置自动转换存储类型,并在恢复之前解冻数据。更多信息,请参见转换存储类型

备份状态为Failed,且提示包含"HBR backup request failed"

问题现象

备份任务状态为Failed,且提示包含"HBR backup request failed"。

问题原因

  • 原因1:集群使用的存储插件暂不兼容。

  • 原因2:云备份暂不支持备份volumeMode为Block模式的存储卷。更多信息,请参见volumeMode介绍

  • 原因3:云备份客户端异常,导致备份或恢复文件系统类型数据(例如OSS、NAS、CPFS、本地存储卷数据等)任务超时或失败。

解决方案

  • 解决方案1:若您集群使用的是非阿里云CSI存储插件,或存储卷非NFS、LocalVolume等K8s通用的存储卷,遇到兼容问题,请提交工单处理。

  • 解决方案2:提交工单处理。

  • 解决方案3:请按照以下步骤处理:

    1. 登录云备份Cloud Backup控制台

    2. 在左侧导航栏,选择备份 > 容器备份

    3. 在顶部菜单栏左上角,选择所在地域。

    4. 备份任务页签,通过任务名称搜索<backup-name>-hbr,查询备份任务的状态及对应原因。具体操作,请参见容器服务ACK备份

      说明

      若需要查询转换存储类或备份任务,请使用对应的备份名称搜索。

备份状态为Failed,且提示包含"check backup files in OSS bucket failed"或"upload backup files to OSS bucket failed"或"download backup files from OSS bucket failed"

问题现象

备份状态为Failed,且提示包含"upload backup files to OSS bucket failed"。

问题原因

组件在检查、上传、下载备份仓库关联的OSS bucket时OSS服务端返回错误。可能的原因:

  • 原因1:OSS Bucket配置了数据加密,未追加相关KMS权限。

  • 原因2:ACK专有版集群和注册集群在安装组件并配置权限时,部分读写权限缺失。

  • 原因3:ACK专有版集群和注册集群配置权限时使用的RAM用户鉴权凭证被吊销。

解决方案

备份状态为PartiallyFailed,且提示包含"PROCESS velero partially completed"

问题现象

备份状态为PartiallyFailed,且提示包含"PROCESS velero partially completed"。

问题原因

使用velero组件备份应用(集群内资源)时,部分资源备份失败。

解决方案

执行以下命令,确认失败的资源及失败原因。

 kubectl -ncsdr exec -it $(kubectl -ncsdr get pod -l component=csdr | tail -n 1 | cut -d ' ' -f1) -- ./velero describe backup <backup-name>

根据输出中的ErrorsWarnings字段内容提示修复问题。

若无直接显示失败原因,执行以下命令,获取相关异常日志。

 kubectl -ncsdr exec -it $(kubectl -ncsdr get pod -l component=csdr | tail -n 1 | cut -d ' ' -f1) -- ./velero backup logs <backup-name>

如果您无法根据失败原因或异常日志修复问题,请提交工单处理。

备份状态为PartiallyFailed,且提示包含"PROCESS hbr partially completed"

问题现象

备份状态为PartiallyFailed,且提示包含"PROCESS hbr partially completed"。

问题原因

使用云备份服务备份文件系统类型数据(例如OSS、NAS、CPFS、本地存储卷数据等)时,部分资源备份失败。可能的原因:

  • 原因1:部分数据卷存储使用的存储插件暂未支持。

  • 原因2:云备份不保证数据一致性,备份期间若文件被删除可能导致备份失败。

解决方案

  1. 登录云备份Cloud Backup控制台

  2. 在左侧导航栏,选择备份 > 容器备份

  3. 在顶部菜单栏左上角,选择所在地域。

  4. 备份任务页签通过任务名称搜索<backup-name>-hbr,查询存储卷失败或部分失败的原因。具体操作,请参见容器服务ACK备份

转换存储类(原制作快照)状态为ConvertFailed,且提示包含"storageclass xxx not exists"

问题现象

转换存储类(原制作快照)状态为ConvertFailed,且提示包含"storageclass xxx not exists"。

问题原因

转换存储类(原制作快照)时,选择的目标存储类在当前集群中不存在。

解决方案

  1. 执行以下命令,重置转换存储类(原制作快照)任务。

    cat << EOF | kubectl apply -f -
    apiVersion: csdr.alibabacloud.com/v1beta1
    kind: DeleteRequest
    metadata:
      name: reset-convert
      namespace: csdr
    spec:
      deleteObjectName: "<backup-name>"
      deleteObjectType: "Convert"
    EOF
  2. 在当前集群中创建缺失的存储类。

  3. 重新转换存储类(原制作快照)。

转换存储类(原制作快照)状态为ConvertFailed,且提示包含"only support convert to storageclass with CSI diskplugin or nasplugin provisioner"

问题现象

转换存储类(原制作快照)状态为ConvertFailed,且提示包含"only support convert to storageclass with CSI diskplugin or nasplugin provisioner"。

问题原因

转换存储类(原制作快照)时,选择的目标存储类不是阿里云CSI云盘类型或NAS类型。

解决方案

  • 当前版本默认仅支持云盘类型、NAS类型的快照制作及恢复,若您有其他恢复需求,请联系相关支持提交工单

  • 若您使用的是阿里云OSS等支持公网访问的存储产品,请先通过静态挂载的方式创建存储声明、存储卷后直接恢复应用,无需转换存储类(原制作快照)步骤。具体请参考使用OSS静态存储卷

转换存储类(原制作快照)状态为ConvertFailed,且提示包含"current cluster is multi-zoned"

问题现象

转换存储类(原制作快照)状态为ConvertFailed,且提示包含"current cluster is multi-zoned"。

问题原因

当前集群为多可用区集群,转换为云盘类型存储类时,选择的目标存储类volumeBindingMode为Immediate。在多可用区集群使用此类型存储类会导致创建存储卷后,Pod无法调度到指定节点上而处于Pending状态。关于volumeBindingMode字段的说明,请参见存储类

解决方案

  1. 执行以下命令,重置转换存储类(原制作快照)任务。

    cat << EOF | kubectl apply -f -
    apiVersion: csdr.alibabacloud.com/v1beta1
    kind: DeleteRequest
    metadata:
      name: reset-convert
      namespace: csdr
    spec:
      deleteObjectName: "<backup-name>"
      deleteObjectType: "Convert"
    EOF
  2. 若您需要转换为云盘存储类,您可以参见如下操作。

    • 如果您通过控制台操作,请选择alicloud-diskalicloud-disk默认使用alicloud-disk-topology-alltype存储类。

    • 如果您通过命令行操作,建议您选择alicloud-disk-topology-alltype类型,alicloud-disk-topology-alltype类型为CSI存储插件默认提供的存储类。您也可以自定义volumeBindingMode为WaitForFirstConsumer的存储类。

  3. 重新转换存储类(原制作快照)。

恢复任务状态为Failed,且提示包含"only disk type PVs support cross-region restore in current version"

问题现象

恢复任务状态为Failed,且提示包含"only disk type PVs support cross-region restore in current version"。

问题原因

备份中心migrate-controller组件从v1.7.7版本开始支持云盘类型的数据备份跨地域恢复,其他类型的数据跨地域恢复暂未支持。

解决方案

  • 若您使用的是阿里云OSS等支持公网访问的存储产品,请先通过静态挂载的方式创建存储声明、存储卷后再恢复应用。具体操作,请参见使用OSS静态存储卷

  • 若您有跨地域恢复其他类型存储数据的需求,请提交工单

恢复任务状态为Failed,且提示包含"ECS snapshot cross region request failed"

问题现象

恢复任务状态为Failed,且提示包含"ECS snapshot cross region request failed"。

问题现象

备份中心migrate-controller组件从v1.7.7版本开始支持云盘类型的数据备份跨地域恢复,ECS云盘快照权限未授权。

解决方案

如果您的集群为ACK专有版集群,或接入使用ECS自建的Kubernetes集群的注册集群,您需要补充授权ECS云盘快照的相关权限策略。具体操作,请参见注册集群

恢复任务状态为Failed,且提示包含"accessMode of PVC xxx is xxx"

问题现象

恢复任务状态为Failed,且提示包含“accessMode of PVC xxx is xxx”。

问题原因

需要恢复的云盘存储卷,AccessMode设置为ReadOnlyMany(只读多挂载)或ReadWriteMany(读写多挂载)。

云盘存储卷恢复时,需通过CSI存储插件进行挂载,在当前的CSI版本中:

  • 仅支持开启了multiAttach特性的存储卷多实例挂载。

  • 其中,VolumeModeFilesystem(即使用ext4, xfs等文件系统挂载)的存储卷仅能支持只读多挂载。

更多云盘存储信息,请参考使用云盘动态存储卷

解决方案

  • 若您在使用存储类转换功能将OSS、NAS等支持多挂载类型的存储卷转换成云盘,为保持业务不同副本对存储卷的数据能正常共享,建议您新建恢复任务,选择存储类转换的目标类型为alibabacloud-cnfs-nas,使用CNFS托管的NAS存储卷,更多信息,请参见通过CNFS管理NAS文件系统(推荐)

  • 若您备份云盘存储卷创建时的CSI版本较低(未对AccessMode进行检测),备份的存储卷本身不符合当前CSI的创建要求,请您优先考虑使用云盘动态存储卷改造原业务,避免调度到其他节点时的强拔盘风险。对多挂载场景若有更多疑问或需求,请提交工单处理。

恢复任务状态为Completed,但恢复集群中有部分资源未创建

问题现象

恢复任务状态为Completed,但恢复集群中有部分资源未创建。

问题原因

  • 原因1:该资源未被备份。

  • 原因2:该资源在恢复时根据配置项被排除。

  • 原因3:应用恢复子任务部分失败。

  • 原因4:该资源已成功恢复,但由于ownerReferences配置或业务逻辑的原因被回收。

解决方案

解决方案1:

执行以下命令,查询备份详情。

 kubectl -ncsdr exec -it $(kubectl -ncsdr get pod -l component=csdr | tail -n 1 | cut -d ' ' -f1) -- ./velero describe backup <backup-name> --details

确认目标资源是否已备份。若目标资源未被备份,请确认是否因为备份任务的指定/排除命名空间、资源等配置而被排除,并重新备份。未被选择的命名空间中正在运行的应用(Pod)的Cluster级别资源默认不会备份,若您需要备份所有Cluster级别资源,请参见集群级别备份

解决方案2:

若目标资源未被恢复,请确认是否因为备份任务的指定/排除命名空间、资源等配置而被排除,并重新恢复。

解决方案3:

执行以下指令,确认失败的资源及失败原因。

 kubectl -ncsdr exec -it $(kubectl -ncsdr get pod -l component=csdr | tail -n 1 | cut -d ' ' -f1) -- ./velero describe restore <restore-name> 

根据输出中的ErrorsWarnings字段内容提示修复问题。如果您无法根据失败原因修复问题,请提交工单处理。

解决方案4:

查询对应资源的审计,确认是否在创建后被异常删除。

Flexvolume集群migrate-controller组件无法正常拉起

备份中心migrate-controller组件不支持Flexvolume类型的集群。如需使用备份中心功能,您可以通过以下方式将Flexvolume插件迁移至CSI。

若您在Flexvolume至CSI迁移过程中,需要在Flexvolume集群中进行备份并在CSI集群中恢复,请参见通过备份中心实现低版本Kubernetes集群应用迁移

备份仓库是否支持修改

备份中心不支持备份仓库的修改。如需修改备份仓库,只能删除后使用其他名称重建。

由于备份仓库是共用的,已创建的备份仓库随时可能处于备份恢复状态。此时,修改任意一个参数,都可能导致备份或恢复应用时找不到数据。因此,备份仓库不允许修改或同名重建。

备份仓库是否可以关联非"cnfs-oss-*"格式命名的OSS Bucket

对于ACK专有版集群及注册集群以外类型的集群,备份中心组件默认拥有cnfs-oss-*命名的OSS Bucket的读写权限。为避免备份覆盖Bucket中原有的数据,建议您为备份中心创建一个专用的符合cnfs-oss-*命名规则的OSS Bucket。

  1. 若您需要为备份仓库关联非"cnfs-oss-*"格式命名的OSS Bucket,需为组件配置权限。具体操作,请参见ACK专有集群

  2. 权限配置完成后,执行以下命令,重启备份服务组件。

    kubectl -ncsdr delete pod -l control-plane=csdr-controller
    kubectl -ncsdr delete pod -l component=csdr

    若您已经创建了关联非"cnfs-oss-*"格式命名的OSS Bucket的备份仓库,可等待连通性检测完成,状态变为Available后,再尝试备份或恢复,连通性检测的间隔时间约为五分钟。您可以通过以下命令查询备份仓库的状态。

    kubectl -ncsdr get backuplocation

    预期输出:

    NAME                    PHASE       LAST VALIDATED   AGE
    a-test-backuplocation   Available   7s               6d1h

创建备份计划时,备份周期如何填写

备份周期支持Crontab表达式(例如1 4 * * *);或按间隔备份填写(例如6h30m),即每隔6h30m备份一次。

Crontab表达式解析如下,可选值(minute的可选值为0-59)除外,*表示给定字段的任意可用值。以下表达式中:

  • 1 4 * * *:表示每天4:01 am备份一次。

  • 0 2 15 * 1:表示每个月15号的2:00 AM备份一次。

 *  *  *  *  * 
 |  |  |  |  |
 |  |  |  |  ·----- day of week (0 - 6) (Sun to Sat)
 |  |  |  ·-------- month (1 - 12) 
 |  |  .----------- day of month (1 - 31)
 |  ·-------------- hour (0 - 23) 
 ·----------------- minute (0 - 59)  
 

恢复任务时,对备份的YAML资源会有哪些默认的调整?

恢复任务时,YAML资源会做以下调整:

调整1

若云盘类型的存储卷容量小于20 GiB,则恢复时将调整为20 GiB。

调整2

Service资源恢复时,根据Service类型的不同将进行如下适配:

  • NodePort类型的Service:跨集群恢复时,默认保留端口号。

  • LoadBalancer类型的Service:ExternalTrafficPolicy为Local时,HealthCheckNodePort默认使用随机端口号。若您需要保留端口号,请在创建恢复任务时,设置spec.preserveNodePorts: true

    • 在备份集群中由指定已有SLB的Service,恢复时将使用原有的SLB并默认关闭强制监听,您需要前往SLB控制台配置监听。

    • 在备份集群中由CCM管理SLB的Service,恢复时将由CCM创建新的SLB实例,更多信息,请参见Service的负载均衡配置注意事项

如何查看备份的具体资源?

集群应用备份的资源

集群中的YAML存储在备份仓库关联的OSS Bucket中。您可以通过以下任一方式查看具体的备份资源。

  • 在任意同步备份的集群中,执行以下命令查看资源。

    kubectl -ncsdr get pod -l component=csdr | tail -n 1 | cut -d ' ' -f1
    kubectl -ncsdr exec -it csdr-velero-xxx -cvelero -- ./velero describe backup <backup-name> --details
  • 通过容器服务控制台查看。

    1. 登录容器服务管理控制台,在左侧导航栏选择集群

    2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择运维管理 > 应用备份

    3. 应用备份页面,单击备份记录页签,在备份记录列单击待查看的目标备份记录。

云盘存储卷备份的资源

  1. 登录ECS管理控制台

  2. 在左侧导航栏,选择存储与快照 > 快照

  3. 在页面左侧顶部,选择目标资源所在的资源组和地域。地域

  4. 在快照页面,根据云盘ID查询快照。

非云盘存储卷备份的资源

  1. 登录云备份Cloud Backup控制台

  2. 在左侧导航栏,选择备份 > 容器备份

  3. 在顶部菜单栏左上角,选择所在地域。

  4. 查看容器备份。

    • 集群列表:展示已进行备份保护的集群列表。单击ACK集群ID可查看已保护的存储卷声明。更多介绍,请参见存储卷声明

      如果客户端状态显示异常,则说明云备份服务在容器服务集群中运行异常。请前往容器服务管理控制台守护进程集,进行定位处理。image

    • 备份任务:展示备份任务的运行状态。

      image

是否支持在低版本集群备份至高版本集群恢复?

支持。

备份时,默认备份资源所有支持的apiVersion版本。例如1.16版本集群Deployment支持extensions/v1beta1、apps/v1beta1、apps/v1beta2以及apps/v1,备份仓库中将存储Deployment的4种版本(与您部署时选用的版本无关,底层使用KubernetesConvert功能)。

恢复时,资源将优先按照恢复集群版本推荐的apiVersion进行恢复。例如1.28版本集群Deployment推荐版本为apps/v1,上述备份将恢复至apps/v1版本的Deployment。

重要

若某资源在两个版本中没有同时支持的apiVersion版本,恢复时您需要手动部署。例如1.16版本集群Ingress支持extensions/v1beta1、networking.k8s.io/v1beta1,无法将其直接恢复至1.22及以上版本集群(需要networking.k8s.io/v1)。更多kubernetes官方API版本迁移请参考官方文档。由于apiVersion兼容问题,不建议您通过备份中心将高版本集群中的应用迁移至低版本的集群中,也不建议备份1.16以下版本的集群迁移至高版本的集群。

恢复时是否会自动切换负载均衡流量?

不会。

Service资源恢复时,根据Service类型的不同将进行如下适配:

  • NodePort类型的Service:跨集群恢复时,默认保留端口号。

  • LoadBalancer类型的Service:ExternalTrafficPolicy为Local时,HealthCheckNodePort默认使用随机端口号。若您需要保留端口号,请在创建恢复任务时,设置spec.preserveNodePorts: true

    • 在备份集群中由指定已有SLB的Service,恢复时将使用原有的SLB并默认关闭强制监听,您需要前往SLB控制台配置监听。

    • 在备份集群中由CCM管理SLB的Service,恢复时将由CCM创建新的SLB实例,更多信息,请参见Service的负载均衡配置注意事项

默认情况下,关闭强制监听或使用新的SLB实例不会切换备份集群的流量。若您使用了其他云产品或三方的服务发现,且不希望由自动服务发现将流量切到新的SLB实例,可以考虑在备份时排除Service资源,当需要切换时,再切换为手动部署。

为什么默认不支持备份csdr,kube-system, kube-public,kube-node-lease这四个命名空间下的资源?

csdr为备份中心的工作命名空间,直接备份恢复会导致组件在恢复集群工作异常。此外,备份中心有备份同步的逻辑,您无需手动迁移备份至新集群。

kube-system、kube-public、kube-node-lease为Kubernetes集群的默认系统命名空间,由于集群参数、配置等不同,无法在集群之间简单恢复。此外备份中心关注业务应用的备份和恢复。在恢复任务之前,您需要在恢复集群中预先安装并配置好所需的系统组件。例如:

  • ACR免密组件:为恢复集群重新授权并配置acr-configuration。

  • ALB Ingress组件:预先配置ALBConfig等。

而不能直接备份kube-system的系统组件至新集群,可能导致系统组件运行异常。

备份中心对云盘的数据都使用ECS云盘快照备份吗?快照默认的类型是什么?

在以下场景下,备份中心会默认使用ECS云盘快照对云盘的数据进行备份。

  1. 集群为ACK托管集群ACK专有集群

  2. 集群版本为1.18及以上版本,且集群使用1.18及以上版本的CSI存储插件。

其他情况下,备份中心默认使用云备份(Cloud Backup)对云盘的数据进行备份。

由备份中心创建的云盘快照默认开启极速可用功能,快照有效期默认与备份配置的有效期一致。阿里云ECS快照自2023年10月12日11:00起,全地域范围不再收取快照极速可用存储费和快照极速可用次数费。更多信息,请参见快照极速可用能力

为什么由备份创建的ECS云盘快照的有效期与备份配置的不一致?

云盘快照的创建依赖于集群的csi-provisioner组件(或managed-csiprovisioner组件)。当csi-provisioner组件低于1.20.6版本时,不支持在创建快照的相关资源(VolumeSnapshot)时指定有效期或开启快照极速可用功能。此时,将导致备份配置的有效期对ECS云盘快照不生效。

因此,在使用云盘的存储卷数据备份功能时,您需要将csi-provisioner组件升级至1.20.6及以上的版本。

若您的集群无法升级至该版本的csi-provisioner,您可以通过以下方式配置默认的快照有效期:

  1. 将备份中心组件migrate-controller升级至v1.7.10及以上版本。

  2. 使用以下命令,确认集群中是否存在配置默认30天快照有效期的快照类。

    kubectl get volumesnapshotclass csdr-disk-snapshot-with-default-ttl
    • 若不存在,使用以下YAML创建csdr-disk-snapshot-with-default-ttl快照类。

    • 若已存在,只需将默认csdr-disk-snapshot-with-default-ttl快照类中的retentionDays设置为30。

      apiVersion: snapshot.storage.k8s.io/v1
      deletionPolicy: Retain
      driver: diskplugin.csi.alibabacloud.com
      kind: VolumeSnapshotClass
      metadata:
        name: csdr-disk-snapshot-with-default-ttl
      parameters:
        retentionDays: "30"
  3. 配置后,该集群创建的所有涉及云盘存储卷的备份都将创建与以上retentionDays字段一致的云盘快照。

    重要

    如果您一直希望由备份创建的ECS云盘快照的有效期与备份配置的一致,建议您还是需要将csi-provisioner组件升级至1.20.6及以上的版本。

什么场景适合备份存储卷数据,以及哪些行为会备份存储卷数据?

什么是备份存储卷数据?

通过ECS云盘快照或HBR云备份服务,拷贝涉及的存储卷内的数据至云端存储,并在恢复时将数据存入新的云盘或NAS中,供恢复的应用使用。恢复的应用与原应用不共享数据源,互不影响。

若您无需拷贝数据,或者有共享数据源的需求,您可以选择不备份数据卷数据,并保证备份中的排除资源列表不包含PVC、PV资源,恢复时将直接按存储卷原来的YAML部署至新集群。

什么场景适合备份存储卷数据?

  • 数据容灾和版本记录。

  • 存储类型为云盘,因为普通云盘只能被挂载至单一节点。

  • 跨地域备份恢复,通常除OSS存储类型外,均无跨地域访问能力。

  • 备份应用与恢复应用的数据需要隔离。

  • 备份集群与恢复集群的存储插件或版本差异较大,YAML无法直接恢复。

对有状态应用,未备份存储卷数据可能会有哪些风险?

若在备份时未备份存储卷数据,且备份中包含有状态应用,恢复时的行为是:

  • 对回收策略为Delete的存储卷:

    类似初次部署PVC,若在恢复集群有对应存储类,则由CSI自动创建新的PV。以云盘存储为例,即会为恢复的应用挂载新建的无数据云盘。对未设置存储类的静态存储卷,或恢复集群未有对应存储类,则恢复的PVC与Pod均处于Pending状态,直到手动创建对应的PV或存储类。

  • 对回收策略为Retain的存储卷:

    恢复时将按先PV再PVC顺序按原YAML文件恢复。对NAS、OSS等支持多挂载的存储,能直接复用原FileSystem、Bucket。对云盘,可能有被强拔的风险。

可通过以下指令,查询存储卷的回收策略:

kubectl get pv -o=custom-columns=CLAIM:.spec.claimRef.name,NAMESPACE:.spec.claimRef.namespace,NAME:.metadata.name,RECLAIMPOLICY:.spec.persistentVolumeReclaimPolicy

预期输出:

CLAIM               NAMESPACE           NAME                                       RECLAIMPOLICY
www-web-0           default             d-2ze53mvwvrt4o3xxxxxx                     Delete
essd-pvc-0          default             d-2ze5o2kq5yg4kdxxxxxx                     Delete
www-web-1           default             d-2ze7plpd4247c5xxxxxx                     Delete
pvc-oss             default             oss-e5923d5a-10c1-xxxx-xxxx-7fdf82xxxxxx   Retain

哪些行为会备份存储卷数据?

  • 通过控制台备份时,选中备份存储卷选项。

  • 通过kubectl备份时,将spec.pvBackup.defaultPvBackup设置为true

应用备份和数据保护的适用场景有哪些?

应用备份:

  • 备份目标是集群中运行的业务,包括应用、服务、配置文件等集群中的资源。

  • 可以同时备份应用挂载的存储卷中的数据(可选)。

    说明

    在应用备份中,未被任何Pod挂载的存储卷数据不会被备份。

    如需备份应用及所有存储卷数据,您可以配合创建数据保护类型备份。

  • 用于实现集群的迁移,以及容灾场景下应用的快速恢复。

数据保护(新增):

  • 备份目标是存储卷数据,资源仅包括存储声明与存储卷。

  • 恢复的目标为可直接被应用挂载的存储声明,其中指向的数据与备份数据是独立的。如果存储声明被意外删除后,通过备份中心恢复时,将创建新的云盘,其数据与备份时一致。该存储声明除指向的云盘实例变更外,其余挂载参数不变,应用能直接挂载恢复出的存储声明。

  • 用于实现数据复制与数据容灾。

备份中心是否支持对关联的OSS Bucket开启数据加密?开启KMS服务端加密时,如何追加相关权限?

OSS Bucket的数据加密方式分为服务端加密和客户端加密,目前备份中心仅支持OSS Bucket的服务端加密方式,您可以通过OSS控制台等方式手动为您绑定的Bucket开启服务端加密,并配置加密方式。更多关于OSS Bucket的服务端加密信息及操作流程,请参见服务器端加密

  • 若您使用KMS托管密钥进行加解密,并使用自带密钥BYOK,即配置指定了具体的CMK ID。您需要为备份中心追加KMS的部分权限,具体步骤为:

    • 创建如下的自定义权限策略。具体操作,请参见创建自定义权限策略

      {
        "Version": "1",
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "kms:List*",
              "kms:DescribeKey",
              "kms:GenerateDataKey",
              "kms:Decrypt"
            ],
            "Resource": [
              "acs:kms:*:141661496593****:*"
            ]
          }
        ]
      }

      以上权限策略表示允许调用该阿里云账号ID下所有的KMS密钥。若您有更细粒度的Resource配置需求,请参见授权信息

    • 对ACK专有版集群和注册集群,为安装时使用的RAM用户授权,具体操作,请参见为RAM用户授权。对其他集群,为AliyunCSManagedBackupRestoreRole角色授权,具体操作,请参见为RAM角色授权

  • 若您使用OSS默认托管的KMS密钥使用OSS完全托管密钥进行加解密,无需额外授权。

恢复时如何调整备份中应用使用的镜像?

假设备份中应用使用的镜像为:docker.io/library/app1:v1

  • 修改镜像仓库地址 (registry)

    在混合云场景中,跨云服务厂商部署应用或IDC应用上云的前置条件通常包括涉及的镜像上云,即上传镜像至阿里云容器镜像服务ACR的仓库中。

    针对此类需求,您可以通过镜像仓库地址映射(imageRegistryMapping字段)配置。如通过以下配置实现将镜像调整为registry.cn-beijing.aliyuncs.com/my-registry/app1:v1

    docker.io/library/: registry.cn-beijing.aliyuncs.com/my-registry/
  • 修改镜像仓库 (repositry)、版本等

    此类调整属于高级配置,需要在恢复前先在ConfigMap中定义调整策略。

    假定需要调整镜像的仓库至app2:v2,可创建以下配置:

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: <配置名称>
      namespace: csdr
      labels:
        velero.io/plugin-config: ""
        velero.io/change-image-name: RestoreItemAction
    data:
      "case1":"app1:v1,app2:v2"
      # 如只希望变更repositry
      # "case1": "app1,app2"
      # 如只希望变更版本
      # "case1": "v1:v2"
      # 如只希望变更某个registry下的镜像
      # "case1": "docker.io/library/app1:v1,registry.cn-beijing.aliyuncs.com/my-registry/app2:v2"

    如有多项调整需求,可在data中继续配置case2, case3 ...

    创建成功后,正常创建恢复任务,且imageRegistryMapping字段为空

    说明

    修改配置对集群所有的恢复任务生效,请参考以上注释尽量配置更精细的调整策略,如限制调整的范围到某个registry下。若不再需要使用,请及时删除配置。