存储卷 数据卷(Volume)使用方式 常见的容器存储数据卷使用方式如下: 静态存储卷:静态存储卷一般是指由管理员创建的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:aliclouddisktopology parameters: type:cloudssd provisioner:diskplugin.csi.ctyun.com reclaimPolicy:Delete allowVolumeExpansion:true volumeBindingMode:WaitForFirstConsumer 参数 描述 reclaimPolicy 用来指定创建PV的persistentVolumeReclaimPolicy字段值,支持Delete和Retain。 l Delete表示动态创建的PV,在销毁的时候也会自动销毁。 l Retain表示动态创建的PV,不会自动销毁,而是由管理员处理。 allowVolumeExpansion 定义由此存储类创建的PV是否运行动态扩容,默认为false。是否能动态扩容是由底层存储插件来实现的,这里只是一个开关。 volumeBindingMode 表示动态创建PV的时间,支持Immediate和WaitForFirstConsumer,分别表示立即创建和延迟创建。 延迟绑定:针对某类存储(例如天翼云云盘)在挂载属性上有所限制,只能挂载相同可用区的数据卷和节点,不在同一个可用区不可以挂载。这种类型的存储卷通常遇到如下问题: 1、创建了A可用区的数据卷,但是A可用区的节点资源已经耗光,导致Pod启动无法完成挂载。 2、集群管理员在规划PVC、PV的时候不能确定在哪些可用区创建多个PV来备用。 3、StorageClass中的volumeBindingMode字段正是用来解决此问题,如果将volumeBindingMode配置为WaitForFirstConsumer值,则表示存储插件在收到PVC Pending的时候不会立即进行数据卷创建,而是等待这个PVC被Pod消费的时候才执行创建流程。 动态存储卷的优势: 1、动态存储卷让Kubernetes实现了PV的自动化生命周期管理,PV的创建、删除都通过Provisioner完成。 2、自动化创建PV对象,减少了配置复杂度和系统管理员的工作量。 3、动态卷可以实现PVC对存储的需求容量和Provisioner出来的PV容量一致,实现存储容量规划最优。 4、挂在SubPath卷:Kubernetes提供了volumeMounts.subPath属性配置,可用于指定所引用的卷内的子路径,而不是其根路径。