一、概述

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

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

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

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

二、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社区为您提供最前沿的新闻资讯和知识内容

更多推荐