设为首页 收藏本站
查看: 1002|回复: 0

[经验分享] Kubernetes (1.6) 中的存储类及其动态供给

[复制链接]

尚未签到

发表于 2018-1-5 08:32:23 | 显示全部楼层 |阅读模式
  原文地址:http://blog.fleeto.us/translation/dynamic-provisioning-and-storage-classes-kubernetes-0?utm_source=tuicool&utm_medium=referral
  有状态容器的工作过程中,存储是一个关键问题,Kubernetes 对存储的管理提供了有力的支持。Kubernetes 独有的动态卷供给特性,实现了存储卷的按需创建。在这一特性面世之前,集群管理员首先要给云供应商或者存储供应商致电,来申请新的存储卷,然后创建持久卷(PersistentVolue),使其在 Kubernetes 中可见。而动态卷供给功能则实现了这两个步骤的自动化,让管理员无需再进行存储卷预分配。存储资源会依照 StorageClass 定义的方式进行供给。StorageClass 是对底层存储资源的抽象,包含了存储相关的参数,例如磁盘类型(标准类型和 SSD)。
  StorageClass 的多种供给者(Previsioner),为 Kubernetes 提供了针对特定物理存储或云存储的访问能力。目前提供了多种开箱即用的存储支持,另外还有一些在 Kubernetes 孵化器中提供的其他存储支持。
  在 Kubernetes 1.6 中,动态卷供给提升为稳定版(1.4 开始进入 Beta 版)。这在 Kubernetes 的存储自动化过程中是很重要的一步,让管理员能够控制资源的供给方式,让用户能够更专注于自己的应用。在上面提到的益处之外,在升级到 Kubernetes 1.6 之前,还需要了解一下这里涉及到的针对用户方面的变更。

Storage>  StorageClass 是动态存储供给的基础,让集群管理员能够对底层存储进行抽象描述。而用户在 PVC (PersisitantVolumeClaim 持久卷申请)中指需要使用 "storageClassName" 参数就可以指定所需引用的 StorageClass。
  下面的例子中,PVC 使用了一个名为 'gold' 的存储类。
  

apiVersion: v1  
kind: PersistentVolumeClaim
  
metadata:
  name: mypvc
namespace: testns  
spec:
  accessModes:
- ReadWriteOnce  resources:
  requests:
  storage: 100Gi
  storageClassName: gold
  

  管理员可以制定一个缺省的 StorageClass,有了缺省存储类的定义,用户就可以无需指定 storageClassName 直接创建 PVC,这样同时也减少了用户对底层存储进行理解的需要。在使用缺省 StorageClass 时,对 PVC 的操作有些细节需要注意。这些细节对于复用现有 PV (持久卷)是非常重要的。


  • 在升级 1.6 的时候,已经处于 Bound 状态的 PV 状态不变

    • 如果用户没有指定存储类,他也不会有关联的存储类。
    • 如果 PV 转为 "Available" 状态(例如删除了关联的 PVC 导致 PV 回收),则会按照下面的规则进行处理。

  • 如果没有给 PVC 指定 storageClassName,会使用缺省的 StorageClass。

    • 现有的没有指定缺省 Storage>

  • 如果 PVC 中给 storageClassName 赋值为空字符串(""),就不会使用 Storage>
  • 现有的 “Available” PV(没有指定 storageClassName)会被判定为可以帮到到这个 PVC。

如果把 storageClassName 设置为一个特定的值,就会使用对应的存储类。

  • 已有的 “Available” 的属于该 storageClassName 的 PV 会被判定可以用于该 PVC。
    如果不存在对应的 Storage>

  null 和 '' 的区别吧。


  为了降低设置缺省 StorageClass 的负担,从 1.6 开始 Kubernetes 会使用 add-on manager 自动安装多个云提供商对应的 Storage>
  下表描述了不同云供应商所对应的缺省安装的 Storage>
云供应商缺省的 StorageClass 名称缺省的存储供给Amazon Web Services
gp2
aws-ebs
Microsoft Azure
standard
azure-disk
Google Cloud Platform
standard
gce-pd
OpenStack
standard
cinder
VMware vSphere
thin
vsphere-volume
  上表描述的内容是符合多数用户的需要的。 另外还可以指定自己的缺省存储类: https://kubernetes.io/docs/tasks/administer-cluster/change-default-storage-class


动态卷供给的回收策略
  所有的 PV 都有各自的回收策略,这些策略决定了一个 PV 在被释放的时候的行为。因为动态卷供给功能的目的是自动化完成存储资源的整个生命周期,动态供给卷缺省的回收策略就是删除。这一位置,当一个 PVC 释放的时候,对应的动态供给卷就会从存储供应者这里进行删除。如果这不符合我们的需要,用户必须在卷供给之后定义该 PV 的回收策略。

如何变更动态供给卷的的回收策略
  可以编辑 PV 对象的 persistentVolumeReclaimPolicy 字段,来对回收策略进行变更。

  参考:https://kubernetes.io/docs/user-guide/persistent-volumes/#reclaim-policy


FAQ

如何使用缺省的 StorageClass
  如果你的集群有符合需要的 StorageClass,然后你只需要使用 PVC,其他的工作就可以交给卷供给功能。这里不需要指定 storageClassName。
  

apiVersion: v1  
kind: PersistentVolumeClaim
  
metadata:
  name: mypvc
namespace: testns  
spec:
  accessModes:
- ReadWriteOnce  resources:
  requests:
  storage: 100Gi
  


我能添加自己的 Storage>
  是的,要创建自己的 Storage>kubectl create -f。接下来的例子是 Google Cloud Platform 里创建一个名为 "gold" 的类型为 "pd-ssd" 的 Storage>  

kind: StorageClass  
apiVersion: storage.k8s.io
/v1  
metadata:
  name: gold
  
provisioner: kubernetes.io
/gce-pd  
parameters:
  type: pd
-ssd  


我怎么检查缺省安装的 StorageClass ?

  可以利用 kubectl 来完成这一任务。在下面的例子中会看到,有 "gold" 和 "standard" 两个 Storage>  

$ kubectl get sc  
NAME                 TYPE
  
gold                 kubernetes.io
/gce-pd  
standard (
default)   kubernetes.io/gce-pd  

  

$ kubectl describe storageclass standard  
Name:       standard
  
IsDefaultClass: Yes
  
Annotations: storageclass.beta.kubernetes.io
/is-default-class=true  
Provisioner: kubernetes.io
/gce-pd  
Parameters: type
=pd-standard  


我能删除/关闭缺省的 Storage>
  缺省的 Storage>  然而可以通过移除一个注解,来禁用“缺省”行为:storageclass.beta.kubernetes.io/is-default-class。
  如果所有的 StorageClass 对象都没有被注解为缺省,那么没有指定 StorageClass 的 PVC 就无法触发自动供给,只能降级使用旧式的 PV 对象。

我能把现有的 PV 指定为某种 StorageClass 么?
  是的,可以用编辑对象的方式,,给现存 PV 添加一个 storageClassName 字段,来为其指派 StorageClass。

删除一个 PVC 会发生什么?
  如果一个卷是动态供给的,缺省的回收策略就是 “delete”,也就是删除。这就意味着缺省情况下,PVC 如果被删除,下面关联的 PV 和存储也会被删除。如果想要保留卷上的数据,必须在 PV 供给之后把回收策略从 "delete" 改为 "retain"。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-431767-1-1.html 上篇帖子: 在Docker和Kubernetes上运行MongoDB微服务 下篇帖子: Kubernetes Authenticating认证
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表