文档

备份中心FAQ

更新时间:

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

索引

类别

问题

获取报错信息

通用操作

控制台

通用

备份

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

恢复

其他

通用操作

说明

若您通过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-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不在同一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"。

问题原因

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

解决方案

修改备份集群中备份子任务超时时间的全局配置。

执行以下命令,在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

备份状态为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,查询备份任务的状态及对应原因。具体操作,请参见查看容器备份

      说明

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

备份状态为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字段内容提示修复问题。如果您无法根据失败原因修复问题,请提交工单处理。

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

问题现象

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

问题原因

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

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

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

解决方案

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

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

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

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

转换存储类(原制作快照)状态为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云盘快照的相关权限策略。具体操作,请参见注册集群

恢复任务状态为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

    若您已经创建了关联非"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可查看已保护的存储卷声明。更多介绍,请参见存储卷声明

    备份任务

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

  5. 如果需要浏览备份文件,在目标ACK集群的操作列,单击查看已保护的存储声明,然后操作如下:

    1. 存储声明详情页面,单击目标存储声明前的加号。

    2. 单击选择合适的备份历史时间点。

    3. 单击时间点后的浏览

      浏览面板,系统自动显示已备份的资源列表。浏览

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

支持。

备份时,默认备份资源所有支持的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部署至新集群。

重要

若备份集群与恢复集群的存储插件不一致,将无法按存储卷原来的YAML部署,解决方案请参见Flexvolume应用迁移至CSI应用。具体操作,请参见通过备份中心实现低版本Kubernetes集群应用迁移

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

  • 数据容灾和版本记录。

  • 存储类型为云盘,因为普通云盘只能被挂载至单一节点,若直接用原YAML部署至新集群,可能有被强拔的风险。

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

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

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

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

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

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

  • 本页导读 (1)