K8s集群存储NAS替换NFS
背景
当前XX生产环境中的共享存储为自建型NFS服务,存在以下风险:
- 单点故障: NFS服务为单台虚拟机,当节点异常,整个集群业务将受到影响;
- 更高效存储性能:NAS设备通常针对海量存储场景设计,在性能上可能有更高服务保障;
- 运维简便:NAS在扩容的场景下更为快捷;
- 其它 ...
为规避上述风险以及NAS可提供更为稳定的存储服务,XX准备将K8S集群中的NFS服务器替换为NAS服务。
一言蔽之,就是说我们在Kubernetes中使用NAS资源的StorageClass的PVC都需要进行处理。
前置条件
条件1:NAS资源到位
NAS资源已经申请到位,且Kubernetes集群中的工作节点网络能正常访问到NAS服务。
条件2:替换期间需停服务
需要窗口期,具体多少需要根据数据量来评估。
实现步骤
步骤1:数据全量复制
将NAS资源挂载到NFS服务节点,通过rsync工具将当前集群所有的持久化数据复制到NAS资源上面。
# rsync -arv NFS_DATA NAS_DATA
提示:该操作不会影响服务正常运行,但会占用NFS节点大量网络带宽,同时所涉及的数据量较大,建议选择服务空闲期操作(如工作日的凌晨或周末)
步骤2:停止服务
为避免产生新数据,我们需要将正在运行的Pod进行缩容,步骤参考如下:
步骤3:数据增量复制
由于步骤1已经复制过一次数据,此时我们继续通过rsync工具将后续产生的数据进行增量复制。
# rsync -av NFS_DATA NAS_DATA
步骤4:导出PV、PVC资源
将集群所有PV、PVC资源导出
# kubectl get pv <name> -o yaml > pv.yaml
# kubectl get pvc <name> -o yaml > pv.yaml
步骤5:编辑PV YAML资源
编辑 NFS 服务器地址:
<省略若干行 >
nfs:
path: /xxx
server: 新NAS地址
步骤6:重新创建PV、PVC资源
由于PV、PVC资源无法进行直接编辑,我们只能先删除再创建的步骤来实现
# kubectl delete -f .
# kubectl apply -f .
执行完成后,检查PVC是否为Bound
状态,若为非Bound
则说明PVC、PV资源异常。
步骤7:应用恢复
步骤还是参考如下:
步骤8:业务测试
对进行业务功能测试。
步骤10:回收NFS服务器资源
服务运行一段时间后,将NFS资源进行回收。
注意事项
事项1: pvc 的状态为 Lost
重建PVC、PV时,PVC的状态可能为 Lost状态,需要将导出来的PV YAML资源中的 claimRef: 字段内容进行清除。