在当前集群中,进行平滑升级不太可能实现,k8s 本身 api 变动巨大,我们的 k8s 版本又比较老,那么余下的方案,就只有新建一个新 Cluster,老的服务,一步一步迁移过去。下面列举一下需要特殊照顾的服务和基础设施
Jenkins
用 Helm 部署新 Jenkins 就好了, 配置方面:
- jobs 目录复制过去即可
- certification.xml 关乎密钥,复制过去(复制过去也不能用,应该还缺少个解秘的配置,不清楚是哪个文件)
问题: Dashboard View,分组会没有,不知道哪个配置文件管理的,不过这个不重要。
密钥+配置文件
TODO, 这个应该可以做到一个命令备份所有文件,然后到新集群上重放
NFS
为了预防 NFS Provider 打架,要专门为新 Cluster 创建一个新的 NFS Server。老集群中的数据,一点一点梳理,然后在新的集群构建 PVC,把文件复制进去即可。数据库部分,可以备份数据库数据,在新建集群的数据库里restore 一下。
LoadBalance 和 Ingress Controller
我们用的是 内/外网 UCloud LB TCP => Ingress Controller 的方案。
内网LB可以粗暴一些,直接新建一个给新集群用。
至于外网LB,很硬的方案:硬切,把服务在新集群上部署完毕,先 kill 老的 Ingress Controller 到 LB 的映射,再立马将LB 关联到新的 Ingress Controller上,这里面一定会有几秒的服务中断。
保险一点的方案是,服务在新集群创建,老集群将流量转发到新集群的内网 LB(内网 Nginx Ingress Controller)。等一切OK,再直接将外网ULB从老集群断开,切到新集群上。
CertManager
服务用 Helm 部署即可。配置迁移参考:https://cert-manager.io/docs/tutorials/backup/
Vault
参考官网迁移方案
网友评论