从2018年8月29号发布的最新CNCF用户调查报告可看到,企业在部署Kubernetes架构时面临的容器持久化存储挑战仍然处在高位。虽然当前Kubernetes Rook Ceph与CSI等开放Plugins接口致力于支撑Kubernetes容器持久化存储管理方面的问题,但这些技术均为开源项目,一般的企业客户难于掌握和持续运维这些成熟度不高的存储架构。
![](http://www.ctiforum.com/uploadfile/2019/0430/20190430111457339.jpg)
VMware vSAN产品作为一款企业级分布式架构自2013年推出后,迅速成为SDS市场上主流产品,得到全球范围内19000家客户的采购与部署。
本文致力于介绍如何通过VMware vSAN存储平台解决企业客户所面临Kubernetes容器持久化存储难度。
首先,我们了解为Kubernetes提供持久数据的一些关键要求:
- 工作负载Pod的数据需要通过重新启动/重新调度容器来持久化存储。
- 当容器被重新调度时,它们可能暂时固定在一台主机上,也可能被调度到另一台主机上。
- 对持久数据的Pod引用应该保持工作负载的可移植性。
- 在容器上,重新调度磁盘需要与正确的ID重新关联。
- 容器还可以跨Pod共享和并发访问数据。
因为这些关键要求,使得Kubernetes要实现容器持久化存储非常困难,这也是社区正在致力解决的问题之一,主要困难如下:
- 存储操作(挂载/绑定/创建/删除)需要让Kubernetes协调和编排。
- 需要让Kubernetes调度平台感知到不同存储平台的特征和功能。
- 需要为Kubernetes主节点和所有工作节点提供配置。
其次,正是为了弥补这些关键要求与困难之间的差距,VMware Kubernetes Cloud provider 插件则可以帮助企业客户解决这些问题。
一、为虚拟化下环境下的Kubernets 管理节点和工作节点提供存储空间
![](http://www.ctiforum.com/uploadfile/2019/0430/20190430111542959.jpg)
一般情况下:管理节点和工作节点需要以下空间:
- 2个ephemeral磁盘空间
- 1个持久化空间(用于存放持久化数据如管理节点的etcd key/value数据和工作节点的docker images文件 )
这部分的操作比较简单,只需要在VMware vCenter管理界面为不同管理VM和工作节点创建不同的磁盘即可。
二、 为Kubernets Pod空号提供存储空间
![](http://www.ctiforum.com/uploadfile/2019/0430/20190430111615735.jpg)
Kubernetes Pod存储空间需要通过Persistent Volume (PV)来实现
- 在vSphere vCenter管理界面上通过K8s Cloud Provider plugin将Persistent Volume 映射到vSANDatastore存储空间上的VMDK文件。
- 附加VMDK文件到工作节点VM,作为磁盘使用。
- Pod再从这个磁盘挂载volume进行使用。
三、同时还可通过Cloud Provider plugin为PV分配不同的SPBM,过程如下:
![](http://www.ctiforum.com/uploadfile/2019/0430/20190430111656810.jpg)
可在VMware vCenter管理界面创建对应的SPBM policy,如副本保护数量,磁盘条带数等参数(如右图所示)。
将Provisioner、Datastore、StoragePolicyName等参数写入Pod创建时所用到的volume yaml文件(如左图所示)。
最终将实现Pod volume被分配到vSANDatastore存储空间,并采用指定的存储策略。
来源:vmware中国