背景介绍
在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的支持。