原文地址: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 Class,定义和用法

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

下面的例子中,PVC 使用了一个名为 'gold' 的存储类。

apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: mypvcnamespace: testns
spec:accessModes:- ReadWriteOnceresources:requests:storage: 100GistorageClassName: gold

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

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

    • 如果用户没有指定存储类,他也不会有关联的存储类。
    • 如果 PV 转为 "Available" 状态(例如删除了关联的 PVC 导致 PV 回收),则会按照下面的规则进行处理。
  • 如果没有给 PVC 指定 storageClassName,会使用缺省的 StorageClass。
    • 现有的没有指定缺省 Storage Class 标签 "Available" 状态的 PV,不会分配给 PVC。
  • 如果 PVC 中给 storageClassName 赋值为空字符串(""),就不会使用 Storage Class(就是说,动态卷供给功能无效)
    • 现有的 “Available” PV(没有指定 storageClassName)会被判定为可以帮到到这个 PVC。
  • 如果把 storageClassName 设置为一个特定的值,就会使用对应的存储类。
    • 已有的 “Available” 的属于该 storageClassName 的 PV 会被判定可以用于该 PVC。
    • 如果不存在对应的 Storage Class,则会导致该 PVC 的失败。

null 和 '' 的区别吧。

为了降低设置缺省 StorageClass 的负担,从 1.6 开始 Kubernetes 会使用 add-on manager 自动安装多个云提供商对应的 Storage Class,用户无需对其进行指派就可以在 PVC 中进行使用。

下表描述了不同云供应商所对应的缺省安装的 Storage Class。

云供应商 缺省的 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: mypvcnamespace: testns
spec:accessModes:- ReadWriteOnceresources:requests:storage: 100Gi

我能添加自己的 Storage Class 么?

是的,要创建自己的 Storage Class,首先要决定的是在集群中使用何种存储。接下来,创建一个 StorageClass 对象,调整参数使之适应具体需求。对大多数用户来说,创建这一对象的最简单方式就是编写一个 yaml 文件,然后使用 kubectl create -f。接下来的例子是 Google Cloud Platform 里创建一个名为 "gold" 的类型为 "pd-ssd" 的 Storage Class。因为系统中存在多个 Storage Class,管理员希望多数工作负载使用缺省的 Storage Class("pd-standard")。“gold” 可以用于对性能要求较高的工作负载。

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

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

可以利用 kubectl 来完成这一任务。在下面的例子中会看到,有 "gold" 和 "standard" 两个 Storage Class。"gold" 是自定义的,"standard" 是由 Kubernetes 安装并设为缺省的。

$ 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 Class 么?

缺省的 Storage Class 是无法删除的。这些 Storage Class 是作为集群 Addons 安装的,如果被删除,他们会自动创建。

然而可以通过移除一个注解,来禁用“缺省”行为:storageclass.beta.kubernetes.io/is-default-class

如果所有的 StorageClass 对象都没有被注解为缺省,那么没有指定 StorageClass 的 PVC 就无法触发自动供给,只能降级使用旧式的 PV 对象。

我能把现有的 PV 指定为某种 StorageClass 么?

是的,可以用编辑对象的方式,,给现存 PV 添加一个 storageClassName 字段,来为其指派 StorageClass。

删除一个 PVC 会发生什么?

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

转载于:https://www.cnblogs.com/boshen-hzb/p/6673884.html

Kubernetes (1.6) 中的存储类及其动态供给相关推荐

  1. C中静态存储区和动态存储区

    c语言中需要内存来存放数据.而内存主要分为两类:静态存储区和动态存储区. 1.静态存储区 (1)分为数据区(只读数据区(代码区?在linux中又叫文本段.text).读写数据区.data).未初始化区 ...

  2. c语言中静态存储类别是,小议C语言中数据的存储类型

    C语言中的一些说明和定义会用到存储类型这样一个概念,在C语言中存储类型会用到下述几个关键字:auto,static,register,extern. 看下面的简略图大家可以明确程序在进行存储时是分为三 ...

  3. C中关于存储类的理解

    1.可以根据一个变量的存储时间.作用域.链接来描述该变量: (1)作用域:代码块作用域(花括号之内的一段代码),函数原型作用域,文件作用域(在所有函数之外定义的变量,从它定义到该文件结尾处都是可见的, ...

  4. k8s存储:卷、持久卷、存储类

    k8s存储:卷.持久卷.存储类 emptyDir:临时数据卷 hostPath:节点数据卷 nfs:网络数据卷 PV:持久卷 持久卷的类型 volumeMode:卷模式 accessModes:访问模 ...

  5. 《C Primer Plus》读书笔记——存储类、链接和内存管理

    背景 距离上次写读书笔记的日子已有半个月了.这段时间一直在做摄像头直立平衡车,也把<C Primer Plus>的中级部分扫了一遍.现在做赛道算法识别遇到瓶颈了,就想把读书笔记补回来.原计 ...

  6. C语言再学习 -- 存储类、链接

    这一章是我看的时间最长的一章了,表面上是有很多关键字和几个函数需要学习,其实我知道是自己最近不在状态了,做项目没进展,看书看不下去,两头都放不下,最后两头都没有做好.不由的想起一句话,你不快乐是因为: ...

  7. c语言存储类_C编程语言的存储类

    c语言存储类 A variable's storage class tells us the following, 变量的存储类告诉我们以下内容: Where the variables would ...

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

    导读: Dynamic Provisioning的目标是完全自动化存储资源的生命周期管理,让用户无需过多的关注存储的管理,可以按需求自动动态创建和调整存储资源.StorageClass本质上是底层存储 ...

  9. c++全局类对象_C++ 类在内存中的存储方式(一)

    说了这么久的 C++ 终于说到类了,还是从内存出发来讨论一下 C++ 的类在内存中的存储方式(之前写过一篇内存对齐的文章,类同样在一定程度上遵循内存对齐原则,不过比结构体复杂一下) 如有侵权,请联系 ...

  10. C语言基础专题 - 存储类(编辑中)

    C语言基础专题 - 存储类 本文介绍了C语言中存储类的相关知识.用法,以及相比之下C++存储类的扩展与差异. 1.

最新文章

  1. Android隐式(远程)启动Service
  2. AI:人工智能概念之机器学习中常用算法的思维导图集合(非常经典、建议收藏)之详细攻略
  3. Nginx_查看并发连接数
  4. Linux Qt打包应用程序--利用linuxdeployqt
  5. LeetCode 126. 单词接龙 II(图的BFS)
  6. Qt文档阅读笔记-QWebEngineView及QML WebEngineView
  7. Delphi 皮肤控件AlphaControls的使用
  8. mysql查询语句有点难_Mysql惯用函数,难点,注意_mysql
  9. 表单的管理作业及答案
  10. Ubuntu下vsftp安装和配置
  11. java软件工程师自我评价_java开发简历自我评价【java简历自我评价模板】
  12. 黑客攻防与电脑安全-从新手到高手
  13. day11_rabbitmq和redis
  14. Redis Client 之 Jedis与Lettuce
  15. ROS三轮全向轮移动底盘 (01)
  16. Python 云标签——玩点浪漫!
  17. html5中将图片的绝对路径转换成文件对象
  18. 智能手表音频特性测试_TicWatch Pro 3 体验:智能手表的集大成者
  19. 莫纳什大学计算机硕士专业怎么样,澳大利亚留学:莫纳什大学计算机硕士的14个专业...
  20. 三极管与场效应管的区别与联系

热门文章

  1. 关闭Oracle 11g的DPR特性
  2. 让一个从未接触过电脑的人测试浏览器
  3. windows安装Composer
  4. bzoj4498: 魔法的碰撞
  5. 家庭记账本开发进度6
  6. mongodb 命令补充
  7. 【shell 练习5】编写简单的多级菜单
  8. ZooKeeper分布式过程协同技术详解2——了解ZooKeeper
  9. Java Mysql数据库创建视图、索引、备份和恢复
  10. UVa 11991 一道简单题