背景
在 https://suyiiyii.com/p/我的-homelab-k3s-rancher-安装记录/ 中,我们买了一台腾讯云 2c4g 的服务器,很快就要到期了。但是很可惜,腾讯云并没有提供更多的续费优惠,所以只能放弃掉这一台服务器,同时要把这台机器上面的服务迁移到其他机器上。
实施方案
为了实现最小的重新配置,我打算直接把原来的控制平面迁移到新的机器上面,再修改 dns 解析,实现集群的无损迁移。
步骤
检查需要迁移的资源
首先,先看看要检查一下有没有 pv
|
|
可以看到集群没有 pv,~~所以直接迁移数据库就可以了。~~并不能直接迁移数据库,因为数据库里面只存储了 manifest,但是集群的正常运行还需要很多证书,token 以及其他文件。你也不希望迁移过去后你的 kubectl 用不了吧。
|
|
k3s 的持久化数据存储在 /var/lib/rancher/k3s
这个路径下面。
其中,server
就是 apiserver 的数据;agent
是 kubelet 的数据,storage
则是集群的 pv 的数据。
保证新旧机器 k3s 版本相同
先停止 k3s 服务
|
|
然后更新到当前的最新版
|
|
参考文档:https://docs.k3s.io/upgrades/manual https://docs.k3s.io/zh/upgrades/killall
打包集群文件
为了无损迁移集群,我直接打包 k3s 的所有数据
|
|
k3s/agent/containerd
里面保存的是 containerd 的数据,主要是一些镜像以及当前运行的容器的数据。因为我确定没有 pv 要备份,所以集群里面都是一些无状态的应用,所以就直接排除掉这个路径就行了。
解压集群文件
到新的机器上面解压
|
|
启动集群
|
|
然后就等待集群慢慢重新拉镜像,重新启动服务就行了。最后记得把域名解析指向新的服务器。
总结
这次集群迁移比想象中简单多了,就是把集群文件拷贝到新的机器上面就行了,剩下的什么都不用管,没有遇到任何问题。感觉这就是 IaC 的魅力吧,以及按照最佳实践开发,做各种事情都非常的得心应手。