云存储硬核技术内幕——(29) 供给侧改革

2022-08-04 16:01:03 浏览数 (1)

在上期,我们提到了,在kubernetes中,静态PV/PVC的存储分配方式,会在造成资源浪费的同时,很大一部分Pod的存储需求得不到满足。

这本质上是因为静态PV的指令性资源调配与未知的PVC需求之间的矛盾,表现的现象则是部分尺寸的PV卷产能过剩,而部分尺寸的PV卷产能不足。

让我们翻回新中国的经济发展史,我们会发现,每当国民经济的平衡明显发生偏移时,党中央就会动态调整资源调配,进行供给侧改革,让供给的产品更适应国民经济的需要。那么,我们有没有办法在kubernetes的存储分配中借鉴这一方法呢?

答案是肯定的——

这种机制叫做StorageClass。

StorageClass是一种对存储资源的抽象定义,提供了存储资源的动态供给模式。

让我们再看看前文中的栗子。

有3个Pod,叫做Pod A,Pod B和Pod C,分别通过PVC申请了3GiB, 2GiB和 5GiB的存储,并指定存储卷分别来自AWS-ebs(AWS提供的块存储服务),RBD(前文提到过的Ceph块存储服务)和iSCSI(通用的通过TCP-IP实现的块存储服务),如下表所示:

容量(GiB)

卷提供者

Pod A

3.0

AWS-ebs

Pod B

2.0

RBD

Pod C

5.0

iSCSI

在应用了StorageClass之后,StorageClass层可以接管PVC,并根据PVC的请求,在StorageClass管理的存储池中为PVC请求分配卷,并挂载给Pod,如下图所示:

图中,StorageClass将存储资源分类为Golden, Silver和Bronze三个等级(Class)。这就是StorageClass的来历。

我们发现,StorageClass可以在AWS-ebs、Ceph RBD和普通iSCSI池中分配存储资源。它还能支持哪些资源呢?

我们翻开Kubernetes的文档:

https://kubernetes.io/docs/concepts/storage/storage-classes/

里面有一张表:

原来,StorageClass除了可以支持前面描述的三种存储之外,还能支持微软Azure(块和文件),GlusterFS(文件),OpenStack Cinder(OpenStack提供的块存储管理系统),普通NFS(文件),Vsphere (VMWare虚拟化系统中块存储管理系统)等数十种存储提供者。

与Kubernetes中大部分资源类似,存储资源在Kubernetes中,也使用yaml进行描述。以Vsphere为例:

代码语言:javascript复制
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: fast
provisioner: kubernetes.io/vsphere-volume
parameters:
  diskformat: zeroedthick

这个yaml中,provisioner字段描述了存储提供者为vsphere-volume,也就是指定了存储类型来自Vsphere。

parameters字段中,有一个参数diskformat为zeroedthick。这个参数是什么意思呢?

熟悉VMWare的同学可能会想起来,在esxi中创建虚拟磁盘的时候,磁盘分配方式有三个选项可选:

thin provision: 创建时虚拟磁盘并不分配所有空间,需要使用时再分配;

zeroedthick:创建时为虚拟磁盘分配所有空间;

eagerzeroedthick:创建时为虚拟磁盘分配所有空间并用0填充;

也就是说,Vsphere会接管这一参数,在创建磁盘时按照该参数创建!

但是,如果其他云存储系统不支持这一参数呢?

这个问题将留到后面解答。

另外一个问题是,如果我们期望把不在上述列表中的存储提供者也接入storageclass,有没有办法实现呢?

这两个问题我们在下期解答。

0 人点赞