2个Kubernetes使用同一个Ceph存储达到Kubernetes间持久化数据迁移

作者: ygqygq2 分类: 云计算/虚拟化,系统/运维 发布时间: 2019-04-29 10:30

2个Kubernetes使用同一个Ceph存储达到Kubernetes间持久化数据迁移

当前最新Kubernetes稳定版为1.14。现在为止,还没有不同Kubernetes间持久化存储迁移的方案。但根据Kubernetes pv/pvc绑定流程和原理,只要 "存储"-->"PV"-->"PVC" 的绑定关系相同,即可保证不同间Kubernetes可挂载相同的存储,并且里面是相同数据。

1. 环境

原来我的Kubernetes为阿里云ECS自己搭建的,现在想切换使用阿里云购买的Kubernetes。因Kubernetes中一些应用使用像1G、2G等小容量存储比较多,所以仍旧想保留原有的Ceph存储使用。

Kubernetes: v1.13.4
Ceph: 12.2.10 luminous (stable)

2个Kubernetes存储使用storageclass管理,并连接相同Ceph集群。可参考:Kubernetes使用Ceph动态卷部署应用

2. 迁移过程示例

数据依旧保留在存储中,并未真正有迁移动作,迁移只是相对于不同Kubernetes来讲。

2.1 提取旧Kubernetes持久化存储

为了更好的看到效果,这里新建一个nginx的deploy,并使用ceph rbd做为持久化存储,然后写一些数据。

vim rbd-claim.yaml

vim rbd-nginx-dy.yaml

查看结果,并写入数据至nginx持久化目录中:

将pv、pvc信息提取出来:

2.2 将提取出来的pv、pvc导入新Kubernetes中

将上文中提取出来的pv和pvc传至新的Kubernetes中:

在新的Kubernetes中导入pv、pvc:

可以看到,pvc状态显示为Lost,这是因为在新的Kubernetes中导入pv和pvc后,它们会自动重新生成自己的resourceVersionuid,因此在新导入的pv中的spec.claimRef信息为旧的:

为了解决新导入的pv中的spec.claimRef信息旧的变成新的,我们将这段信息删除,由provisioner自动重新绑定它们的关系:

这里我们做成一个脚本处理:

vim unbound.sh

脚本执行后,过个10秒左右,查看结果:

在新的Kubernetes中使用之前传的rbd-nginx-dy.yaml验证下,在此之前,因为使用ceph rbd,需要先解除旧Kubernetes上的pod占用该rbd:

旧Kubernetes:

新Kubernetes:

3. 小结

上面实验中,使用的是RWO的pvc,大家试想下,如果使用RWX,多个Kubernetes使用,这种使用场景可能有更大的作用。

Kubernetes使用过程中,pv、pvc和存储,它们的信息和绑定关系至关重要,所以可按需求当作日常备份,有了这些备份,即使Kubernetes etcd数据损坏,也可达到恢复和迁移Kubernetes持久化数据目的。

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据