Kubernetes 1.6新特性系列 | 动态配置和存储类

来源:互联网 发布:人工智能迅雷下载 编辑:程序博客网 时间:2024/05/29 16:21
 2017-04-05 大伟  容器时代 容器时代

导读:

Dynamic Provisioning的目标是完全自动化存储资源的生命周期管理,让用户无需过多的关注存储的管理,可以按需求自动动态创建和调整存储资源。StorageClass本质上是底层存储介质的抽象:不同的存储介质拥有统一的表示和行为。


作者注:这是五天深入理解Kubernetes新特性系列的第一篇。


存储(Storage)是运行有状态容器的关键要素,Kubernetes提供了强大的原语来管理存储。动态卷配置(Dynamic provisioning)是Kubernetes的独有功能,它可以根据需要动态的创建存储卷。在动态配置之前,集群管理员必须手动调用云/存储服务提供商的接口来配置新的存储卷,然后创建PersistentVolume对象以在Kubernetes中表示和使用他们。通过动态配置,可以实现两个步骤的自动化,无须集群管理员预先配置存储资源,而是使用StorageClass对象制定的供应商来动态配置存储资源,具体请参考用户指南)。StorageClass本质上是为底层存储提供者描绘了蓝图,以及各种参数,例如磁盘类型(例如固态和标准磁盘)。

StorageClasses使用特定的存储平台或者云提供商为Kubernetes提供物理介质。多个存储配置以in-tree的形式(用户手册),但现在也支持out-of-tree配置器(请参阅kubernetes-incubator)。

Kubernetes 1.6正式版中,动态配置被提升至稳定版(Kubernetes 1.4Beta)。这是完成Kubernetes存储自动化愿景的一大重要进步,它允许集群管理员控制资源的配置,也能够让用户更好地专注应用开发。这些所有的有点,在使用Kubernetes 1.6之前,这些面向用户的变化都是非常重要的。


1

怎么使用Storage Classes

StorageClassDynamic Provisioning(动态配置)的基础,允许集群管理员位底层存储平台做定义抽象。用户只需在PersistentVolumeClaim(PVC)通过名字引用StorageClass即可。

为了促进Dynamic Provisioning的使用,此功能允许集群管理指定默认的StorageClass。当Dynamic Provisioning存在时,用户可以创建一个PVC而不需要制定一个StorageClassName,进一步减少了用户用于关注底层存储提供者所需的精力。当使用默认的StorageClasses时,创建PersistentVolumeClaims(PV),这一点尤为重要:

  • Kubernetes 1.6中,已经跟PVCs绑定的PVs依然保持绑定:

    • 除非用户手动添加他们,否则,他们将不具有与他们相关联的StorageClass

    • 如果PV变为“可用”,如果删除的PVC和对应的PV被回收,则它要接受如下约束:

  • 如果PVC中未指定StorageClassName,则默认的StorageClass将用于动态配置(Dynamic Provisioning)。

    • 如果存在并且“可用”,没有StorageClass标签的PV将不被考虑用于绑定到PVC

  • 如果在PVC中将StorageClassName设置为空字符串(""),则不会使用存储类。(即:此PVC禁止使用动态配置)

    • 如果存在并且“可用”,PVs(没有指定StorageClassName),将被考虑用于绑定到PVC

  • 如果StorageClassName设置为特定值,则将使用与之匹配的存储类。

    • 如果存在并且“可用”,匹配到StorageClassNamePV将被考虑用于绑定到PVC

    • 如果不存在对应的存储类,PVC将失败。

为了减轻集群中默认StorageClasses的负担,从Kubernetes 1.6开始,Kubernetes为多个云提供商安装(通过add-on管理器)默认的StorageClasses。要使用这些默认的StorageClasses,用户不需要按名称引用他们,也就是说,不需要在PVC中指定StorageClassName,便可直接使用。

下面的表格显示不同的云提供商预安装的默认StorageClasses

云提供商默认StorageClasses Name默认存储Amazon Web Servicesgp2aws-ebsMicrosoft Auzerstandardazure-diskGoogle Cloud Platformstandardgcd-pdOpenStackstandardcinderVMware vSpherethinvsphere-volume

对于大多数用户来说,选择使用每个云提供商默认的提供的存储是“理智的”,如果想指定自己使用的默认存储方式,请参考用户手册。


2
 

所有的PVs都有一个与之关联的回收策略,规定PV一旦从声明中解除后会发生什么(请参考用户指南)。由于自动化存储资源的生命周期管理,因此动态配置卷(Dynamic Provisioning Volume)的默认回收策略为“删除”。这意味着当PersistentVolumeClaim(PVC)被释放时,动态配置卷会被相应的删除,并且可能数据无法恢复。如果这不是所预期的行为,则在设置卷后,用户必须在相应的PersistentVolume(PV)对象上更改回收策略。

如何设置回收策略?

您可以通过修改PV对象中的persistentVolumeReclaimPolicy字段的值来修改PV的回收策略。更多的细节和不同的回收策略请参考用户手册。


3
 

A

如何使用默认的StorageClass

如果您的集群有一个默认的StorageClass能够满足您的需求,那么您剩下所有需要做的就是创建PersistentVolumeClaim(PVC),剩下的都有默认的动态配置搞定,包括您无需去指定storageClassName


B

能添加自己的StorageClass吗?

当然可以。在添加自己的StorageClass之前,需要先确定动态配置能否在集群上工作。然后,创建一个StorageClass对象并通过设置参数来定制它。对很多用户来说,最简单的创建对象的方式就是通过编写一个yaml文件并通过kubectl create -f来创建。

下面的创建StorageClass的例子使用了Google Cloud Platform,创建了一个pd-ssd,名称为gold

由于集群中可以存在多个类,因此管理员可以为大多数工作负载保存默认值(因为它使用pd-standard),为需要额外的工作负载保留gold类。


C

是否已经安装了默认的StorageClass

您可以使用kubectl命令检查StorageClass对象。在下面的例子中有两个StorageClassgoldstandardgold类是用户自定义的,standard类由Kubernetes默认安装。

云提供商默认StorageClasses Name默认存储Amazon Web Servicesgp2aws-ebsMicrosoft Auzerstandardazure-diskGoogle Cloud Platformstandardgcd-pdOpenStackstandardcinderVMware vSpherethinvsphere-volume



D

能过删除/关闭默认的StorageClass

您不能删除默认的StorageClass,因为它是作为集群的add-on安装的,如果它被删除,会被重新安装。

当然,您可以停掉默认的StorageClass行为,通过删除annotationstorageclass.beta.kubernetes.io/is-default-class

如果没有StorageClass对象标记默认的annotation,那么PersistentVolumeClaim对象(在不指定StorageClass情况下)将不自动触发动态配置。相反,它们将回到绑定可用的*PersistentVolume(PV)*的状态。


E

能否将PVs与一个特殊的StorageClass绑定?

可以。通过改变PV对象的storageClassName字段,可以将一个StorageClass与这个PV绑定。


F

当删除PersistentVolumeClaim(PVC)会发生什么?

如果一个卷是动态配置的卷,则默认的回收策略为“删除”。这意味着,在默认的情况下,当PVC被删除时,基础的PV和对应的存储也会被删除。如果需要保留存储在卷上的数据,则必须在PV被设置之后将回收策略从delete更改为retain


4
 

作者:Saad Ali & Michelle Au, Software Engineers, and Matthew De Lio, Product Manager, Google


原文:http://blog.kubernetes.io/2017/03/dynamic-provisioning-and-storage-classes-kubernetes.html

0 0
原创粉丝点击