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 |