K8s的网络共享存储原理

背景

Kubernetes对于有状态的容器应用或者对数据需要持久化的应用,不仅需要将容器内的目录挂载到宿主机的目录或者emptyDir临时存储
卷,而且需要更加可靠的存储来保存应用产生的重要数据,以便容器应用在重建之后仍然可以使用之前的数据。

PV

定义

​ PV是对底层网络共享存储的抽象。PV由管理员创建和配置,它与共享存储的具体实现直接相关。PV作为存储资源,包括:

  • 存储能力
  • 访问模式
  • 存储类型
  • 回收策略
  • 后端存储类型

K8s支持的PV类型

  • NFS
  • AWS
  • Fc等

PV的关键配置参数

  • 存储能力——storage=xx
  • 存储卷模式——volumeMode=xxx
  • 访问模式AccessMode
    • ReadWriteOnce(只读,且供一个Node挂载)
    • ReadOnlyMany(只读,可供多个node挂载)
    • ReadWriteMany(读写,可供多个node挂载)
  • 存储类别——StorageClassName
  • 回收策略——persistentVolumeReclaimPolicy
  • 挂载参数——mountOptions
  • 节点亲和性——nodeAffinity(只适用于Local存储卷)

PV生命周期

  • Available——可用状态,还未与某个PVC绑定
  • Bound——已与某个PVC绑定
  • Released——绑定的PVC已经删除,资源已经释放,但是还没有被集群回收
  • Failed——自动回收资源失败

PVC

定义

​ PVC则是用户对存储资源的一个“申请“。PVC消费PV资源,PVC可以申请特定的存储空间和访问模式。

StorageClass4种类型:快速存储、慢速存储、有数据冗余、无数据冗余。

​ PVC作为用户对存储资源的需求申请,主要包括:

  • 存储空间请求
  • 访问模式
  • PV选择条件
  • 存储类别等信息。

PVC的关键参数

  • 资源请求——request.storage
  • 访问模式AccessMode
  • 存储卷模式——块存储,文件系统
  • PV选择条件——label selector:matchLabels和matchExpressions
  • 存储类别——StorageClassName

PV与PVC的生命周期

K8s的网络共享存储原理

资源回收

静态模式

K8s的网络共享存储原理

动态模式

K8s的网络共享存储原理

注意

PV与PVC都受限于命名空间namespace,PVC在选择PV时受到namespace的限制,只有相同namespace的PV才能与PVC进行绑定。

相关文章: