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进行缩容,步骤参考如下:

如何正确收缩已部署的Kubernetes应用
【封面图片:广州市天河国际乒乓培训中心】如何正确收缩已部署的Kubernetes应用

步骤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:应用恢复

步骤还是参考如下:

如何正确收缩已部署的Kubernetes应用
【封面图片:广州市天河国际乒乓培训中心】如何正确收缩已部署的Kubernetes应用

步骤8:业务测试

对进行业务功能测试。

步骤10:回收NFS服务器资源

服务运行一段时间后,将NFS资源进行回收。

注意事项

事项1: pvc 的状态为 Lost

重建PVC、PV时,PVC的状态可能为 Lost状态,需要将导出来的PV YAML资源中的 claimRef: 字段内容进行清除。