k8s pv详解
在Kubernetes 中为了让用户更加方便的使用存储,便引入了 PV 和 PVC这两个资源对象来实现对存储的管理。本章节主要介绍PV。PV 的全称是:PersistentVolume(持久化卷),是对底层的共享存储的一种抽象,PV 由管理员进行创建和配置,它和具体的底层的共享存储技术的实现方式有关,比如 Ceph、GlusterFS、NFS 等,都是通过插件机制完成与共享存储的对接。PV作为对存
·
一、概述
在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:自动资源回收失败。
更多推荐
已为社区贡献26条内容
所有评论(0)