云原生化改造迁移-自建k8s集群迁移到华为云CCE 1.概述 根据华为云云原生化改造迁移方案将自建k8s集群迁移到CCE集群。 自建集群描述: 自建k8s集群涉及到deployment statefulset pv pvc configmap service storageclass等。 具体服务有nginx php(其中一个pod中包含了两个容器) mysql wordpress博客,其中mysql是采用主从架构。其中wordpress数据是手动放在了对应pv路径下并添加可读写权限。 容器用到了持久化存储,其中集群中部署了nfs存储类作为默认存储类,进行pv自动供给。 集群pod pvc svc资源如下 数据库情况,可以看到mysql主从同步状态正常
服务访问情况:wordpress博客服务通过nodeport方式访问,端口30031
1.1迁移方案
表1 可迁移资源列表
2.目标集群资源规划
2.1CCE集群规划
3.集群外资源迁移
3.1容器镜像迁移 目前集群应用涉及的镜像有如下: tuwei1314/mysql:5.7 tuwei1314/xtrabackup:1.0 tuwei1314/nginx-php-fpm:latest 都是放在个人dockerhub仓库,将这些地址重新打tag,推送到广州局点SWR仓库
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的桶
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状态
为防止在实际生产环境中备份时出现内存不足的情况,建议您参照备份工具资源分配不足,修改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
CCE集群velero安装情况
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 还在进行中没有完成 同时可前往对象桶中查看备份的文件,其中backups路径为应用资源备份,restic路径为PV数据备份。 备份完成
OBS桶
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
用该存储类创建pvc测试是否可用,模式为readwritemany。 可以看到pvc正常绑定 查看CCE界面 5.3.2集群资源恢复 velero restore create --from-backup k8s-backup 查看pod pvc情况 通过界面修改镜像进行滚动升级,最后资源创建情况如下:
查看数据库情况:
从库已完成同步。 5.4查看应用恢复情况 velero restore get
可以看到数据还在恢复中,没有完成 通过velero restore describe +恢复名称可以查看集群资源恢复情况 6.资源更新适配 6.1镜像更新适配 修改mysql和wordpress应用镜像为华为云SWR镜像地址,直接在CCE界面中对应用进行镜像修改,选择相应的镜像 由于本次迁移应用不涉及ingress访问,故不用对接CCE集群的 ELB ingress 7.其余工作 7.1功能验证 上面查看mysql同步正常,查看mysql对应的存储卷。 原集群两个mysql实例对应的存储是230M左右
CCE集群查看mysql存储卷
Wordpress数据存储卷 Wordpress中设置了站点名称还是之前的ip,需要修改,登陆主库修改URL地址为该ip地址
Wordpress应用访问地址为 ,访问http://124.71.223.172:30031/wp-admin 修改站点地址和wordpress地址一致
查看博客站点
站点访问正常
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类型。
两个PV,一个是hostpath创建,一个是local创建的,两个卷挂载路径都是/mnt,在pod中分别两个卷,分别调度到两个节点,两个节点/mnt数据不一致。其中local卷是延迟绑定,当pod调度时绑定
测试coredns是否可以迁移 在创建备份任务前,修改coredns,添加自定义域名(适用于公司内部一些自定义域名解析场景),将自定义域名添加到hosts中 添加自定义域名前: 添加hosts内容: 稍等然后再次测试: 集群pod及pv资源
创建备份后:
查看备份日志可以看到:local卷备份完成
创建CCE集群,原集群有两个node节点,CCE也创建两个节点
以csi-disk存储类创建一个名为local的存储类。 执行恢复后:
查看CCE pod
查看原集群pod 数据已经恢复。
原集群的coredns相关没有进行恢复,因为资源已经存在。
标签:velero,存储,自建,--,备份,公有,集群,pod,k8s From: https://blog.51cto.com/tuwei/6149555