一、PV-持久卷

持久卷-PersistentVolume 是集群中的一块存储资源,可以由管理员事先制备, 或者使用存储类(Storage Class)来动态制备

1. pv使用时需要理解的几个重要概念

  • 存储能力 - capacity
  • 访问模式 - accessModes (读写权限)
  • 所属存储类 - storageClassName
  • 后端存储类型 - 参考内置支持的一些类型(nfs、HostPath、Local等)
  • 回收策略 - persistentVolumeReclaimPolicy
  • 节点亲和性 - Affinity

2. PV-配置文件样例:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv1
spec:
  # 预绑定-声明只能被如下的PVC绑定
  claimRef:
    name: nlp-pvc-inquery
    namespace: nlp
  capacity:  #容量
    storage: 5Gi
  accessModes:  #访问模式
  - ReadWriteOnce
  persistentVolumeReclaimPolicy: Recycle  #回收策略
  storageClassName: slow  
  nfs:
    path: /
    server: 172.17.0.2

二、PVC-持久卷申领

持久卷申领(PersistentVolumeClaim,PVC) 表达的是用户对存储的请求。即:PV 卷是集群中的资源,PVC 申领是对这些资源的请求 PVC和PV是一对一绑定的

1. pvc使用时需要理解的几个重要概念

  • 资源请求 - Resources
  • 访问模式 - AccessModes
  • 存储卷模式 - volumeMode
  • PV选择条件 - Selector
  • 所属存储类 - StorageClass

2. pvc-配置文件样例:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: nlp-pvc-inquery
  #命名空间
  namespace: nlp
spec:
  # 绑定选择器
  selector:
    matchLabels:
      name: nlp-pv-inquery
  # 预绑定-静态绑定-强制绑定(绑定指定名为如下的PV)
  volumeName: nlp-pv-inquery
  accessModes:
    - ReadWriteMany
  volumeMode: Filesystem
  resources:
    requests:
      storage: 5Gi
  # 所属存储类
  storageClassName: nlp
volumes:
  - name: pv
    persistentVolumeClaim:
      claimName: pvc

三、StorageClass-存储类

StorageClass作为对存储资源的抽象定义,对用户设置的PVC申请屏蔽后端存储的细节,由系统自动完成PV的创建和绑定,实现了动态的资源供应。存储类实际可以理解为提供了三个功能:
1、声明所需PV的配置信息用来动态生成pv;
2、声明所属pv的绑定模式
3、作为一种pvc和pv绑定查找的索引

1. StorageClass使用时需要理解的几个重要概念

  • 存储制备器 | 提供者 - Privisioner (指定制备 PV的插件类型)
  • 参数 - Parameters (不同的Provisioner包括不同的参数设置)
  • 回收策略 - reclaimPolicy(动态生成pv的回收策略)
  • 设为默认的StorageClass - (需要启动准入控制器DefaultStorageClass)**
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: slow
  # 设置为默认存储类
  annotations:
    storageclass.beta.kubernetes.io/is-default-class="true"
# 无制备器
privisioner: kubernetes.io/no-provisioner
reclaimPolicy: Retain
allowVolumeExpansion: true
volumeBindingMode: WaitForFirstConsumer

四、PV 和 PVC 绑定方式

PV 和 PVC 绑定流程:实际上就是PV 控制器分别对 PV & PVC 不断进行独立的协调同步判断操作

1. PV 和 PVC静态绑定 | 预绑定

1.1 - 静态绑定具体使用

通过在 PV 的 Spec.ClaimRef 或者 PVC 的 Spec.VolumeName 字段下预填配置信息,进行预绑定
实际使用中,需结合具体需求采取一种方法,或两种方法同时进行预绑定操作。

1.2 - PVC 协调同步过程
  1. 对于未绑定的 PVC ,先看 PVC 的 VolumeName 是否为空。
    1. 若为空,寻找匹配的 PV 。若发现某一个 PV 的 ClaimRef 已经指向该 PVC ,则直接使用。
    2. 若不为空,寻找对应的 PV 并尝试与之绑定
  2. 对于已经绑定的 PVC,尝试检查绑定状态,并更新对象当发现问题时,比如关联的 PV 已经不存在等。
1.3 - PV 协调同步过程
  1. 若 ClaimRef 为空,只是将自己更新为 Avaiable 状态,等待被 PVC 消费
  2. 若 ClaimRef 不为空。以 ClaimRef.UID 是否设置,来区分是 PV 是否被绑定完全。

2. PV 和 PVC 通过storageClass 动态绑定

  1. 使用内部制备器-填写所需配置信息
    参考:动态卷制备

  2. 使用外部驱动需要先创建制备器
    参考:nfs动态制备:NFS Ganesha 服务器和外部驱动

五、参考:

PV 和 PVC 绑定流程及预绑定 (Pre-Binding)
PV、PVC、StorageClass概念详解
官网链接

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐