PV(Persistent Volume)

一、PV

PV作为对存储资源的定义,主要涉及存储能力、访问模式、存储类型、回收策略、后端存储类型等关键信息设置。

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv1
spec:
  capacity:
    storage: 5Gi  #存储空间 5G
  volumeMode: Filesystem #存储卷模式:文件系统
  accessModes:
    - ReadWriteOnce  #访问模式,读写权限,并且只能被单个node挂载
  persistentVolumeReclaimPolicy: Recycle #资源回收,弃用
  storageClassName: slow #存储类型为slow(要求系统中已经存在名称为"slow"的StorageClass)
  mountOptions:
   - hard
   - nfsvers=4.1
  nfs:  #后端存储类型为nfs
    path: /tmp
    server: 172.17.0.2

Kubernetes支持的PV类型:

 NFS:网络文件系统

Local:本地存储设备,可以通过指定块设备(Block Device)提供local PV

HostPath:宿主机目录,仅用于单机测试

Glusterfs:一种开源共享存储系统

Cinder:OpenStack块存储系统

二、PV资源对象需要设置的关键参数

 1.存储容量(Capacity)

   描述存储的容量,目前仅支持对存储空间的设置

  2.存储卷模式(Volume Modes)

    可以设置的选项包括Filesystem(文件系统,默认值)和Block(块设备)。文件系统模式的的PV将以目录(Directory)形式挂载到Pod内。如模式为块设备,但是设备是空的则Kuebernertes会自动在块设备上创建一个文件系统。支持块设备的存储类型会会以落设备的形式挂载到容器内部,并且不会创建任何文件系统,适用于直接操作裸设备(速度最快)的应用程序。

    目前有以PV类型支持裸设备类型:AWSElasticBlockStore、GCEPersistentDisk、Local vlolume、OpenStack Cinder等。

apiVersion: v1
kind: PersistentVolume
metadata:
  name: blocl-pv
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  volumeMode: Block
  fc: #fibre channel光纤存储设备
    targetWWNs: ["110dd00d4dfdd"]
    lun: 0
    readOnly: false

 

  3.访问模式(Access Modes)

    PV存储卷挂载到宿主机系统上,可以设备不同的访问模式(Access Modes)。PV支持哪些访问模式由存储提供商支持,例如NFS可以支持多个客户端同时读写模式,但是一个特定的NFS PV也可以以只读(Read-only)模式导出到服务器上。

    Kubernetes支持的访问模式:

模式权限
ReadWriteOnce(RWO)读写权限,并且只能被单个Node挂载
ReadOnlyMany(ROX)只读权限,允许被多个Node挂载
ReadWriteMant(RWX)读写权限,允许多个Node挂载

 4.存储类别(Class)

  PV可以设定其存储的类型,通过storageClassName参数指定一个StorageClass资源对象的名称。具体特定类别的PV只能通过请求该类别的PVC绑定。未设定类别的PV则只能与不请求任何类别的PVC绑定。

 5.回收策略(Reclaim Policy)

  •  Retain:保留数据,需要手工处理
  • Recycle:简单清除文件的操作(例如运行 rm -rf /thevolume/* 命令)
  • Delete:与PV相连的后端存储完成volume删除操作

  目前只有NFS和HostPath两种类型的PV支持Reycle策略;AWSElasticBlockStore、GCEPersistentDisk和Cinder类型的PV支持Delete策略。

 6.挂载选项(Mount Options)

  在将PV挂载到一个Node上时,根据后端存储的特点,可能需要设置额外的挂载选项参数,这个可以在PV定义中的mountOptions字段进行设置

apiVersion: v1
kind: PersistentVolume
metadata:
  name: gce-disk-1
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteOnce
  mountOptions:
    - hard
    - nolock
    - nfsvers=3
  gcePersistentDisk:
    fsType: ext4
    pdName: gce-disk-1
Kubernetes不会对挂载选项进行验证,如果设置错误的过载选项,则挂载将会失败。
7. 节点亲和性(Node Affinity)
    PV可以设置节点亲和性来限制只能通过某些Node访问Volume,可以在PV定义nodeAffinity字段中进行设置。使用这些Volume的Pod将被调度到满足条件的Node上。
   公有云提供的存储卷(如AWSElasticBlockStore、GCEPersistentDisk等)都由公有云自动完成节点亲和性设置,无需用户手工设置。对于Local类型的PV,需要手工设置。
apiVersion: v1
kind: PersistentVolume
metadata:
  name: example-local-pv
spec:
  capacity:
    storage: 5Gi
  accessModes:
  - ReadWriteOnce
  persistentVolumeReclaimPolicy: Delete
  storageClassName: local-storage
  local:
    path: /test/disks/ssd1
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kuberneter.io/hostname
          operator: In
          values:
          - master

某个PV在生命周期可能处于4个阶段:

  • Avaiable:可用状态,还未与某个PVC绑定
  • Bound:已经与PVC绑定
  • Releaseed:与之前绑定的PV已经被删除,但为完成资源回收,不能被其它PVC使用
  • Failed:自动资源回收失败

在定义了PV资源之后,就需要通过定义PVC来使用PV资源。


版权声明:本文为GaoChuang_原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。