首页 > 其他分享 >自建k8s集群迁移到公有云k8s平台

自建k8s集群迁移到公有云k8s平台

时间:2023-03-25 16:32:33浏览次数:35  
标签:velero 存储 自建 -- 备份 公有 集群 pod k8s

云原生化改造迁移-自建k8s集群迁移到华为云CCE 1.概述 根据华为云云原生化改造迁移方案将自建k8s集群迁移到CCE集群。 自建集群描述: 自建k8s集群涉及到deployment statefulset pv pvc configmap service storageclass等。 具体服务有nginx php(其中一个pod中包含了两个容器) mysql wordpress博客,其中mysql是采用主从架构。其中wordpress数据是手动放在了对应pv路径下并添加可读写权限。 image.png 容器用到了持久化存储,其中集群中部署了nfs存储类作为默认存储类,进行pv自动供给。 集群pod pvc svc资源如下 image.png 数据库情况,可以看到mysql主从同步状态正常 image.png image.png

服务访问情况:wordpress博客服务通过nodeport方式访问,端口30031 image.png

image.png

1.1迁移方案

表1 可迁移资源列表 image.png

2.目标集群资源规划

2.1CCE集群规划 image.png image.png image.png

3.集群外资源迁移

3.1容器镜像迁移 目前集群应用涉及的镜像有如下: tuwei1314/mysql:5.7 tuwei1314/xtrabackup:1.0 tuwei1314/nginx-php-fpm:latest 都是放在个人dockerhub仓库,将这些地址重新打tag,推送到广州局点SWR仓库 image.png

3.2数据库与存储迁移(按需) 目前集群中mysql采用容器部署,不涉及单独的数据库迁移,额外存储也不涉及 3.2.1数据库迁移 目前数据库采用容器部署不涉及单独迁移 3.2.2存储迁移 Wordpress和mysql持久化存储都是用的nfs共享存储,且应用的accessModes 均为ReadWriteMany,迁移到CCE使用文件存储类csi-nas即文件存储sfs,如果原先集群有多个存储类,提供ReadWriteOnce的,则迁移到CCE后可以采用csi-disk即云硬盘存储。 4.迁移工具安装 Velero是开源的 Kubernetes 集群备份、迁移工具,集成了Restic工具对PV数据的备份能力,可以通过Velero工具将原集群中的K8s资源对象(如Deployment、Job、Service、ConfigMap等)和Pod挂载的持久卷数据保存备份上传至对象存储。在发生灾难或需要迁移时,目标集群可使用Velero从对象存储中拉取对应的备份,按需进行集群资源的还原。 根据迁移方案所述,在迁移开始前需准备临时的对象存储用于存放资源的备份文件,Velero支持使用华为云OBS或者MinIO对象存储。对象存储需要准备足够的存储空间用于存放备份文件,请根据您的集群规模和数据量自行估算存储空间。建议您使用华为云OBS进行备份存储,可直接参考安装Velero进行Velero的部署。 本次迁移直接利用OBS作为存储,不单独安装minio作为对象存储。 注意原集群和目标CCE集群都需要安装,安装步骤一致 4.1对象存储准备 已在OBS中创建名为velero-k8s的桶 image.png

4.2安装velero客户端 wget https://github.com/vmware-tanzu/velero/releases/download/v1.8.0/velero-v1.8.0-linux-amd64.tar.gz tar -xf velero-v1.8.0-linux-amd64.tar.gz mv velero /usr/local/bin/ 4.3创建备份对象存储访问密钥文件credentials-velero [default] aws_access_key_id = {AK} aws_secret_access_key = {SK} 内容里AK SK需要用实际的代替 4.4部署Velero服务端。注意其中--bucket参数需要修改为已创建的对象存储桶名称,本例中为velero-k8s velero install
--provider aws
--plugins velero/velero-plugin-for-aws:v1.2.1
--bucket velero-k8s
--secret-file ./credentials-velero
--use-restic
--use-volume-snapshots=false
--backup-location-config region=cn-south-1,s3ForcePathStyle="true",s3Url=http://obs.cn-south-1.myhuaweicloud.com 4.5Velero实例将默认创建一个名为velero的namespace,执行以下命令可查看pod状态 image.png

为防止在实际生产环境中备份时出现内存不足的情况,建议您参照备份工具资源分配不足,修改Restic和Velero分配的CPU和内存大小。 安装参数: velero install
--velero-pod-cpu-request 500m
--velero-pod-mem-request 1Gi
--velero-pod-cpu-limit 1000m
--velero-pod-mem-limit 1Gi
--use-restic
--restic-pod-cpu-request 500m
--restic-pod-mem-request 1Gi
--restic-pod-cpu-limit 1000m
--restic-pod-mem-limit 1Gi 4.6查看Velero工具与对象存储的对接情况,状态需要为available。 velero backup-location get image.png

CCE集群velero安装情况 image.png

5.集群内资源迁移 当前应用不存在hostpath类型的存储卷,应用都在default命名空间,备份时指定命名空间,kube-system下如cordns等就不进行备份了。 5.1应用备份----指定命名空间 velero backup create k8s-backup --include-namespaces default --default-volumes-to-restic 5.2查看备份情况 velero backup get image.png 还在进行中没有完成 同时可前往对象桶中查看备份的文件,其中backups路径为应用资源备份,restic路径为PV数据备份。 备份完成 image.png

OBS桶 image.png image.png image.png

5.3新集群CCE恢复 5.3.1创建存储类 先在CCE创建同名存储类保证集群在恢复时可以动态创建存储资源,这里根据CCE 文件存储类进行创建 kubectl get sc csi-nas -oyaml >my-storage.yaml 修改metadata下name字段为原集群存储类名称managed-nfs-storage并删除该字段后面三行。 kubectl apply -f my-storage.yaml image.png

用该存储类创建pvc测试是否可用,模式为readwritemany。 image.png 可以看到pvc正常绑定 查看CCE界面 image.png 5.3.2集群资源恢复 velero restore create --from-backup k8s-backup 查看pod pvc情况 image.png 通过界面修改镜像进行滚动升级,最后资源创建情况如下: image.png image.png

查看数据库情况: image.png image.png

从库已完成同步。 5.4查看应用恢复情况 velero restore get image.png

可以看到数据还在恢复中,没有完成 通过velero restore describe +恢复名称可以查看集群资源恢复情况 6.资源更新适配 6.1镜像更新适配 修改mysql和wordpress应用镜像为华为云SWR镜像地址,直接在CCE界面中对应用进行镜像修改,选择相应的镜像 由于本次迁移应用不涉及ingress访问,故不用对接CCE集群的 ELB ingress 7.其余工作 7.1功能验证 上面查看mysql同步正常,查看mysql对应的存储卷。 原集群两个mysql实例对应的存储是230M左右 image.png

CCE集群查看mysql存储卷 image.png

Wordpress数据存储卷 image.png Wordpress中设置了站点名称还是之前的ip,需要修改,登陆主库修改URL地址为该ip地址 image.png

Wordpress应用访问地址为 ,访问http://124.71.223.172:30031/wp-admin image.png 修改站点地址和wordpress地址一致 image.png

查看博客站点

image.png image.png

站点访问正常 8.异常排查及解决 在实际恢复过程中发现数据恢复比较慢,可以在创建velero时调整分配给Velero和Restic的CPU和内存大小 velero install
--velero-pod-cpu-request 500m
--velero-pod-mem-request 1Gi
--velero-pod-cpu-limit 1000m
--velero-pod-mem-limit 1Gi
--use-restic
--restic-pod-cpu-request 500m
--restic-pod-mem-request 1Gi
--restic-pod-cpu-limit 1000m
--restic-pod-mem-limit 1Gi

9.卸载 Velero 如果您想从集群中完全卸载 Velero,以下命令将删除由velero install创建的所有资源: kubectl delete namespace/velero clusterrolebinding/velero kubectl delete crds -l component=velero 如果想安装创建备份任务可以重新安装

10.补充 测试hostpath创建的pv, local类型的pv的数据是否可以迁移。 Velero集成的Restic工具无法对HostPath类型的PV进行备份,只支持Local类型。 image.png

两个PV,一个是hostpath创建,一个是local创建的,两个卷挂载路径都是/mnt,在pod中分别两个卷,分别调度到两个节点,两个节点/mnt数据不一致。其中local卷是延迟绑定,当pod调度时绑定 image.png

测试coredns是否可以迁移 在创建备份任务前,修改coredns,添加自定义域名(适用于公司内部一些自定义域名解析场景),将自定义域名添加到hosts中 添加自定义域名前: image.png 添加hosts内容: image.png 稍等然后再次测试: image.png 集群pod及pv资源 image.png

创建备份后: image.png

查看备份日志可以看到:local卷备份完成 image.png

创建CCE集群,原集群有两个node节点,CCE也创建两个节点

image.png

以csi-disk存储类创建一个名为local的存储类。 执行恢复后: image.png

查看CCE pod image.png

查看原集群pod image.png 数据已经恢复。 image.png

原集群的coredns相关没有进行恢复,因为资源已经存在。

image.png image.png

标签:velero,存储,自建,--,备份,公有,集群,pod,k8s
From: https://blog.51cto.com/tuwei/6149555

相关文章