
# 应用迁移
不同AZ UCS华为云集群应用的迁移包含两个步骤：应用备份和应用迁移，即备份源AZ集群中应用，然后通过数据恢复的方式迁移至目标AZ集群。
k8clone是一个简便的Kubernetes元数据克隆工具，它可以将Kubernetes元数据（对象）保存为本地压缩包，然后将这些元数据恢复到目标集群中。
#### 前提条件
- 确认云原生应用依赖的存储数据已经迁移完成。
- 确认源集群中元数据备份数据已经下载到执行k8clone的服务器上。
 
#### k8clone数据恢复原理
数据恢复的流程参考如下：
图1数据恢复流程   
![](https://support.huaweicloud.com/usermanual-ucs/zh-cn_image_0000001533981869.png "点击放大")
在执行恢复操作前，需要准备一个数据恢复配置文件"restore.json"，目的是在应用恢复时自动更换PVC、StatefulSet的存储类名称，以及工作负载所使用镜像的Repository地址。
文件内容如下：
```
{
    "StorageClass": 
          "OldStorageClassName": "NewStorageClassName"  //支持修改PVC、StatefulSet的StorageClassName字段
    "ImageRepo": 
          "OldImageRepo1": "NewImageRepo1",   //eg:"dockerhub.com": "cn-north-4.swr.huaweicloud.com"
          "OldImageRepo2": "NewImageRepo2",   //eg:"dockerhub.com/org1": "cn-north-4.swr.huaweicloud.com/org2"
          "NoRepo": "NewImageRepo3"   //eg:"golang": "swr.cn-north-4.myhuaweicloud.com/paas/golang"
}
```
- StorageClass：支持PVC、有状态应用VolumeClaimTemplates中存储类名称按照配置进行自动更换。
- ImageRepo：支持工作负载所使用镜像的Repository地址的更换，工作负载包括Deployment（含initContainer）、StatefulSet、Orphaned Pod、Job、CronJob、Replica Set、Replication Controller、DaemonSet。
 
#### k8clone恢复使用方法
![](https://support.huaweicloud.com/usermanual-ucs/public_sys-resources/note_3.0-zh-cn.png)
k8clone工具支持在Linux（x86、arm）和Windows环境中运行，使用方法相似。本文将以Linux（x86）环境为例进行介绍。
若使用Linux（arm）或Windows环境，请将下述命令中的**k8clone-linux-amd64** 分别替换为**k8clone-linux-arm64** 或**k8clone-windows-amd64.exe**。
在使用k8s restore时， 默认跳过回收策略为Delete的PersistentVolume对象，用户可进行手动处理。
在k8clone工具所在目录下执行**./k8clone-linux-amd64 restore -h**，可以查看k8clone工具恢复的使用方法。
- -k, --kubeconfig：指定kubectl的KubeConfig位置，默认是$HOME/.kube/config。kubeConfig文件：用于配置对Kubernetes集群的访问，KubeConfig文件中包含访问注册Kubernetes集群所需要的认证凭据以及Endpoint（访问地址），详细介绍可参见[Kubernetes文档](https://kubernetes.io/docs/tasks/access-application-cluster/configure-access-multiple-clusters/)。
- -s, --api-server：Kubernetes API Server URL，默认是""。
- -q, --context：Kubernetes Configuration Context，默认是""。
- -f, --restore-conf：指定restore.json的路径，默认是k8clone工具所在目录下。
- -d, --local-dir：备份数据放置的路径，默认是k8clone工具所在目录下。
```
$ ./k8clone-linux-amd64 restore -h
ProcessRestore from backup
Usage:
     k8clone restore [flags]
Flags:
   -s, --api-server string     Kubernetes api-server url
   -q, --context string        Kubernetes configuration context
   -h, --help                  help for restore
   -k, --kubeconfig string     The kubeconfig of k8s cluster's. Default is the $HOME/.kube/config. 
   -d, --local-dir string      Where to restore (default "./k8clone-dump.zip")
   -f, --restore-conf string   restore conf file (default "./restore.json")
```
示例：
**./k8clone-linux-amd64 restore -d ./k8clone-dump.zip -f ./restore.json**
#### 应用恢复操作步骤
1. 通过kubectl连接目标集群。
2. 准备数据恢复配置文件：restore.json。 
   新建一个restore.json文件，按照格式修改，并将文件放置在k8clone工具所在目录下。
   示例：
   ```
   {
     "StorageClass": {
       "csi-disk": "csi-disk-new"
     },
     "ImageRepo": {
       "quay.io/coreos": "swr.cn-north-4.myhuaweicloud.com/paas"
     }
   }
   ```
   
   
3. 进入k8clone工具所在目录，执行恢复命令，将备份数据恢复到目标集群。 
   示例：
   **./k8clone-linux-amd64 restore -d ./k8clone-dump.zip -f ./restore.json**
   
   
 
