k3s 集群迁移

背景

https://suyiiyii.com/p/我的-homelab-k3s-rancher-安装记录/ 中,我们买了一台腾讯云 2c4g 的服务器,很快就要到期了。但是很可惜,腾讯云并没有提供更多的续费优惠,所以只能放弃掉这一台服务器,同时要把这台机器上面的服务迁移到其他机器上。

实施方案

为了实现最小的重新配置,我打算直接把原来的控制平面迁移到新的机器上面,再修改 dns 解析,实现集群的无损迁移。

步骤

检查需要迁移的资源

首先,先看看要检查一下有没有 pv

1
2
3
4
root@k:~# k get pv
No resources found
root@k:~# k get pvc -A
No resources found

可以看到集群没有 pv,~~所以直接迁移数据库就可以了。~~并不能直接迁移数据库,因为数据库里面只存储了 manifest,但是集群的正常运行还需要很多证书,token 以及其他文件。你也不希望迁移过去后你的 kubectl 用不了吧。

1
2
3
4
5
6
7
8
root@iv-ydozv5cdfkqbxys0pj3x:/var/lib/rancher/k3s# ll
total 24
drwxr-xr-x 6 root root 4096 Aug 15  2024 ./
drwxr-xr-x 3 root root 4096 Jul 10 13:11 ../
drwx------ 5 root root 4096 Jul 10 13:02 agent/
drwxr-xr-x 5 root root 4096 Jul  8 16:02 data/
drwx------ 9 root root 4096 Jul 10 13:02 server/
drwx------ 2 root root 4096 Oct  7  2024 storage/

k3s 的持久化数据存储在 /var/lib/rancher/k3s 这个路径下面。

其中,server 就是 apiserver 的数据;agent 是 kubelet 的数据,storage 则是集群的 pv 的数据。

保证新旧机器 k3s 版本相同

先停止 k3s 服务

1
2
systemctl stop k3s
/usr/local/bin/k3s-killall.sh

然后更新到当前的最新版

1
curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh |  INSTALL_K3S_MIRROR=cn sh -

参考文档:https://docs.k3s.io/upgrades/manual https://docs.k3s.io/zh/upgrades/killall

打包集群文件

为了无损迁移集群,我直接打包 k3s 的所有数据

1
root@k:/var/lib/rancher# tar --exclude "k3s/agent/containerd" -cvzf k3s.tgz k3s/

k3s/agent/containerd 里面保存的是 containerd 的数据,主要是一些镜像以及当前运行的容器的数据。因为我确定没有 pv 要备份,所以集群里面都是一些无状态的应用,所以就直接排除掉这个路径就行了。

解压集群文件

到新的机器上面解压

1
root@iv-ydozv5cdfkqbxys0pj3x:/var/lib/rancher# tar -xvzf ~/k3s.tgz

启动集群

1
systemctl start k3s

然后就等待集群慢慢重新拉镜像,重新启动服务就行了。最后记得把域名解析指向新的服务器。

总结

这次集群迁移比想象中简单多了,就是把集群文件拷贝到新的机器上面就行了,剩下的什么都不用管,没有遇到任何问题。感觉这就是 IaC 的魅力吧,以及按照最佳实践开发,做各种事情都非常的得心应手。

Licensed under CC BY-NC-SA 4.0
使用 Hugo 构建
主题 StackJimmy 设计