Kubernetes(k8s)v1.7新特性 新增StorageOS卷插件与Local持久存储

背景介绍

在Kubernetes中卷的作用在于提供给POD存储,这些存储可以挂载到POD中的容器上,进而给容器提供存储。

从图中可以看到结构体PodSpec有个属性是Volumes,通过这个Volumes属性可以关联到结构体Volume和结构体VolumeSource,而且这个Volumes属性是一个数组类型,就是说POD可以关联到多个不同类型的卷上面。

结构体Container表示POD中的容器,这个结构体有一个属性VolumeMounts,通过这个属性让容器知道具体挂载的存储路径,这个VolumeMounts属性也是一个数组类型,就是说容器可以挂载多个存储路径。

在Kubernetes中还提供了一种持久化存储,持久化存储就是PersistentVolume,简称PV,PV是独立于Pod的生命周期单独存在的。

从图中可以看到kubernetes1.7中提供了两种新的PV插件,分别是StorageOS和Local。

新的卷插件

Kubernetes1.7现在一共支持27种卷插件,(1、kubernetes1.5新特性:支持Photon卷插件 2、 kubernetes1.4新特性:支持两种新的卷插件Quobyte和AzureDisk 3、 Kubernetes 中的 StorageClass 和动态卷供给)其中在Kubernetes1.7中又增加了一种新的卷插件StorageOS。

StorageOS

StorageOS是一家英国的初创公司,给无状态容器提供简单的自动块存储、状态来运行数据库和其他需要企业级存储功能,但避免随之而来的复杂性、刚性以及成本。

它在Linux系统中作为一个容器运行,为其他容器提供插件使用,使其轻松地对有状态的存储服务进行编程访问。它是无关于底层平台的裸机、容器化的服务、虚拟化的服务器或者云。该公司称,StorageOS这款产品是一款门槛极低、拥有完整的企业级功能的存储阵列,与VMware、Docker、AWS以及Google Cloud进行了集成。

StorageOS目前专注于容器是因为这是最大的机会所在。在容器领域,它有四个重点领域:

1、有状态的容器,用于数据库和高速数据库恢复

2、安全云移动性,降低成本

3、性能加速和卷管理

4、持续应用集成和交付

下图是StorageOS当前架构图:

 

新的PV卷插件

Kubernetes1.7现在一共支持20种PV卷插件,其中在Kubernetes1.7中又增加了两种新的卷插件:StorageOS和Local。

Local Storage

Local Storage就是Kubernetes集群中每个节点的本地存储,在Kubernetes1.7中kubelet可以支持对kube-reserved和system-reserved指定本地存储资源,这在1.7中是一个α特性。(参考:1、Kubernetes 1.6新特性系列 | 动态配置和存储  2、 Kubernetes存储机制的实现

通过上面的这个新特性可以看出来,Local Storage同HostPath的区别在于对Pod的调度上,使用Local Storage可以由Kubernetes自动的对Pod进行调度,而是用HostPath只能人工手动调度Pod,因为Kubernetes已经知道了每个节点上kube-reserved和system-reserved设置的本地存储限制。

下面是一个使用Local Storage的样例:

apiVersion: v1  

kind: PersistentVolume  

metadata:  

 name: example-pv  

 annotations:  

       "volume.alpha.kubernetes.io/node-affinity": '{  

           "requiredDuringSchedulingIgnoredDuringExecution": {  

                "nodeSelectorTerms":[  

                    {"matchExpressions": [  

                        { "key":"kubernetes.io/hostname",  

                          "operator":"In",  

                          "values":["example-node"]  

                        }  

                    ]}  

                 ]}  

              }'  

spec:  

   capacity:  

     storage: 100Gi  

   accessModes:  

    -ReadWriteOnce  

   persistentVolumeReclaimPolicy: Delete  

   storageClassName: local-storage  

   local:  

     path: /mnt/disks/ssd1

总结

Kubernetes1.7一共支持27种卷插件,如果算上PV中的LocalStorage类型,那么实际上就达到了28种类型。从这些卷插件就可以看出Kubernetes社区参与厂家越来越多了,这27种卷插件可以覆盖Google Compute Engine公有云、Amazon WebService公有云、Microsoft Azure公有云、基于OpenStack的公有云、基于VMware vSphere的私有云,可以看出来,Kubernetes的影响力在扩大,将来一定会有更多厂商提供对Kubernetes的支持。