K8S Persistent Volume 卷的访问模式分析

418 阅读2分钟

PVC(PersistentVolumeClaim)介绍

在 K8s 中, 计算、存储、网络 三大类型的资源都是分开管理的。 计算资源业务多,逻辑最简单; 存储最重要,可靠性要求高; 网络最复杂, 专业性最强。

PVC 是 k8s 中对网络资源的抽象对象, 结合PV成对出现,顾名思义是对持久卷的申明, 表示要申请一块存储(PV)。在 PVC 中可以指定申请卷的大小、类型、挂载方式等内容。

PVC 还可以指定生成 PV 的StorageClass(SC)对象, 通过 SC 可以自动生成 PVC 需要的 PV。

然而, StorageClass 还并不是真正对接的存储服务, SC 是 K8s 中一个统一的动态存储管理对象, 而只有当 SC 有了 StorageProvider 之后, StorageProvider 才会去对接像 NAS、NFS 等真正的存储服务。

PVC 访问模式介绍

当对一个 PV 挂载到指定的 POD 对象时, 可以指定对这个PV卷的挂载访问模式; 按我的理解 PV 可以指定的访问模式, 必须是对应存储服务如 NFS 的能力子集, 比如特定 NFS 不支持多读多写, 而PV指定 ReadWriteMany 是不会生效的。

访问模式是限制 PVC 和 PV 的关系用的, 对于卷已经被挂载了的,则访问模式无法产生作用。 对于 ReadWriteOncePod 则 K8s 会加上 PC 只和一个 Pod 绑定的检查。

一个卷类型即便支持多种挂载方式, 对应的 PV 也只能以一种访问模式去挂载。

目前有以下访问模式:

  • ReadWriteOnce
  • ReadOnlyMany
  • ReadWriteMany
  • ReadWriteOncePod

ReadWriteOnce

卷可以被一个节点以读写方式挂载,如果该节点上有多个Pod同时访问也是可以的。

ReadOnlyMany

卷可以被多个节点以只读方式挂载

ReadWriteMany

卷可以被多个节点以读写方式挂载

ReadWriteOncePod

卷只能个一个 Pod 以读写的方式挂载,该方式要求:Kubernetes 大于 1.22, 且该卷必须是支持 CSI 的。

访问模式的命令行缩写

  • RWO - ReadWriteOnce
  • ROX - ReadOnlyMany
  • RWX - ReadWriteMany
  • RWOP - ReadWriteOncePod

具体到不同存储实现支持的访问模式, 可以查询相关供应商文档说明。