阿里云容器服务备份中心为集群内的有状态应用提供灾难备份和恢复能力,对于Kubernetes集群内的有状态应用的崩溃一致性,应用一致性,跨地域的灾难恢复提供了一站式的解决方案。本文介绍如何通过应用备份功能实现跨集群迁移应用。
示例介绍
本示例中一个名为Cluster_A集群,另一个名为Cluster_B集群。接下来介绍在Cluster_A集群备份应用,在Cluster_B集群恢复应用。
注意 创建集群时,请确保两个集群的Kubernetes版本一致且不低于1.18,否则会导致跨集群迁移应用失败。

使用应用备份功能迁移应用的流程
- 授予Cluster_A和Cluster_B集群OSS权限。具体操作,请参见配置OSS权限。
- 在Cluster_A和Cluster_B集群中安装应用备份组件。具体操作,请参见安装应用备份组件。
- 在Cluster_A和Cluster_B集群创建名称相同的备份仓库。创建备份仓库时,给Cluster_A和Cluster_B集群设置同一个OSS,并且选择公网访问。具体操作,请参见创建备份仓库。
- 在Cluster_A集群创建备份任务。具体操作,请参见创建备份任务。
Cluster_A集群创建备份任务完成后,您可以在Cluster_B集群应用备份页面备份和快照页签下看到Cluster_A集群的备份任务。
- 在Cluster_B集群制作快照。具体操作,请参见制作快照。
若创建备份任务时已选中备份存储卷且存储类型使用了非云盘类型,即使用混合云备份服务HBR(Hybrid Backup Recovery)进行文件备份,则需要制作快照。
- 在Cluster_B集群应用备份页面的恢复页签下选择Cluster_A集群的备份任务,执行恢复操作。具体操作,请参见创建恢复任务。
示例一:使用备份中心功能跨集群迁移WordPress应用(云上ACK集群之间)
通过在源K8s集群安装WordPress应用,并且通过发布博客的方式,将博客中文本内容存储在云盘,图片内容存储在NAS,实现应用中既有NAS数据和云盘数据。通过备份中心,将源集群的WordPress应用进行备份,然后在目标集群中将恢复应用和数据,验证数据及应用的完整性。
- 在cn-huhehaote地域创建ACK托管版集群Cluster_A和Cluster_B。
- 在Cluster_A集群中安装应用WordPress。具体操作,请参见通过Helm CLI一键部署WordPress。
在
参数页签,选择
default命名空间,将
storageClass: "alicloud-disk-ssd"
修改为
storageClass: "alibabacloud-cnfs-nas"
,如下所示:
persistence:
enabled: true
## wordpress data Persistent Volume Storage Class
## If defined, storageClassName: <storageClass>
## If set to "-", storageClassName: "", which disables dynamic provisioning
## If undefined (the default) or set to null, no storageClassName spec is
## set, choosing the default provisioner. (gp2 on AWS, standard on
## GKE, AWS & OpenStack)
storageClass: "alibabacloud-cnfs-nas"
## If you want to reuse an existing claim, you can pass the name of the PVC using
## the existingClaim variable
# existingClaim: your-claim
accessMode: ReadWriteOnce
size: 20Gi
- 在Cluster_A和Cluster_B集群中安装备份服务组件,并创建名称相同的备份仓库。
- 关于安装备份服务组件的操作,请参见安装应用备份组件。
- 两个集群要创建名称相同的备份仓库,设置同一个OSS,并选择公网访问。关于创建备份仓库的操作,请参见创建备份仓库。
- 在Cluster_A集群中创建备份任务。具体操作,请参见创建备份任务。
开启对
default命名空间的备份。

待备份任务
123backup-1的状态为
Completed后,您可以在Cluster_B集群
应用备份页面的
备份和快照页签下看到Cluster_A集群的备份任务。
- 在Cluster_B集群中备份和快照页签下,在备份任务123backup-1的右侧操作列单击制作快照。
本示例,在
生成快照对话框,
转换为存储类列选择
alicloud-disk(即云盘)。

待快照生成,即对应PVC的状态变为
ConvertionCompleted。

- 在Cluster_B集群中创建恢复任务restore-123backup-1。
- 验证任务是否恢复成功。
- 在Cluster_B集群管理页左侧导航栏选择,在WordPress应用的右侧操作列单击详情,确认WordPress应用的状态为Runnning。
- 在集群管理页左侧导航栏中,选择。
- 在服务页面单击WordPress的外部端点,可以看到WordPress主页。
示例二:使用备份中心功能跨集群迁移MySQL应用
示例简述
- 在线下K8s创建集群(例如,Rancher集群),将线下集群接入注册集群后通过YAML部署使用本地盘的MySQL应用。
- 云上通过ACK创建托管版集群,部署备份服务组件。
- 云下纳管集群(即注册集群)通过备份中心备份线下集群的MySQL应用及数据。
- 在云上ACK集群中,通过备份中心使云下应用和数据在云上恢复。
迁移步骤
- 将线下集群接入注册集群。具体操作,请参见创建注册集群并接入本地数据中心集群。
- 使用kubectl工具连接注册集群。具体操作,请参见通过kubectl工具连接集群。
- 创建PV、PVC及MySQL应用。
- 使用以下示例创建mysql.yaml。
apiVersion: v1
kind: PersistentVolume
metadata:
name: local-pv
spec:
capacity:
storage: 100Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
local:
path: /home/
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- for-rancher-k8s-cluster002
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: local-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 100Gi
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: mysql
spec:
serviceName: "mysql"
selector:
matchLabels:
app: mysql
template:
metadata:
labels:
app: mysql
spec:
containers:
- image: mysql:5.6
name: mysql
env:
- name: MYSQL_ROOT_PASSWORD
value: "mysql"
volumeMounts:
- name: local
mountPath: /var/lib/mysql
volumes:
- name: local
persistentVolumeClaim:
claimName: local-pvc
- 执行以下命令部署PV、PVC及MySQL应用。
kubectl --kubeconfig rancher_huhehaote_kubeconfig apply -f mysql/mysql.yaml
- 执行以下命令查看创建的MySQL应用。
kubectl --kubeconfig rancher_huhehaote_kubeconfig get pod
预期输出:
NAME READY STATUS RESTARTS AGE
mysql-0 1/1 Running 0 171m
- 执行以下命令登录MySQL,创建数据库、建表,并写入测试数据。
kubectl --kubeconfig rancher_huhehaote_kubeconfig exec -it mysql-0 sh
root@mysql-0:/# mysql -u root -pmysql
create database test;
create table student(id int, name varchar(20),age int);
insert into student values (1,2,3);
- 在注册集群(即Cluster_A集群)中创建备份任务。具体操作,请参见创建备份任务。
开启对
default命名空间的备份。

待备份任务
mysql-backup-111的状态为
Completed后,您可以在Cluster_B集群
应用备份页面的
备份和快照页签下看到Cluster_A集群的备份任务。
- 在托管版集群(即Cluster_B集群)中备份和快照页签下,在备份任务mysql-backup-111的右侧操作列单击制作快照。
本示例,在
生成快照对话框,
转换为存储类列选择
alicloud-disk(即云盘)。

待快照生成,即对应PVC的状态变为
ConvertionCompleted。

- 在Cluster_B集群中创建恢复任务restore-111。
- 验证任务是否恢复成功。
- 执行以下命令查看MySQL应用。
kubectl --kubeconfig rancher_online_kube -n mysql-111 get pod
预期输出:
NAME READY STATUS RESTARTS AGE
mysql-0 1/1 Running 0 37m
- 登录恢复的数据库查看数据。

从预期输出可得,应用及写入数据均和线下集群的数据相同。