Kubernetes (1.6) 中的存储类及其动态供给
原文地址: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: 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 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: mypvc
namespace: testns
spec:
accessModes:
- ReadWriteOnce
resources:
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"。
Kubernetes (1.6) 中的存储类及其动态供给的更多相关文章
- or1200中载入存储类指令说明
下面内容摘自<步步惊芯--软核处理器内部设计分析>一书 OR1200中实现的载入存储类指令有8条,每条指令的作用与说明如表9.1所看到的. watermark/2/text/aHR0cDo ...
- C Primer Plus之存储类、链接和内存管理
存储时期即生存周期——变量在内存中保留的时间 变量的作用域和链接一起表明程序的哪些部分可以通过变量名来使用该变量. 注意:生存期和作用域是两个不同的概念. 作用域 作用域描述了程序中可以访问一个 ...
- 新手小白入门C语言第五章:C存储类
一 .存储类 在理解C的存储类之前,首先要搞懂的概念有:作用域.生存周期.连接属性 C中的存储类说明符实际上是上述属性的不同组合 作用域:一个C变量的作用域可以是 代码块作用域(在函数内部代码块中定义 ...
- Kubernetes中的存储(六)
一.ConfigMap 1,介绍 ConfigMap 功能在 Kuberbetes 1.2 版本中引入,许多应用程序会从配置文件.命令行参数或环境变量中读取配置信息.ConfigMap API 给我们 ...
- kubernetes存储类与PV与PVC关系及实践
StorageClass & PV & PVC关系图 Volumes是最基础的存储抽象,其支持多种类型,包括本地存储.NFS.FC以及众多的云存储,我们也可以编写自己的存储插件来支持特 ...
- C中存储类、链接和内存管理
在C语言中,有5种不同的存储类型,即存储类.在介绍存储类之前,需要首先简单介绍几个术语.如下: 作用域:描述程序中可以访问一个标识符的一个或多个区域.一个C变量的作用域可以是代码块作用域.函数原型作用 ...
- union 中可以存储的是不带构造函数的类对象
union 中可以存储的是不带构造函数的类对象 否则不符合逻辑 为什么不符合逻辑?
- 【转载】浅析从外部访问 Kubernetes 集群中应用的几种方式
一般情况下,Kubernetes 的 Cluster Network 是属于私有网络,只能在 Cluster Network 内部才能访问部署的应用.那么如何才能将 Kubernetes 集群中的应用 ...
- k8s教程:Kubernetes集群使用网络存储NFS
NFS存储 NFS即网络文件系统Network File System,它是一种分布式文件系统协议,最初是由Sun MicroSystems公司开发的类Unix操作系统之上的一款经典网络存储方案,其功 ...
随机推荐
- 关于微信js接口调用时,token效期问题
如果一个应用的不同模块分配两个独立的公众号微官网使用,这时调用JS接口生成的token一定就冲突,原因是,token的有效期为两个小时. 解决方案: 将两个公众号的APPID与SERVERID分给不同 ...
- socket编程之select()
int select(int maxfdp,fd_set *readfds,fd_set *writefds,fd_set *errorfds,struct timeval *timeout); 参数 ...
- apache 自定义404错误页面
1.有些提供web服务的网站,在用户访问一个不存在的网站文件时,会提示404错误,如下所示: 现在要求自定义一个错误页面,也就是出现404错误代码时,跳转到我们自定义的网址上.下面记录下方法: 1.编 ...
- 热门数据挖掘模型应用入门(一): LASSO回归
热门数据挖掘模型应用入门(一): LASSO回归 2016-10-10 20:46 作者简介: 侯澄钧,毕业于俄亥俄州立大学运筹学博士项目, 目前在美国从事个人保险产品(Personal Line)相 ...
- 第八章 分布式配置中心:Spring Cloud Config
Spring Cloud Config 是 Spring Cloud 团队创建的一个全新项目,用来为分布式系统中的基础设施和微服务应用提供集中化的外部配置支持, 它分为服务端与客户端两个部分. 其中服 ...
- 微信浏览器清缓存、cookie等
微信浏览器访问:http://debugx5.qq.com
- oracle常用函数总结(二)
之前也有写过“oracle常用函数总结(一)”,为了尽量找全常见oracle函数,笔者特意查找了相关资料来作为参考,下边给大家罗列出来,部分和之前有重复的,希望能帮到大家! 列举了31个函数和1个分组 ...
- xmlhttp的OnReadyStateChange事件
这两天抽空升级了一下自己做的pon资料表,增加了OLT拓扑自动发现以及业务从MSE至OLT的全自动下发 等功能,让人没想到的是在处理xmlhttp回调时死活接收不到反馈信息, 在Excel论坛和微软官 ...
- 全面了解POI操作Microsoft Office(Word、Excel、PowerPoint)
POI 与 Microsoft Office 1. POI 简介 POI 是 Apache 下的 Jakata 项目的一个子项目,主要用于提供 java 操作 Microsoft Office 办公套 ...
- Custom Draw 基础(转载)
common control 4.7版本介绍了一个新的特性叫做Custom Draw,这个名字显得模糊不清,让人有点摸不着头脑,而且MSDN里也只给出了一些如风的解释和例子,没有谁告诉你你想知道的,和 ...