StorageClass
- 静态存储卷
静态存储卷一般是指由管理员创建的PV。所有的数据卷(Volume)都支持创建静态存储卷。
静态存储卷先由集群管理员分析集群中存储需求,并预先分配一些存储介质(例如云盘、NAS盘等),同时创建对应的PV对象。创建好的PV对象等待PVC来消费。如果负载中定义了PVC需求,Kubernetes会通过相关规则实现PVC和匹配的PV进行绑定,这样就实现了应用对存储服务的访问能力。
- 动态存储卷
动态存储卷一般是指通过存储插件自动创建的PV。
动态卷一般由集群管理员配置好后端的存储池,并创建相应的模板(StorageClass),当有PVC需要消费PV的时候,根据PVC定义的需求,并参考StorageClass的存储细节,由存储插件动态创建一个PV。StorageClass的定义如下:- StorageClass
当您声明一个PVC时,如果在PVC中添加了StorageClassName字段,意味着当PVC在集群中找不到匹配的PV时,会根据StorageClassName的定义触发相应的Provisioner插件创建合适的PV供绑定,即创建动态数据卷。
动态数据卷由Provisioner插件创建,并通过StorageClassName与PVC进行关联。
-
-
StorageClass可译为存储类,表示为一个创建PV存储卷的模板。在PVC触发自动创建PV的过程中,即使用StorageClass对象中的内容进行创建。其内容如下:
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: alicloud-disk-topology parameters: type: cloud_ssd provisioner: diskplugin.csi.alibabacloud.com reclaimPolicy: Delete allowVolumeExpansion: true volumeBindingMode: WaitForFirstConsumer
参数 描述 reclaimPolicy 用来指定创建PV的persistentVolumeReclaimPolicy字段值,支持Delete和Retain。 - Delete表示动态创建的PV,在销毁的时候也会自动销毁。
- Retain表示动态创建的PV,不会自动销毁,而是由管理员处理。
allowVolumeExpansion 定义由此存储类创建的PV是否运行动态扩容,默认为 false
。是否能动态扩容是由底层存储插件来实现的,这里只是一个开关。volumeBindingMode 表示动态创建PV的时间,支持Immediate和WaitForFirstConsumer,分别表示立即创建和延迟创建。 - 延迟绑定
针对某类存储(例如阿里云云盘)在挂载属性上有所限制,只能挂载相同可用区的数据卷和节点,不在同一个可用区不可以挂载。这种类型的存储卷通常遇到如下问题:
- 创建了A可用区的数据卷,但是A可用区的节点资源已经耗光,导致Pod启动无法完成挂载。
- 集群管理员在规划PVC、PV的时候不能确定在哪些可用区创建多个PV来备用。
StorageClass中的volumeBindingMode字段正是用来解决此问题,如果将volumeBindingMode配置为WaitForFirstConsumer值,则表示存储插件在收到PVC Pending的时候不会立即进行数据卷创建,而是等待这个PVC被Pod消费的时候才执行创建流程。
说明延迟绑定实现原理如下:
Provisioner在收到PVC Pending状态的时候不会立即进行数据卷创建,而是等待这个PVC被Pod消费。如果有Pod消费此PVC,调度器发现PVC是延迟绑定模式,则继续完成调度功能,且调度器会将调度结果通过patch命令到PVC的metadata中。当Provisioner发现PVC中写入了调度信息时,会根据调度信息获取创建目标数据卷的位置信息(区域和节点信息),并触发PV的创建流程。
在多可用区集群环境中,更推荐使用延迟绑定的动态卷方案,目前阿里云ACK集群已经支持上述配置方案。
动态存储卷的优势- 动态存储卷让Kubernetes实现了PV的自动化生命周期管理,PV的创建、删除都通过Provisioner完成。
- 自动化创建PV对象,减少了配置复杂度和系统管理员的工作量。
- 动态卷可以实现PVC对存储的需求容量和Provisioner出来的PV容量一致,实现存储容量规划最优。
问题一:Kubernetes PVC一直处于Pending状态 解决方法:- --feature-gates=RemoveSelfLink=false https://www.jianshu.com/p/bdc54464550f https://blog.csdn.net/Promise_410/article/details/117112550
- StorageClass