本文介绍使用备份中心时遇到的常见问题及其解决方案。
索引
| 类别 | 问题 | 
| 获取报错信息 | |
| 控制台 | |
| 通用 | |
| 备份 | |
| 存储类转换 (恢复期间的可选步骤) | |
| 恢复 | |
| 其他 | 
通用操作
若您通过kubectl命令行工具使用备份中心,在问题排查之前,请先将备份服务组件migrate-controller升级至最新版本,组件升级不会影响已有的备份。关于升级操作,请参见管理组件。
当您的备份任务、存储类转换、恢复任务的状态为Failed或PartiallyFailed时,您可以通过以下方式获取相关报错提示信息。
- 将鼠标悬浮至任务状态列的Failed或PartiallyFailed上,获取错误的概况信息,例如 - RestoreError: snapshot cross region request failed。 
- 如需获取更详细的错误信息,您可以执行以下命令查询任务对应资源的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实现集群应用的备份和恢复。 
- 检查csdr命名空间下的无状态应用csdr-controller和csdr-velero是否因为资源、调度限制等原因无法正常部署,确认问题并进行修复。 
控制台界面提示已存在同名的资源,请修改名称后再试
问题现象
在创建或删除备份、存储类转换、恢复任务时,控制台界面提示已存在同名的资源,请修改名称后再试。
问题原因
在控制台删除任务时,将在集群中创建deleterequest资源,由工作组件进行系列删除操作,不仅仅删除对应的备份资源。关于命令行操作也类似,请参见通过命令行工具实现备份和恢复。
如果删除操作错误或在处理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 -n csdr 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用户(子账号)登录,请单击请复制授权链接,然后发送给阿里云账号完成授权。 
控制台界面提示当前账号未被授予该操作所需的集群RBAC权限
问题现象
在进入应用备份控制台时,界面提示当前账号未被授予该操作所需的集群RBAC权限,请联系主账号或权限管理员授权。错误码为APISERVER.403
问题原因
控制台通过与apiserver交互下发备份恢复等任务,并实时获取任务状态。默认的集群运维人员、开发者权限列表中缺少部分备份中心组件所需权限,需要主账号或权限管理员完成授权。
解决方案
参考使用自定义RBAC限制集群内资源操作,为备份中心操作人员授权以下ClusterRole权限
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: csdr-console
rules:
  - apiGroups: ["csdr.alibabacloud.com","velero.io"]
    resources: ['*']
    verbs: ["get","create","delete","update","patch","watch","list","deletecollection"]
  - apiGroups: [""]
    resources: ["namespaces"]
    verbs: ["get","list"]
  - apiGroups: ["storage.k8s.io"]
    resources: ["storageclasses"]
    verbs: ["get","list"]备份中心组件升级或卸载失败
问题现象
备份中心组件升级或卸载失败,且csdr命名空间一直处于Terminating状态。
问题原因
备份中心组件在运行中因为异常退出等原因,导致在csdr命名空间中遗留了卡在InProgress状态的任务,这些任务对应集群资源的finalizers字段可能导致资源无法被顺利删除,从而导致csdr命名空间一直处于Terminating状态。
解决方案
- 执行以下指令,查询csdr命名空间处于Terminating的原因: - kubectl describe ns csdr- 确认卡住的任务不再需要,删除其对应的 - finalizers。
- 确认csdr命名空间已删除后: - 对于组件升级场景,可重新安装备份中心组件migrate-controller。 
- 对于组件卸载场景,组件应已卸载完成。 
 
任务状态为Failed,且提示包含"internal error"
问题现象
任务状态为Failed,且提示包含"internal error"。
问题原因
组件或底层依赖云产品出现非预期异常,例如云产品未在当前地域开服。
解决方案
若提示为"HBR backup/restore internal error",可先前往云备份控制台确认容器备份是否已开服。
任务状态为Failed,且提示包含"create cluster resources timeout"
问题现象
任务状态为Failed,且提示包含"create cluster resources timeout"。
问题原因
存储类转换或恢复任务期间,可能会创建临时Pod、存储声明、存储卷等资源,这些资源创建后若长时间未可用,将会提示"create cluster resources timeout"错误信息。
解决方案
- 执行以下命令,通过Event快速定位异常的资源及失败原因。 - kubectl -n csdr 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。
- 执行以下命令,查询存储声明的状态及异常原因。 - 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网络访问不通。 
解决方案
- 登录OSS管理控制台,确认备份仓库绑定的OSS Bucket已存在。 - 若OSS Bucket缺失,请创建Bucket并重新绑定。具体操作,请参见控制台创建存储空间。 
- 确认集群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。 
- 使用以下命令,确认集群相关网络配置。 - 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内网网段的路由。 - 关于线下IDC接入云上VPC的相关内容,请参见接入方式介绍。 
- 关于OSS内网域名与VIP网段对照表,请参见OSS内网域名与VIP网段对照表。 
 
 - 如果必须通过公网访问OSS Bucket时,您可以使用以下命令,将OSS Bucket的访问方式修改为公网访问。以下代码中 - <backuplocation-name>为备份仓库的名称,- <region-id>为OSS Bucket所在的地域,例如cn-hangzhou。- kubectl patch -n csdr backuplocation/<backuplocation-name> --type='json' -p '[{"op":"add","path":"/spec/config","value":{"network":"public","region":"<region-id>"}}]' kubectl patch -n csdr backupstoragelocation/<backuplocation-name> --type='json' -p '[{"op":"add","path":"/spec/config","value":{"network":"public","region":"<region-id>"}}]'
任务状态为Failed,且提示包含"HBRError: check HBR vault error"
问题现象
备份、恢复或存储类转换任务状态为Failed,且提示包含"HBRError: check HBR vault error"。
问题原因
云备份服务未开通或授权异常。
解决方案
- 确认已开通云备份服务,请参考开通云备份。 
- 若您的集群位于华北6(乌兰察布)、华南2(河源)或华南3(广州)等地域,需要在开通云备份服务后额外授权API网关使用权限,请参考(可选)步骤三:为云备份服务授权API网关使用权限。 
- 若您的集群为ACK专有版集群或注册集群,确认已授权相关云备份RAM权限。具体权限内容及授权方式请参考安装migrate-controller备份服务组件并配置权限。 
任务状态为Failed,且提示包含"HBRError: ... code: 400, Illegal request. Please modify the parameters"
问题现象
备份、恢复或存储类转换任务状态为Failed,且提示包含"HBRError: ... code: 400, Illegal request. Please modify the parameters"。
问题原因
位于任务失败的集群所在地域的云备份服务存储库ack-backup-data被删除。
在某个地域初次使用备份中心备份时,组件将自动在该地域创建固定名称为ack-backup-data的存储库,用于存放通过备份中心创建的备份。备份将根据创建时设定的备份有效期,过期自动清除。
解决方案
云备份服务存储库被删除后,此前创建的备份将无法用于恢复。以下步骤只能创建出新的云备份服务存储库用于后续的备份恢复任务。
- 在当前地域的所有使用了备份中心的集群中执行以下指令,清理初始化过的备份仓库记录。 - kubectl -ncsdr delete backuplocation --all kubectl -ncsdr delete backupstoragelocation --all
- 回到需要备份的集群,正常创建备份,组件将自动创建ack-backup-data云备份服务存储库,并关联至备份仓库。 
任务状态为Failed,且提示包含"hbr task finished with unexpected status: FAILED, errMsg ClientNotExist"
问题现象
备份、恢复或存储类转换任务状态为Failed,且提示包含hbr task finished with unexpected status: FAILED, errMsg ClientNotExist
问题原因
云备份客户端在对应节点部署异常,即csdr命名空间下DaemonSet hbr-client在该节点副本运行异常。
解决方案
- 执行以下指令,确认集群中是否有运行异常的hbr-client - kubectl -n csdr get pod -lapp=hbr-client
- 若有处于异常状态的Pod,先检查是否由Pod IP、内存、CPU等资源不足导致。若Pod的状态为CrashLoopBackOff,执行以下指令,查询对应日志。 - kubectl -n csdr logs -p <hbr-client-pod-name>- 若输出包含"SDKError:\n StatusCode: 403\n Code: MagpieBridgeSlrNotExist\n Message: code: 403, AliyunServiceRoleForHbrMagpieBridge doesn't exist, please create this role. ",请参考(可选)步骤三:为云备份服务授权API网关使用权限,为云备份服务授权。 
- 如果日志输出包含其他类型的SDK错误,可通过返回中的EC错误码 (Error - Code) 排查,请参考使用EC错误码自助排查。 
任务长期处于InProgress状态
原因1及解决方案:csdr命名空间中组件运行异常
确认组件运行状态,并查询组件异常原因。
- 执行以下命令,查询csdr命名空间中的组件是否出现重启或无法启动的情况。 - kubectl get pod -n csdr
- 执行以下命令,查询组件重启或无法启动的原因。 - kubectl describe pod <pod-name> -n csdr
若原因是OOM异常重启
- 若OOM异常发生在恢复期间,Pod为csdr-velero-***,且恢复集群当前已运行大量应用,如数十个生产命名空间。OOM异常出现的原因可能为,Velero默认会使用Informer Cache为恢复流程提速,Cache将占用部分内存。 - 若需要恢复的集群资源数目不多,或能接受恢复时有一定的性能影响,可通过以下命令关闭Informer Cache功能。 - kubectl -nkube-system edit deploy migrate-controller- 在migrate-controller容器的 - args中,新增参数- --disable-informer-cache=true,即:- name: migrate-controller args: - --disable-informer-cache=true
- 对于其他情况,或不希望降低集群资源恢复速度,可执行以下命令,调整对应Deployment的Limit值。 - 其中, - csdr-controller-***对应- <deploy-name>为- csdr-controller;- csdr-velero-***对应- <deploy-name>为- csdr-velero。- kubectl patch deploy <deploy-name> -p '{"spec":{"containers":{"resources":{"limits":"<new-limit-memory>"}}}}'
若原因是HBR权限未配置导致拉起失败
- 确认集群已开通云备份服务。 - 未开通:请开通云备份服务。具体操作,请参见云备份。 
- 已开通:请转下一步。 
 
- 确认ACK专有版集群和注册集群已配置云备份权限。 - 未配置:请配置云备份权限。具体操作,请参见安装备份服务组件并配置权限。 
- 已配置:请转下一步。 
 
- 执行以下命令,确认云备份 Client组件所需Token是否存在。 - kubectl describe <hbr-client-***>- 若Event报错提示couldn't find key HBR_TOKEN,表明Token缺失,请参见以下步骤处理。 - 执行以下命令,查询对应 - hbr-client-***所在节点。- kubectl get pod <hbr-client-***> -n csdr -owide
- 执行以下命令,将对应Node的 - labels: csdr.alibabacloud.com/agent-enable由- true修改为- 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>  ...若所有的volumesnapshot的READYTOUSE长期处于false状态,请参见如下步骤处理。
- 登录ECS管理控制台,确认是否已开启云盘快照服务。 - 未开启:请在对应地域开通云盘快照。具体操作,请参见开通快照。 
- 已开启:请转下一步。 
 
- 确认集群CSI组件运行正常。 - kubectl -nkube-system get pod -l app=csi-provisioner
- 确认是否已配置云盘快照的使用权限。 - 托管集群- 使用RAM管理员登录RAM控制台。 
- 在左侧导航栏,选择。 
- 在角色页面,在搜索框中搜索AliyunCSManagedBackupRestoreRole,查询该角色的授权策略中是否包含以下策略内容。 - { "Statement": [ { "Effect": "Allow", "Action": [ "hbr:CreateVault", "hbr:CreateBackupJob", "hbr:DescribeVaults", "hbr:DescribeBackupJobs2", "hbr:DescribeRestoreJobs", "hbr:SearchHistoricalSnapshots", "hbr:CreateRestoreJob", "hbr:AddContainerCluster", "hbr:DescribeContainerCluster", "hbr:CancelBackupJob", "hbr:CancelRestoreJob", "hbr:DescribeRestoreJobs2" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "ecs:CreateSnapshot", "ecs:DeleteSnapshot", "ecs:DescribeSnapshotGroups", "ecs:CreateAutoSnapshotPolicy", "ecs:ApplyAutoSnapshotPolicy", "ecs:CancelAutoSnapshotPolicy", "ecs:DeleteAutoSnapshotPolicy", "ecs:DescribeAutoSnapshotPolicyEX", "ecs:ModifyAutoSnapshotPolicyEx", "ecs:DescribeSnapshots", "ecs:DescribeInstances", "ecs:CopySnapshot", "ecs:CreateSnapshotGroup", "ecs:DeleteSnapshotGroup" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "oss:PutObject", "oss:GetObject", "oss:DeleteObject", "oss:GetBucket", "oss:ListObjects", "oss:ListBuckets", "oss:GetBucketStat" ], "Resource": "acs:oss:*:*:cnfs-oss*" } ], "Version": "1" }
 - 专有集群- 登录容器服务管理控制台,在左侧导航栏单击集群。 
- 在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择集群信息。 
- 在集群信息页面找到Master RAM 角色参数,然后单击右侧链接。 
- 在权限管理页签中,查看云盘快照权限是否正常。 - 若k8sMasterRolePolicy-Csi-***权限策略不存在或不包含以下权限,请为Master RAM角色授予如下云盘快照权限策略。具体操作,请参见创建自定义权限策略和为RAM角色授权。 - { "Statement": [ { "Effect": "Allow", "Action": [ "hbr:CreateVault", "hbr:CreateBackupJob", "hbr:DescribeVaults", "hbr:DescribeBackupJobs2", "hbr:DescribeRestoreJobs", "hbr:SearchHistoricalSnapshots", "hbr:CreateRestoreJob", "hbr:AddContainerCluster", "hbr:DescribeContainerCluster", "hbr:CancelBackupJob", "hbr:CancelRestoreJob", "hbr:DescribeRestoreJobs2" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "ecs:CreateSnapshot", "ecs:DeleteSnapshot", "ecs:DescribeSnapshotGroups", "ecs:CreateAutoSnapshotPolicy", "ecs:ApplyAutoSnapshotPolicy", "ecs:CancelAutoSnapshotPolicy", "ecs:DeleteAutoSnapshotPolicy", "ecs:DescribeAutoSnapshotPolicyEX", "ecs:ModifyAutoSnapshotPolicyEx", "ecs:DescribeSnapshots", "ecs:DescribeInstances", "ecs:CopySnapshot", "ecs:CreateSnapshotGroup", "ecs:DeleteSnapshotGroup" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "oss:PutObject", "oss:GetObject", "oss:DeleteObject", "oss:GetBucket", "oss:ListObjects", "oss:ListBuckets", "oss:GetBucketStat" ], "Resource": "acs:oss:*:*:cnfs-oss*" } ], "Version": "1" }
 - 注册集群- 仅节点均为阿里云ECS的注册集群时,才能使用云盘快照功能。请检查安装CSI存储插件时是否已进行相关授权。相关操作,请参见为CSI组件配置RAM权限。 
原因3及解决方案:使用除云盘外的其他类型存储卷
备份中心migrate-controller组件从v1.7.7版本开始,支持云盘类型数据备份跨地域恢复,其他类型数据跨地域恢复暂未支持。若您使用的是阿里云OSS等支持公网访问的存储产品,可先静态创建存储声明、存储卷后再恢复应用。具体操作,请参考使用ossfs 1.0静态存储卷。
备份状态为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 -n csdr cm csdr-config- 例如,需要将超时时间设置为100分钟,则需要进行如下修改: - apiVersion: v1 data: applicationBackup: | ... #省略展示 velero_timeout_minutes: 100- 修改完成后,执行以下命令重启以使csdr-controller生效。 - kubectl -n csdr 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等Kubernetes通用的存储卷,遇到兼容问题,请提交工单处理。 
- 解决方案2:通常只有云盘存储需要使用Block模式的存储卷。集群存储插件为CSI时,默认使用云盘快照方式进行数据备份,云盘快照支持Block模式存储卷的备份。若您是因为存储插件类型不符,可先切换存储插件为CSI后,重新安装备份组件,再进行备份。 
- 解决方案3:请按照以下步骤处理: - 在左侧导航栏,选择备份 > 容器备份,然后单击备份任务页签。 
- 在顶部菜单栏左上角,选择所在地域。 
- 在备份任务页签,单击搜索框前面的下拉菜单并选择任务名称,然后搜索 - <backup-name>-hbr,查询备份任务的状态及对应原因。更多信息,请参见容器服务ACK备份。说明- 若需要查询存储类转换或备份任务,请使用对应的备份名称搜索。 
 
备份状态为Failed,且提示包含"hbr task finished with unexpected status: FAILED, errMsg SOURCE_NOT_EXIST"
问题现象
备份状态为Failed,且提示包含"hbr task finished with unexpected status: FAILED, errMsg SOURCE_NOT_EXIST"。
问题原因
- 对于其他云厂商的CSI,或自建的NFS、Ceph等存储类型: - 在混合云场景中,备份中心默认使用Kubernetes标准的存储卷挂载路径作为数据备份路径。如对标准CSI存储驱动,挂载路径默认为 - /var/lib/kubelet/pods/<pod-uid>/volumes/kubernetes.io~csi/<pv-name>/mount,NFS、FlexVolume等 Kubernetes官方支持的存储驱动同理。- 其中 - /var/lib/kubelet为默认的kubelet根路径,若您的 Kubernetes集群修改了此路径,可能会导致云备份服务无法访问待备份的数据。
- 对于HostPath存储类型: - HostPath类型存储并不会在kubelet根路径下创建挂载路径,而是Pod直接挂载指定的节点路径。默认情况下备份组件无法读取节点路径上的数据,因此备份失败。 
解决方案
- 对于其他云厂商的CSI,或自建NFS、Ceph等存储类型: - 登录挂载了存储卷的节点,按以下步骤进行排查: - 查询节点的kubelet的根路径是否有变更 - 执行以下指令,查询kubelet启动指令 - ps -elf | grep kubelet- 若启动指令中带参数 - --root-dir,则该参数值为kubelet的根路径。- 若启动指令中带参数 - --config,参数值为kubelet的配置文件。查询配置文件,若包含- root-dir字段,则该参数值为kubelet的根路径。
- 若启动指令中未包含根路径信息,查询kubelet服务的启动文件 - /etc/systemd/system/kubelet.service内容,若包含EnvironmentFile字段,如:- EnvironmentFile=-/etc/kubernetes/kubelet- 即环境变量配置文件为 - /etc/kubernetes/kubelet。查询配置文件内容,若包含以下内容:- ROOT_DIR="--root-dir=/xxx"- 则/xxx为kubelet的根路径。 
- 若均未查询到相关变更,则kubelet根路径为默认的 - /var/lib/kubelet。
 
- 执行以下指令,查询kubelet根路径是否为其他路径的软链接: - ls -al <root-dir>- 若包含类似输出: - lrwxrwxrwx 1 root root 26 Dec 4 10:51 kubelet -> /var/lib/container/kubelet- 则实际根路径为 - /var/lib/container/kubelet。
- 验证根路径下有备份目标存储卷的数据。 - 确认存储卷挂载路径 - <root-dir>/pods/<pod-uid>/volumes存在,且底下存在目标类型的存储卷子路径,如- kubernetes.io~csi、- kubernetes.io~nfs等。
- 为无状态应用csdr/csdr-controller追加ENV - KUBELET_ROOT_PATH = /var/lib/container/kubelet/pods。其中- /var/lib/container/kubelet为此前通过查询配置与软链接获得的实际kubelet根路径。
 
- 对于HostPath存储类型: - 请提交工单处理。 
备份状态为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用户鉴权凭证被吊销。 
解决方案
- 解决方案2:确认配置权限时使用的RAM用户的权限策略,组件所需权限策略请参见步骤一:配置相关权限。 
- 解决方案3:确认配置权限时使用的RAM用户的鉴权凭证是否处于启用状态。若被吊销,请重新获取鉴权凭证并更新csdr命名空间下Secret - alibaba-addon-secret的内容,并执行以下操作重启组件:- kubectl -nkube-system delete pod -lapp=migrate-controller
备份状态为PartiallyFailed,且提示包含"PROCESS velero partially completed"
问题现象
备份状态为PartiallyFailed,且提示包含"PROCESS velero partially completed"。
问题原因
使用velero组件备份应用(集群内资源)时,部分资源备份失败。
解决方案
执行以下命令,确认失败的资源及失败原因。
 kubectl -n csdr exec -it $(kubectl -n csdr get pod -l component=csdr | tail -n 1 | cut -d ' ' -f1) -- ./velero describe backup <backup-name>根据输出中的Errors和Warnings字段内容提示修复问题。
若无直接显示失败原因,执行以下命令以获取相关异常日志。
 kubectl -n csdr exec -it $(kubectl -n csdr 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:云备份不保证数据一致性,备份期间若文件被删除可能导致备份失败。 
解决方案
- 在左侧导航栏,选择备份 > 容器备份,然后单击备份任务页签。 
- 在顶部菜单栏左上角,选择所在地域。 
- 在备份任务页签,单击搜索框前面的下拉菜单并选择任务名称,然后搜索 - <backup-name>-hbr,查询存储卷失败或部分失败的原因。更多信息,请参见容器服务ACK备份。
存储类转换状态为Failed,且提示包含"storageclass xxx not exists"
问题现象
存储类转换状态为Failed,且提示包含"storageclass xxx not exists"。
问题原因
存储类转换时,选择的目标存储类在当前集群中不存在。
解决方案
- 执行以下命令,重置存储类转换任务。 - 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
- 在当前集群中创建缺失的存储类。 
- 重新执行恢复任务,并配置存储类转换。 
存储类转换状态为Failed,且提示包含"only support convert to storageclass with CSI diskplugin or nasplugin provisioner"
问题现象
存储类转换状态为Failed,且提示包含"only support convert to storageclass with CSI diskplugin or nasplugin provisioner"。
问题原因
存储类转换时,选择的目标存储类不是阿里云CSI云盘类型或NAS类型。
解决方案
- 当前版本默认仅支持云盘类型、NAS、OSS类型的快照制作及恢复,若您有其他恢复需求,请联系相关支持提交工单。 
- 若您使用的是阿里云OSS等支持公网访问的存储产品,可先通过静态挂载的方式创建存储声明、存储卷后直接恢复应用,无需存储类转换步骤。具体请参考使用ossfs 1.0静态存储卷。 
存储类转换状态为Failed,且提示包含"current cluster is multi-zoned"
问题现象
存储类转换状态为Failed,且提示包含"current cluster is multi-zoned"。
问题原因
当前集群为多可用区集群,转换为云盘类型存储类时,选择的目标存储类volumeBindingMode为Immediate。在多可用区集群使用此类型存储类会导致创建存储卷后,Pod无法调度到指定节点上而处于Pending状态。关于volumeBindingMode字段的说明,请参见存储类。
解决方案
- 执行以下命令,重置存储类转换任务。 - 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
- 若您需要转换为云盘存储类。 - 通过控制台操作,请选择alicloud-disk,alicloud-disk默认使用alicloud-disk-topology-alltype存储类。 
- 通过命令行操作,请选择alicloud-disk-topology-alltype类型,alicloud-disk-topology-alltype类型为CSI存储插件默认提供的存储类。您也可以自定义volumeBindingMode为WaitForFirstConsumer的存储类。 
 
- 重新执行恢复任务,并配置存储类转换。 
恢复任务状态为Failed,且提示包含"multi-node writing is only supported for block volume"
问题现象
恢复、存储类转换任务状态为Failed,且提示包含"multi-node writing is only supported for block volume. For Kubernetes users, if unsure, use ReadWriteOnce access mode in PersistentVolumeClaim for disk volume"。
问题原因
为了避免挂载期间的云盘被其他节点再次挂载导致强制拔盘的风险,CSI在挂载期间会校验云盘类型存储卷的AccessModes配置,禁止使用ReadWriteMany或ReadOnlyMany配置。
备份的应用挂载的是AccessMode为ReadWriteMany或ReadOnlyMany的存储卷(多为支持多挂载的网络存储如OSS、NAS),恢复为默认不支持多挂载的阿里云云盘存储时,可能由CSI抛出以上错误。
具体而言,以下三种场景都可能引起该报错:
场景1:备份集群的CSI版本较早(或使用的是FlexVolume存储插件),早期的CSI版本在挂载期间不会对阿里云云盘存储卷的AccessModes字段进行校验,导致原云盘存储卷在CSI版本较新的集群恢复时报错。
场景2:备份存储卷使用的自定义存储类在恢复集群不存在,按一定匹配规则,在新集群默认恢复为阿里云云盘存储类型存储卷。
场景3:恢复时通过存储类转换功能,手动指定备份的存储卷恢复至阿里云云盘类型存储卷。
解决方案
场景1:备份组件从v1.8.4版本起,支持云盘存储卷的AccessModes字段自动转换为ReadWriteOnce。请升级备份中心组件后重新恢复。
场景2:存储类由组件在目标集群中自动恢复可能会有数据无法访问或数据覆盖的风险,请先在目标集群创建同名存储类再恢复,或通过存储类转换功能指定需要在恢复中使用的存储类。
场景3:网络存储类型存储卷恢复为云盘存储时,同时配置convertToAccessModes参数转换AccessModes至ReadWriteOnce,详情请参见convertToAccessModes:目标AccessModes列表。
恢复任务状态为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等支持公网访问的存储产品,请先通过静态挂载的方式创建存储声明、存储卷后再恢复应用。具体操作,请参见使用ossfs 1.0静态存储卷。 
恢复任务状态为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特性的存储卷多实例挂载。
- 其中, - VolumeMode为- Filesystem(即使用ext4, xfs等文件系统挂载)的存储卷仅能支持只读多挂载。
更多云盘存储信息,请参考使用云盘动态存储卷。
解决方案
- 若您在使用存储类转换功能将OSS、NAS等支持多挂载类型的存储卷转换成云盘,为保持业务不同副本对存储卷的数据能正常共享,建议您新建恢复任务,选择存储类转换的目标类型为 - alibabacloud-cnfs-nas,使用CNFS托管的NAS存储卷,更多信息,请参见通过CNFS管理NAS文件系统(推荐)。
- 若您备份云盘存储卷创建时的CSI版本较低(未对 - AccessMode进行检测),备份的存储卷本身不符合当前CSI的创建要求,请您优先考虑使用云盘动态存储卷改造原业务,避免调度到其他节点时的强拔盘风险。
恢复任务状态为Completed,但恢复集群中有部分资源未创建
问题现象
恢复任务状态为Completed,但恢复集群中有部分资源未创建。
问题原因
- 原因1:该资源未被备份。 
- 原因2:该资源在恢复时根据配置项被排除。 
- 原因3:应用恢复子任务部分失败。 
- 原因4:该资源已成功恢复,但由于ownerReferences配置或业务逻辑的原因被回收。 
解决方案
解决方案1:
执行以下命令,查询备份详情。
 kubectl -n csdr exec -it $(kubectl -n csdr get pod -l component=csdr | tail -n 1 | cut -d ' ' -f1) -- ./velero describe backup <backup-name> --details确认目标资源是否已备份。若目标资源未被备份,请确认是否因为备份任务的指定/排除命名空间、资源等配置而被排除,并重新备份。未被选择的命名空间中正在运行的应用(Pod)的Cluster级别资源默认不会备份,若您需要备份所有Cluster级别资源,请参见集群级别备份。
解决方案2:
若目标资源未被恢复,请确认是否因为备份任务的指定/排除命名空间、资源等配置而被排除,并重新恢复。
解决方案3:
执行以下指令,确认失败的资源及失败原因。
 kubectl -n csdr exec -it $(kubectl -n csdr get pod -l component=csdr | tail -n 1 | cut -d ' ' -f1) -- ./velero describe restore <restore-name> 根据输出中的Errors和Warnings字段内容提示修复问题。
解决方案4:
查询对应资源的审计,确认是否在创建后被异常删除。
Flexvolume集群migrate-controller组件无法正常拉起
备份中心migrate-controller组件不支持Flexvolume类型的集群。如需使用备份中心功能,您可以通过以下方式将Flexvolume插件迁移至CSI。
- 其他情况,请加入钉钉用户群(钉钉群号:35532895)咨询。 
若您在Flexvolume至CSI迁移过程中,需要在Flexvolume集群中进行备份并在CSI集群中恢复,请参见通过备份中心实现低版本Kubernetes集群应用迁移。
备份仓库是否支持修改
备份中心不支持备份仓库的修改。如需修改备份仓库,只能删除后使用其他名称重建。
由于备份仓库是共用的,已创建的备份仓库随时可能处于备份或恢复状态。此时,修改任意一个参数,都可能导致备份或恢复应用时找不到数据。因此,备份仓库不允许修改或同名重建。
备份仓库是否可以关联非"cnfs-oss-*"格式命名的OSS Bucket
对于ACK专有版集群及注册集群以外类型的集群,备份中心组件默认拥有cnfs-oss-*命名的OSS Bucket的读写权限。为避免备份覆盖Bucket中原有的数据,建议您为备份中心创建一个专用的符合cnfs-oss-*命名规则的OSS Bucket。
- 若您需要为备份仓库关联非"cnfs-oss-*"格式命名的OSS Bucket,需为组件配置权限。具体操作,请参见ACK专有集群。 
- 权限配置完成后,执行以下命令,重启备份服务组件。 - kubectl -n csdr delete pod -l control-plane=csdr-controller kubectl -n csdr delete pod -l component=csdr- 若您已经创建了关联非"cnfs-oss-*"格式命名的OSS Bucket的备份仓库,可等待连通性检测完成,状态变为Available后,再尝试备份或恢复,连通性检测的间隔时间约为五分钟。您可以通过以下命令查询备份仓库的状态。 - kubectl -n csdr 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 -n csdr get pod -l component=csdr | tail -n 1 | cut -d ' ' -f1 kubectl -n csdr exec -it csdr-velero-xxx -c velero -- ./velero describe backup <backup-name> --details
- 通过容器服务控制台查看。 - 登录容器服务管理控制台,在左侧导航栏选择集群列表。 
- 在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择。 
- 在应用备份页面,单击备份记录页签,在备份记录列单击待查看的目标备份记录。 
 
云盘存储卷备份的资源
- 登录ECS管理控制台。 
- 在左侧导航栏,选择。 
- 在页面左侧顶部,选择目标资源所在的资源组和地域。   
- 在快照页面,根据云盘ID查询快照。 
非云盘存储卷备份的资源
- 在左侧导航栏,选择。 
- 在顶部菜单栏左上角,选择所在地域。 
- 查看容器备份。 - 集群列表:展示已进行备份保护的集群列表。单击ACK集群ID可查看已保护的存储卷声明。更多介绍,请参见存储卷声明。 - 如果客户端状态显示异常,则说明云备份服务在容器服务集群中运行异常。请前往容器服务管理控制台守护进程集,进行定位处理。  
- 备份任务:展示备份任务的运行状态。  
 
是否支持在低版本集群备份至高版本集群恢复?
支持。
备份时,默认备份资源所有支持的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、ack-csi-fuse、kube-system、kube-public、kube-node-lease等命名空间下的资源?
- csdr为备份中心的工作命名空间,直接备份恢复会导致组件在恢复集群工作异常。此外,备份中心有备份同步的逻辑,您无需手动迁移备份至新集群。 
- ack-csi-fuse为存储组件CSI的工作命名空间,用于运行CSI维护的FUSE客户端Pod。在新集群中恢复存储时,新集群的CSI将自动同步到对应的客户端,无需手动备份恢复。 
- kube-system、kube-public、kube-node-lease为Kubernetes集群的默认系统命名空间,由于集群参数、配置等不同,无法在集群之间简单恢复。此外备份中心关注业务应用的备份和恢复。在恢复任务之前,您需要在恢复集群中预先安装并配置好所需的系统组件。例如: - ACR免密组件:为恢复集群重新授权并配置acr-configuration。 
- ALB Ingress组件:预先配置ALBConfig等。 
 - 直接备份kube-system的系统组件至新集群,可能会导致系统组件运行异常。 
备份中心对云盘的数据都使用ECS云盘快照备份吗?快照默认的类型是什么?
在以下场景,备份中心会默认使用ECS云盘快照对云盘的数据进行备份。
- 集群为ACK托管集群、ACK专有集群。 
- 集群版本为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,您可以通过以下方式配置默认的快照有效期:
- 将备份中心组件migrate-controller升级至v1.7.10及以上版本。 
- 使用以下命令,确认集群中是否存在配置默认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"
 
- 配置后,该集群创建的所有涉及云盘存储卷的备份都将创建与以上 - 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在数据保护中,如何选择可用于执行文件系统备份操作的节点?
默认情况下,在备份除阿里云云盘类型外的存储卷时,均使用云备份进行数据备份恢复,此时需要在某个节点上执行云备份任务。ACK Scheduler的默认调度策略与社区Kubernetes调度器保持一致。同时您也可以根据业务情况,只允许任务调度到某些特定的节点上。
- 当前云备份任务暂不支持调度到虚拟节点上。 
- 默认情况下,备份任务为低优先级任务,对于同一备份任务,某节点上最多只能执行一个存储卷的备份任务。 
备份中心节点调度策略
- exclude策略(默认):默认情况下,所有节点均可用于备份恢复。若不期望云备份任务调度到某些节点上,需要给节点打上 - csdr.alibabacloud.com/agent-excluded="true"标签。- kubectl label node <node-name-1> <node-name-2> csdr.alibabacloud.com/agent-excluded="true"
- include策略:默认情况下,未打标的节点均不可用于备份恢复。对允许执行云备份任务的节点需要打上 - csdr.alibabacloud.com/agent-included="true"标签。- kubectl label node <node-name-1> <node-name-2> csdr.alibabacloud.com/agent-included="true"
- prefer策略:默认情况下,所有节点均可用于备份恢复,调度优先级如下: - 优先调度在带有 - csdr.alibabacloud.com/agent-included="true"标签的节点上;
- 无特殊标签的节点次之; 
- 最后再调度到带有 - csdr.alibabacloud.com/agent-excluded="true"标签的节点上。
 
切换节点选择策略
- 执行以下命令编辑 - csdr-configConfigMap。- kubectl -n csdr edit cm csdr-config- 在 - applicationBackup配置中追加- node_schedule_policy配置,示例如下:
- 执行以下命令重启 - csdr-controllerDeployment,使配置生效。- kubectl -n csdr delete pod -lapp=csdr-controller
应用备份和数据保护的适用场景有哪些?
应用备份:
- 备份目标是集群中运行的业务,包括应用、服务、配置文件等集群中的资源。 
- 可以同时备份应用挂载的存储卷中的数据(可选)。 说明- 在应用备份中,未被任何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下。若不再需要使用,请及时删除配置。