利用 Velero 实现将应用跨云迁移到 百度CCE
1.简介
CCE 支持用户使用开源工具 Velero 对云上及私有环境的 Kubernetes 集群进行备份、恢复。用于集群误操作、集群故障、集群迁移等场景。
velero的作用:
- 灾备能力:提供备份恢复k8s集群的能力
- 迁移能力:提供拷贝集群资源到其他集群的能力
和 etcd 备份的区别:**
- etcd 的备份必须拥有 etcd 运维权限,CCE上托管型集群用户无法操作 etcd
- etcd 更适合单集群内数据备份,不太适合集群迁移
- etcd 是当前状态备份,velero 可以做到只备份集群内的一部分资源
Velero 工作原理图如下图所示(来源于 Velero 官网),当用户执行备份命令时,备份过程说明如下:
- 调用自定义资源 API 创建备份对象(1)。
- BackupController 控制器检测到生成的备份对象时(2)执行备份操作(3)。
- 将备份的集群资源和存储卷快照上传到 Velero 的后端存储(4)和(5)。

另外当执行还原操作时,Velero 会将指定备份对象的数据从后端存储同步到 Kubernetes 集群完成还原工作。
更多关于 Velero 介绍,请参见Velero 官网文档。
本文将介绍如何使用 百度云对象存储 BOS 作为 Velero 后端存储实现从阿里云ACK到百度智能云CCE的集群备份。
前提条件
- 已准备源阿里云 ACK 集群和目标百度智能云 CCE 集群的
kubeconfig,并具备在集群中创建命名空间、CRD、ServiceAccount、BackupStorageLocation等资源的权限。 - 已在百度智能云创建可用的 BOS Bucket,且账号状态正常,能够访问 BOS 资源。
- 已获取百度智能云用户的
AccessKey和SecretKey,并妥善保存SecretKey。 - 已将
CCE-Backup-Controller依赖的镜像同步到源 ACK 集群可访问的镜像仓库。 - 如需将应用恢复到目标 CCE 集群,已提前处理业务镜像拉取方式,确保目标集群能够拉取应用镜像。## 2.安装及配置
如果要将 ACK 上的应用迁移到 CCE 上,需要安装并配置 velero 和 velero-baiducloud-plugin。
- 在百度云上创建你的 BOS bucket
- 在百度云上获取你的 AccessKey 和 SecretKey
- 获取百度云 CCE 发布的迁移组件 CCE-Backup-Controller,在阿里云配置容器镜像示例,并推送 CCE-Backup-Controller 相关镜像
- 安装 Velero 命令工具及服务端
- 根据实际情况修改Helm Values
- 阿里云 ACK 集群安装部署 CCE-Backup-Controller
在百度云对象存储创建 BOS Bucket
导航路径:对象存储 BOS->Bucket 列表
Velero 需要对象存储来存放备份数据,请先在百度智能云创建你的 BOS bucket。
创建 Bucket 的过程可参考:对象存储 BOS - 创建 Bucket
- 进入 对象存储 BOS->Bucket 列表。
- 确认当前账号状态正常。
- 按页面提示完成 Bucket 创建,并记录 Bucket 名称,后续用于配置备份存储位置。
如果控制台提示账号欠费停服,需先恢复服务后再继续创建 Bucket。
获取百度云用户的 AccessKey 和 SecretKey
导航路径:账号菜单->安全认证->Access Key
- 进入 【Access Key】 页面,查看已有密钥或单击 【创建 Access Key】 发起创建。
关于 AK 和 SK 的更多信息,请参考:如何获取 AK 和 SK
- 按页面提示完成
AccessKey创建并立即保存AccessKeyID和AccessKeySecret。若当前使用主账号,先确认风险提示后再继续创建。

注意: Secret Key 仅在创建成功时明文展示一次,关闭成功窗口后将无法再次明文查询,请在当前页面立即复制或下载保存。
确认环境
开始安装前,请确认以下信息已经准备完成:
- 源集群:已准备源 ACK 集群的集群 ID 和
kubeconfig。 - 备份存储:已准备 BOS Bucket 名称,以及对应地域的 BOS 访问域名。
- 目标集群:已准备目标 CCE 集群的集群 ID 和
kubeconfig。
2.4 安装 Velero 命令工具及服务端
2.4.1 安装 Velero 命令行工具
方法一:MacOS - Homebrew
在 macOS,您可以在终端使用Homebrew 完成 velero 客户端的安装:
brew install velero
方法二:Github release
- 从 Velero release 页面 下载和使用平台匹配的压缩包
- 解压压缩包
tar -xvf <RELEASE-TARBALL-NAME>.tar.gz
3.将解压得到的 velero 二进制移动到您的 $PATH 环境变量包含的路径下(如 /usr/local/bin)
方法三:Windows - Chocolatey
在 Windows 平台,您可以在终端使用 Chocolatey 完成 velero 客户端的安装。
choco install velero
2.4.2 在阿里ACK安装 CCE-Backup-Controller
我们主要利用 Helm 完成 Velero 服务端的安装。
步骤一:下载 CCE-Backup-Controller Helm Chart,并解压
步骤二:将 CCE-Backup-Controller Helm Chart 中的镜像推送到 阿里云镜像服务,下文统一以阿里云镜像作为示例。
镜像列表:
1registry.baidubce.com/cce-plugin-pro/velero:v1.13.5
2registry.baidubce.com/cce-plugin-pro/velero-plugin-baiducloud:0.6
3registry.baidubce.com/cce-plugin-pro/kubectl:1.24.9
推送到阿里云镜像服务后,镜像列表为:
1registry-vpc.cn-beijing.aliyuncs.com/velero-test/velero:v1.13.5
2registry-vpc.cn-beijing.aliyuncs.com/velero-test/velero-plugin-baiducloud:0.6
3registry-vpc.cn-beijing.aliyuncs.com/velero-test/kubectl:1.24.9
步骤三: 配置 CCE-Backup-Controller Chart
安装 Velero 服务端之前,需要正确编辑 Chart 中的 values.yaml 文件。
- 替换核心镜像。为了在未开通外网的 ACK 环境中顺利拉取 Velero 核心镜像,需要将
values.yaml中的镜像地址替换为目标镜像仓库地址。修改后示例如下:
1image:
2 repository: <ALIYUN_REGISTRY>/velero
3 tag: v1.13.5
4 pullPolicy: IfNotPresent
5 imagePullSecrets: []
6
7kubectl:
8 image:
9 repository: <ALIYUN_REGISTRY>/kubectl
10 tag: 1.24.9
- 添加百度云 Velero 插件。为了能够将集群备份文件保存到百度云 BOS,需要在
initContainers中配置velero-plugin-baiducloud。修改后示例如下:
1initContainers:
2 - name: velero-plugin-baiducloud
3 image: <ALIYUN_REGISTRY>/velero-plugin-baiducloud:0.6
4 imagePullPolicy: IfNotPresent
5 env:
6 - name: BAIDU_CLOUD_CREDENTIALS_FILE
7 value: "/credentials/cloud"
8 volumeMounts:
9 - mountPath: /target
10 name: plugins
11 - mountPath: /credentials
12 name: cloud-credentials
- 配置 百度云 BOS 访问凭证。注意:
- 将 <BAIDU_CLOUD_ACCESS_KEY_ID> 和 <BAIDU_CLOUD_SECRET_ACCESS_KEY> 替换成您在 2.2 步骤获取的实际百度云上的 AccessKey 及 SecretAccessKey;
- 将 <BAIDU_CLOUD_BOS_ENDPOINT> 替换成您所在地域的 BOS 服务域名,BOS 服务在各地域的域名见:对象存储 BOS - 获取访问域名
1credentials:
2 # Whether a secret should be used. Set to false if, for examples:
3 # - using kube2iam or kiam to provide AWS IAM credentials instead of providing the key file. (AWS only)
4 # - using workload identity instead of providing the key file. (Azure/GCP only)
5 useSecret: true
6 # Name of the secret to create if `useSecret` is true and `existingSecret` is empty
7 name: baidu-bos-credentials
8 # Name of a pre-existing secret (if any) in the Velero namespace
9 # that should be used to get IAM account credentials. Optional.
10 existingSecret:
11 # Data to be stored in the Velero secret, if `useSecret` is true and `existingSecret` is empty.
12 # As of the current Velero release, Velero only uses one secret key/value at a time.
13 # The key must be named `cloud`, and the value corresponds to the entire content of your IAM credentials file.
14 # Note that the format will be different for different providers, please check their documentation.
15 # Here is a list of documentation for plugins maintained by the Velero team:
16 # [AWS] https://github.com/vmware-tanzu/velero-plugin-for-aws/blob/main/README.md
17 # [GCP] https://github.com/vmware-tanzu/velero-plugin-for-gcp/blob/main/README.md
18 # [Azure] https://github.com/vmware-tanzu/velero-plugin-for-microsoft-azure/blob/main/README.md
19 secretContents:
20 cloud: |
21 BAIDU_CLOUD_BOS_ENDPOINT=<BAIDU_CLOUD_BOS_ENDPOINT>
22 BAIDU_CLOUD_ACCESS_KEY_ID=<BAIDU_CLOUD_ACCESS_KEY_ID>
23 BAIDU_CLOUD_SECRET_ACCESS_KEY=<BAIDU_CLOUD_SECRET_ACCESS_KEY>
- 配置备份存储位置。该部分主要配置备份文件的存储位置,在使用 BOS 的场景下,实现将集群文件备份到 BOS 的指定 Bucket 及目录。注意:
- 将 <BUCKET_NAME> 替换为您在 BOS 创建的 Bucket 名称
- 将 <CLUSTER_ID> 替换为您的 ACK 集群 ID
1# Source: cce-backup-controller/templates/backupstoragelocation.yaml
2apiVersion: velero.io/v1
3kind: BackupStorageLocation
4metadata:
5 name: default
6 namespace: cce-backup
7 labels:
8 app.kubernetes.io/name: cce-backup-controller
9 app.kubernetes.io/instance: test-dhr
10 app.kubernetes.io/managed-by: Helm
11 helm.sh/chart: cce-backup-controller-1.1.3
12spec:
13 credential:
14 name: baidu-bos-credentials
15 key: cloud
16 provider: baiducloud
17 accessMode: ReadWrite
18 objectStorage:
19 bucket: "cce-bos-test"
20 prefix: "ceb93762c98b9496889487187c6423196"
21 config:
22 checksumAlgorithm: "SHA256"
23 region: "bj"
24 s3ForcePathStyle: "true"
25 s3Url: "https://s3.bj.bcebos.com"
26 signatureVersion: "AWS4-HMAC-SHA256"
执行命令:
1kubectl --kubeconfig={kubeconfig} apply -f bkp-location.yaml
其他 Velero 相关配置请参考官方文档及 Helm Chart 中配置注释。
- https://velero.io/docs/v1.14/backup-reference/
- https://github.com/vmware-tanzu/helm-charts/blob/main/charts/velero/README.md
注意: 安装CCE-Backup-Controller需要在源 ACK 集群具备创建命名空间、CRD、ServiceAccount等资源的权限;创建BackupStorageLocation还需要具备在cce-backup命名空间创建backupstoragelocations.velero.io的权限。步骤四: 部署及更新CCE-Backup-Controller
使用 Helm 命令完成 Velero 服务端的部署:
1cd cce-backup-controller
2helm --kubeconfig <ACK_KUBECONFIG> install cce-backup-controller . -n cce-backup --create-namespace
每次修改 values.yaml 文件后,执行以下命令完成更新:
1helm upgrade cce-backup-controller . -n cce-backup
确认 Velero 服务端正常运行:
1kubectl -n cce-backup get pods
确认 velero 相关 Pod 状态为 Running 后,再继续创建备份任务。
步骤五: 创建备份任务并查看结果
创建备份任务:
1velero --kubeconfig <ACK_KUBECONFIG> backup create <BACKUP_NAME> --include-namespaces <NAMESPACE> -n cce-backup
查看备份任务状态:
1velero --kubeconfig <ACK_KUBECONFIG> -n cce-backup backup get

查看备份数据
导航路径:对象存储 BOS->Bucket 列表
- 进入目标 Bucket。
- 查看与
BackupStorageLocation中prefix对应的备份目录。 - 查看该目录下的备份对象和备份详情。
如果当前账号处于欠费停服状态,需要先恢复 BOS 服务后再查看 Bucket 中的文件和备份详情。
2.6 备份恢复
步骤一: 迁移镜像,保证应用镜像在 CCE 可拉取。
- 方法一:使用 CCR 镜像迁移功能,将 ACK 镜像迁移至百度云 CCR。恢复应用到 CCE 后,再按实际情况修改镜像地址。
- 方法二:将 ACK 应用镜像调整为目标 CCE 集群可访问的镜像地址,并确保目标集群具备对应网络访问能力。
步骤二: 在目标 CCE 集群安装 CCE-Backup-Controller。
导航路径:CCE 控制台->目标集群的组件中心
在目标 CCE 集群中安装 CCE-Backup-Controller,确保目标集群已经具备访问备份仓库和执行恢复任务的能力。
步骤三: 通过命令行创建备份仓库。
1apiVersion: velero.io/v1
2kind: BackupStorageLocation
3metadata:
4 name: default
5 namespace: cce-backup
6spec:
7 credential:
8 name: baidu-bos-credentials
9 key: cloud
10 provider: baiducloud
11 accessMode: ReadWrite
12 objectStorage:
13 bucket: "<BUCKET_NAME>"
14 prefix: "<ACK_CLUSTER_ID>"
15 config:
16 checksumAlgorithm: "SHA256"
17 region: "<BOS_REGION>"
18 s3ForcePathStyle: "true"
19 s3Url: "https://s3.<BOS_REGION>.bcebos.com"
20 signatureVersion: "AWS4-HMAC-SHA256"
步骤四: 执行备份恢复命令。
1velero --kubeconfig <CCE_KUBECONFIG> restore create --from-backup <BACKUP_NAME> -n cce-backup
步骤五:确认应用正常运行,相关配置正确迁移

应用镜像:

配置项:

评价此篇文章
