一、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.2Kubernetes支持的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-1apiVersion: 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资源。