集群备份恢复
CCE备份恢复为无状态和有状态应用的备份和恢复提供了一套可靠、安全、灵活且高效的解决方案。通过遵循CCE备份恢复的全流程指导,您可以顺利地完成应用的备份和恢复。
建议在用户业务量小时执行备份和恢复操作。
方案优势
- 易用性:在应用备份和恢复阶段,已实现工具自动化。这些工具免安装,简单轻量且配置灵活。
- 多版本:支持在维版本的应用备份和恢复。版本策略详情请参阅Kubernetes版本策略。
- 无依赖:工具不需要任何外部依赖,可以独立运行。
- 多架构:工具支持在x86和ARM的Linux环境中运行。
- 不停机:过程无需停机,不影响集群内的业务。
数据备份及恢复原理
k8clone是一个简便的Kubernetes元数据克隆工具,它可以将Kubernetes元数据(如Deployment、ConfigMap、Service)保存为本地压缩包,实现应用备份能力。同时可以将本地压缩包恢复回Kubernetes元数据,实现应用的恢复能力。
数据备份的流程参考如下:
数据恢复的流程参考如下:
在执行恢复操作前,需要准备一个数据恢复配置文件“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。
准备工作
资源要求
在开始进行备份恢复工作之前,请确保您已经准备了一台安装了kubectl的服务器,用来连接集群。工具支持在Linux(x86、ARM)环境中运行,因此您可以任选一种架构的服务器作为操作服务器。该服务器需要至少拥有5GB左右的本地磁盘空间和≥8G的内存,以确保工具可以正常运行,并存储相关数据。
工具获取
在安装了kubectl的服务器上下载以下工具:
工具 |
说明 |
下载链接 |
---|---|---|
k8clone |
k8clone是一个简便的Kubernetes元数据克隆工具,它可以将Kubernetes元数据(对象)保存为本地压缩包,然后将这些元数据恢复到集群中。 |
Linux x86:https://ucs-migration.obs.cn-north-4.myhuaweicloud.com/toolkits/k8clone-linux-amd64 Linux arm:https://ucs-migration.obs.cn-north-4.myhuaweicloud.com/toolkits/k8clone-linux-arm64 |
使用工具前,需要运行chmod u+x命令(例如 chmod u+x k8clone-linux-amd64),授予工具可执行权限。
备份操作步骤
- 通过kubectl连接源集群。具体方法可参考使用kubectl连接集群。
- 进入k8clone工具所在目录,执行备份命令,即可备份数据到本地目录,并打包成压缩包。
k8clone备份使用方法的示例中提供了几种常见的备份方式,您可以按需选择,也可以自定义备份方式。
恢复操作步骤
- 通过kubectl连接目标集群。具体方法可参考使用kubectl连接集群。
- 准备数据恢复配置文件:restore.json。
新建一个restore.json文件,按照格式修改,并将文件放置在k8clone工具所在目录下。
示例:
{ "StorageClass": { "csi-disk": "csi-disk-new" }, "ImageRepo": { "quay.io/coreos": "swr.cn-north-4.myhuaweicloud.com/paas" } }
- 进入k8clone工具所在目录,执行恢复命令,将备份数据恢复到目标集群。
示例:
./k8clone-linux-amd64 restore -d ./k8clone-dump.zip -f ./restore.json
k8clone备份使用方法
k8clone工具支持在Linux(x86、arm)和Windows环境中运行,使用方法相似。本文将以Linux(x86)环境为例进行介绍。
若使用Linux(arm)或Windows环境,请将下述命令中的k8clone-linux-amd64分别替换为k8clone-linux-arm64或k8clone-windows-amd64.exe。
在k8clone工具所在目录下执行./k8clone-linux-amd64 backup -h,可以查看k8clone工具备份的使用方法。
- -k, --kubeconfig:指定kubectl的KubeConfig位置,默认是$HOME/.kube/config。kubeConfig文件:用于配置对Kubernetes集群的访问,KubeConfig文件中包含访问注册Kubernetes集群所需要的认证凭据以及Endpoint(访问地址),详细介绍可参见Kubernetes文档。
- -s, --api-server:Kubernetes API Server URL,默认是""。
- -q, --context:Kubernetes Configuration Context,默认是""。
- -n, --namespace:备份指定命名空间的云原生应用,多个命名空间用逗号分隔(如:ns1,ns2,ns3),默认是"",表示备份整个集群。
- -e, --exclude-namespaces:排除指定命名空间对象的备份,不能和--namespace一起使用。
- -x, --exclude-kind:排除指定资源类型的备份。
- -i, --include-kind : 指定资源类型的备份。
- -y, --exclude-object:排除指定资源对象的备份。
- -z, --include-object:指定资源对象的备份。
- -w, --exclude-having-owner-ref:排除拥有ownerReferences资源对象的备份,默认是false。布尔类型传参过程中需要带上等号,如:"-w=true" ,"-w true"不会生效,它将使用默认值。
- -d, --local-dir:备份数据放置的路径,默认是当前目录下k8clone-dump文件夹。
$ ./k8clone-linux-amd64 backup -h Backup Workload Data as yaml files Usage: k8clone backup [flags] Flags: -s, --api-server string Kubernetes api-server url -q, --context string Kubernetes configuration context -w, --exclude-having-owner-ref Exclude all objects having an Owner Reference. The default value is false. The equal sign (=) must be added when a Boolean parameter is transferred, for example, -w=true. -w true does not take effect, and the default value will be used. -x, --exclude-kind strings Ressource kind to exclude. Eg. 'deployment' -i, --include-kind strings Ressource kind to include. Eg. 'deployment' -e, --exclude-namespaces strings Namespaces to exclude. Eg. 'temp.*' as regexes. This collects all namespaces and then filters them. Don't use it with the namespace flag. -y, --exclude-object strings Object to exclude. The form is '<kind>:<namespace>/<name>',namespace can be empty when object is not namespaced. Eg. 'configmap:kube-system/kube-dns' -z, --include-object strings Object to include. The form is '<kind>:<namespace>/<name>',namespace can be empty when object is not namespaced. Eg. 'configmap:kube-system/kube-dns' -h, --help help for backup -k, --kubeconfig string The kubeconfig of k8s cluster's. Default is the $HOME/.kube/config. -d, --local-dir string Where to dump yaml files (default "./k8clone-dump") -n, --namespace string Only dump objects from this namespace
示例如下:
- 整个集群对象的备份,默认路径为当前目录下“k8clone-dump”文件夹
- 整个集群对象的备份,并指定备份数据路径
- 指定命名空间对象的备份
- 排除命名空间对象的备份
./k8clone-linux-amd64 backup -e kube-system,kube-public,kube-node-lease
- 排除指定资源类型的备份
- 指定资源类型的备份
- 排除指定资源对象的备份
./k8clone-linux-amd64 backup -y configmap:kube-system/kube-dns
- 指定资源对象的备份
./k8clone-linux-amd64 backup -z configmap:kube-system/kube-dns
- 排除拥有ownerReferences资源对象的备份
k8clone恢复使用方法
k8clone工具支持在Linux(x86、arm)和Windows环境中运行,使用方法相似。本文将以Linux(x86)环境为例进行介绍。
若使用Linux(arm)或Windows环境,请将下述命令中的k8clone-linux-amd64分别替换为k8clone-linux-arm64或k8clone-windows-amd64.exe。
在k8clone工具所在目录下执行./k8clone-linux-amd64 restore -h,可以查看k8clone工具恢复的使用方法。
- -k, --kubeconfig:指定kubectl的KubeConfig位置,默认是$HOME/.kube/config。kubeConfig文件:用于配置对Kubernetes集群的访问,KubeConfig文件中包含访问注册Kubernetes集群所需要的认证凭据以及Endpoint(访问地址),详细介绍可参见Kubernetes文档。
- -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