K8S中的StorageClass
前言
StorageClass
为管理员提供了一种描述他们提供的存储Class
的方法。不同的类可能映射到服务质量级别、备份策略或集群管理员确定的任意策略。 Kubernetes
本身对类代表什么没有意见。这个概念有时在其他存储系统中称为profiles
。
每个 StorageClass
都包含字段 provisioner
、parameters
和 reclaimPolicy
,当需要动态配置属于该类的 PersistentVolume
时使用这些字段。
StorageClass
对象的名称很重要,它是用户请求特定类的方式。管理员在第一次创建StorageClass
对象时设置类的名称和其他参数,对象一旦创建就不能更新。
管理员只能为不请求绑定任何特定类的 PVC
指定默认 StorageClass
:有关详细信息,请参阅 PersistentVolumeClaim
部分。
1 | apiVersion: storage.k8s.io/v1 |
属性
Provisioner
分配器
每个StorageClass
都有一个provisioner
,决定使用什么卷插件来配置PV
。这个字段必须被指定。
分配器分为:内部分配器、外部分配器
Reclaim Policy
回收策略
由 StorageClass
动态创建的 PersistentVolume
将具有在类的 reclaimPolicy
字段中指定的回收策略,该字段可以是 Delete
或 Retain
。如果在创建 StorageClass
对象时未指定 reclaimPolicy
,则默认为 Delete
。
手动创建并通过 StorageClass
管理的 PersistentVolume
将具有在创建时分配的任何回收策略
Allow Volume Expansion
允许卷扩展
PersistentVolume
可以配置为可扩展。此功能设置为 true 时,允许用户通过编辑相应的 PVC 对象来调整卷的大小。
Mount Options
挂载
由 StorageClass
动态创建的 PersistentVolume
将具有在类的 mountOptions
字段中指定的挂载选项。
如果卷插件不支持挂载选项但指定了挂载选项,则配置将失败。挂载选项未在类或 PV
上验证。如果挂载选项无效,则 PV
挂载失败
Volume Binding Mode
volumeBindingMode
字段控制何时应该发生卷绑定和动态配置。未设置时,默认使用“立即”模式。
即时模式表示一旦创建 PersistentVolumeClaim
,就会发生卷绑定和动态供应。对于拓扑受限且无法从集群中的所有节点全局访问的存储后端,将在不知道 Pod
调度要求的情况下绑定或配置 PersistentVolume
。这可能会导致不可调度的 Pod
。
当集群操作员指定 WaitForFirstConsumer
卷绑定模式时,在大多数情况下不再需要将配置限制为特定拓扑。但是,如果仍然需要,可以指定 allowedTopologies
。
此示例演示如何将已配置卷的拓扑限制到特定区域,并且应该用作受支持插件的区域和区域参数的替代。
Parameters
存储类具有描述属于该存储类的卷的参数。根据 provisioner
的不同,可以接受不同的参数。例如,参数类型的值 io1
和参数 iopsPerGB
特定于 EBS
。当省略参数时,使用一些默认值。
一个 StorageClass
最多可以定义 512
个参数。参数对象的总长度(包括其键和值)不能超过 256 KiB
NFS
创建存储类
example-nfs-storage-class.yaml
1 | apiVersion: storage.k8s.io/v1 |
server
:Server
是NFS
服务器的主机名或IP
地址。path
:NFS
服务器导出的路径。readOnly
:指示存储是否将被安装为只读的标志(默认为 false)。
Kubernetes
不包含内部 NFS
供应商。您需要使用外部供应商为 NFS
创建 StorageClass
。这里有些例子:
创建pvc
nfs-pvc.yaml
1 | apiVersion: v1 |
使用nfs-pvc
test-deployment.yaml
1 | apiVersion: apps/v1 |
1 | kubectl apply -f test-deployment.yaml |