k8s学习记录【进阶篇】,为什么引入PV和PVC?PV的访问策略、回收策略及文件存储、块存储、对象存储区别(二十三)
文章中资料参考来源2022 云原生Kubernetes全栈架构师
1、Volume无法解决的问题
- 当某个数据卷不再被挂载使用时,里面的数据如何处理?
- 如果想要实现只读挂载如何处理?
- 如果想要只能一个Pod挂载如何处理?
- 如何只允许某个Pod使用10G的空间?
PersistentVolume:简称PV,是由Kubernetes管理员设置的存储,可以配置Ceph、NFS、GlusterFS等常用存储配置,相对于Volume配置,提供了更多的功能,比如生命周期的个管理、大小的限制。PV分为静态和动态
PersistentVolumeClaim:简称PVC,是对存储PV的请求,表示需要什么类型的PV,需要存储的技术人员只需要配置PVC即可使用存储,或者Volume配置PVC的名称即可。
官方文档:https://kubernetes.io/docs/concepts/storage/persistent-volumes/
2、存储配置-PV访问策略
- ReadWriteOnce:可以被单节点以读写模式挂载,命令行中可以被缩写为RWO
- ReadOnlyMany:可以被多个节点以只读模式挂载,命令行中可以被缩写为ROX
- ReadWriteMany:可以被多个节点以读写模式挂载,命令行中可以被缩写为RWX
- ReadWriteOncePod:单个Pod可以读写挂在卷。这个策略只支持CSI卷和Kubernetes版本1.22+,命令行中可以被缩写为RWOP
- 可以通过accessModes字段来进行访问策略配置
官方文档:https://kubernetes.io/docs/concepts/storage/persistent-volumes/#access-modes
Volume Plugin | ReadWriteOnce | ReadOnlyMany | ReadWriteMany | ReadWriteOncePod |
---|---|---|---|---|
AWSElasticBlockStore | ✓ | |||
AzureFile | ✓ | ✓ | ✓ | - |
AzureDisk | ✓ | - | - | - |
CephFS | ✓ | ✓ | ✓ | - |
Cinder | ✓ | - | - | - |
CSI | depends on the driver | depends on the driver | depends on the driver | depends on the driver |
FC | ✓ | ✓ | - | - |
FlexVolume | ✓ | ✓ | depends on the driver | - |
Flocker | ✓ | - | - | - |
GCEPersistentDisk | ✓ | ✓ | - | - |
Glusterfs | ✓ | ✓ | ✓ | - |
HostPath | ✓ | - | - | - |
iSCSI | ✓ | ✓ | - | - |
Quobyte | ✓ | ✓ | ✓ | - |
NFS | ✓ | ✓ | ✓ | - |
RBD | ✓ | ✓ | - | - |
VsphereVolume | ✓ | - | - (works when Pods are collocated) | - |
PortworxVolume | ✓ | - | ✓ | - |
StorageOS | ✓ | - | - | - |
3、存储配置-PV回收策略
- Retain:保留,该策略允许手动回收资源,当删除PVC时,PV仍然存在,PV被视为已释放,管理员可以手动回收卷。
- Recycle:回收,如果Volume插件支持,Recycle策略会对卷执行rm -rf清理该PV,并使其可用于下一个新的PVC,但是本策略将来会被弃用,目前只有NFS和HostPath支持该策略。
- Delete:删除,如果Volume插件支持,删除PVC时会同时删除PV,动态卷默认为Delete,目前支持Delete的存储后端包括AWS EBS,GCE PD,Azure Disk,OpenStack Cinder等
- 可以通过persistentVolumeReclaimPolicy:Recycle字段配置
官方文档:
https://kubernetes.io/docs/concepts/storage/persistent-volumes/#reclaim-policy
官方示例
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv0003
spec:
capacity:
storage: 5Gi
volumeMode: Filesystem
accessModes: #PV访问策略配置
- ReadWriteOnce
persistentVolumeReclaimPolicy: Recycle #PV回收策略配置
storageClassName: slow
mountOptions:
- hard
- nfsvers=4.1
nfs:
path: /tmp
server: 172.17.0.2
4、PV的状态
- Available:可用,没有被PVC绑定的空闲资源
- Bound:已绑定,已经被PVC绑定
- Released:已释放,PVC被删除,但是资源还未被重新使用
- Failed:失败,自动回收失败
5、存储分类
- 文件存储:一些数据可能需要被多个节点使用,比如用户的头像,用户上传的文件等,实现方式:NFS、NAS【推荐】、CephFS【推荐】、FTP等
- 块存储:一些数据只能被一个节点使用,或者是需要将一块裸盘整个挂载使用,比如数据库、Redis等,实现方式:Ceph、GlusterFS、公有云
- 对象存储:由程序代码直接实现的一种存储方式,云原生应用无状态化常用的实现方式,实现方式:一般是符合S3协议的云存储,比如AWS的S3存储、Minio等