一、概述

在Kubernetes 中为了让用户更加方便的使用存储,便引入了 PV 和 PVC这两个资源对象来实现对存储的管理。本章节主要介绍PV

PV 的全称是:PersistentVolume(持久化卷),是对底层的共享存储的一种抽象,PV 由管理员进行创建和配置,它和具体的底层的共享存储技术的实现方式有关,比如 Ceph、GlusterFS、NFS 等,都是通过插件机制完成与共享存储的对接。

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

类型描述
AWSElasticBlockStoreAWS公有云提供的Elastic Block Store
AzureFileAzure公有云提供的File
AzureDiskAzure公有云提供的Disk
CephFS一种开源共享存储系统
CinderOpenStack块存储系统
FC (Fibre Channel)光纤存储设备
FlexVolume一种插件式的存储机制
Flocker一种开源共享存储系统
GCEPersistentDiskGCE公有云提供的Persistent Disk
Glusterfs一种开源共享存储系统
HostPath宿主机目录,仅用于单机测试
iSCSIiSCSI存储设备
Local本地存储设备,从Kubernetes 1.7版本开始引入,到1.14版本时达到稳定版本,目前可以通过指定块设备(Block Device) 提供Local PV,或通过社区开发的sig-storage-local-static-provisioner插件管理Local PV的生命周期
NFS网络文件系统
Portworx VolumesPortworx提供的存储服务
Quobyte VolumesQuobyte提供的存储服务
RBD (Ceph Block Device)Ceph块存储
ScaleIO VolumesDellEMC的存储设备
StorageOSStorageOS提供的存储服务
VsphereVolumeVMWare提供的存储系统

二、pv配置参数解释

创建pv,如下:

[root@k8s-master pv]# cat pv.yml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-nfs
spec:
  storageClassName: nfs    ###使用的sc name
  capacity:
    storage: 5Gi   ###请求的大小
  accessModes:
  - ReadWriteOnce    ####访问模式
  persistentVolumeReclaimPolicy: Retain
  volumeMode: Filesystem 
#nfs:      ####我本地环境设置了nfs-provsioner,所有不需要的单独在配置nfs
  #  path: /data/nfs
  #  server: 192.168.41.210

参数解释

  • storageClassName: 用于创建pv的sc name
  • capacity:创建pv指定的大小
  • accessModes:访问模式
ReadWriteOnce (RWO):读写权限,并且只能被单个pod挂载;
ReadOnlyMany (ROX):只读权限,允许被多个pod挂载;
ReadWriteMany(RWX):读写权限,允许被多个pod挂载;(ceph rbd 在volume mode 作为block方式的时候可以rwx,使用Filesystem时不支持RWX)
  • persistentVolumeReclaimPolicy:设置资源回收类型
Retain: 保留数据,需要手工处理;
Recycle: 简单清除文件的操作(例如运行rm -rf /thevolume/*命令),只有 NFS 和 HostPath 两种类型的 PV支持 Recycle 策略。
Delete: 与PV相连的后端存储完成Volume的删除操作,AWSElasticBlockStore、 GCEPersistentDis、 AzureDisk和Cinder类型的PV支持 Delete策略。
  • volumeMode:
1:文件系统模式的PV将以目录(Directory)形式挂载到Pod内,文件系统类型在sc中定义,默认情况下容器使用  Filesystem类型

2:块设备,如果设备是空的,Kubernetes则会自动在块设备上创建一个文件系统。支持块设备的存储类型会以裸设备 (Raw Block Device) 的形式挂载到容器内,并且不会创建任何文件系统,适用于需要直接操作裸设备(速度最快)的应用程序。
  • 亲和性nodeAffinity
PV可以设置节点亲和性来限制只能通过某些Node访问Volume,可以在PV定义的nodeAffinity字段中进行设置。使用这些Volume的Pod将被调度到满足条件的 Node上。这种情况多用于local-path的环境中
nodeAffinity:
        required:
        nodeSelectorTerms:
        - matchExpressions:
          - key: kubernetes.io/hostname 
            operator: In 
            values:
            - local-node      ###当label的key和values都匹配时才会在对应的节点创建pv
  • 总结
在使用pv的过程中,会出现以下几种状态
   Available:可用状态,还未与某个PVC绑定;
   Bound:已与某个PVC绑定;
   Released:与之绑定的PVC已被删除,但未完成资源回收,不能被其他 PVC使用;
   Failed:自动资源回收失败。
Logo

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

更多推荐