热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Kubernetes1.6新特性系列|动态配置和存储类[kubernetes实战开发]

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

导读:
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.4是Beta)。这是完成Kubernetes存储自动化愿景的一大重要进步,它允许集群管理员控制资源的配置,也能够让用户更好地专注应用开发。这些所有的有点,在使用Kubernetes 1.6之前,这些面向用户的变化都是非常重要的。

1、怎么使用Storage Classes

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

apiVersion: v1

kind: PersistentVolumeClaim

metadata:

 name: mypvc

 namespace: testns

spec:

 accessModes:

 - ReadWriteOnce

 resources:

   requests:

     storage: 100Gi

 storageClassName: gold

为了促进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 Services gp2 aws-ebs
Microsoft Auzer standard azure-disk
Google Cloud Platform standard gcd-pd
OpenStack standard cinder
VMware vSphere thin vsphere-volume

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

2、动态配置卷和回收策略

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

如何设置回收策略?

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

3、FAQs

A、如何使用默认的StorageClass?

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

apiVersion: v1

kind: PersistentVolumeClaim

metadata:

 name: mypvc

 namespace: testns

spec:

 accessModes:

 - ReadWriteOnce

 resources:

   requests:

     storage: 100Gi

B、能添加自己的StorageClass吗?

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

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

kind: StorageClass

apiVersion: storage.k8s.io/v1

metadata:

 name: gold

provisioner: kubernetes.io/gce-pd

parameters:

 type: pd-ssd

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

C、是否已经安装了默认的StorageClass?

您可以使用kubectl命令检查StorageClass对象。在下面的例子中有两个StorageClass:gold和standard。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

Events:         

D、能过删除/关闭默认的StorageClass?

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

当然,您可以停掉默认的StorageClass行为,通过删除annotation:storageclass.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。

作者及原文链接

作者: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

20161219151628

译者微信公众号推荐


推荐阅读
  • 在Kubernetes上部署多个Mitmproxy代理服务器以实现高效流量管理 ... [详细]
  • 本文探讨了Android系统中支持的图像格式及其在不同版本中的兼容性问题,重点涵盖了存储、HTTP传输、相机功能以及SparseArray的应用。文章详细分析了从Android 10 (API 29) 到Android 11 的存储规范变化,并讨论了这些变化对图像处理的影响。此外,还介绍了如何通过系统升级和代码优化来解决版本兼容性问题,以确保应用程序在不同Android版本中稳定运行。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • Envoy 流量分配策略优化
    在本研究中,我们对Envoy的流量分配策略进行了优化,旨在提高系统的稳定性和性能。实验环境包括一个前端代理服务(Envoy,IP地址为172.31.57.10)和五个后端服务。通过调整Envoy的配置,实现了更高效的流量分发和负载均衡,显著提升了整体系统的响应速度和可靠性。 ... [详细]
  • Spring Boot 中配置全局文件上传路径并实现文件上传功能
    本文介绍如何在 Spring Boot 项目中配置全局文件上传路径,并通过读取配置项实现文件上传功能。通过这种方式,可以更好地管理和维护文件路径。 ... [详细]
  • 本文详细介绍了如何使用OpenSSL自建CA证书的步骤,包括准备工作、生成CA证书、生成服务器待签证书以及证书签名等过程。 ... [详细]
  • 本文将详细介绍如何注册码云账号、配置SSH公钥、安装必要的开发工具,并逐步讲解如何下载、编译 HarmonyOS 2.0 源码。通过本文,您将能够顺利完成 HarmonyOS 2.0 的环境搭建和源码编译。 ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • 在JavaWeb开发中,文件上传是一个常见的需求。无论是通过表单还是其他方式上传文件,都必须使用POST请求。前端部分通常采用HTML表单来实现文件选择和提交功能。后端则利用Apache Commons FileUpload库来处理上传的文件,该库提供了强大的文件解析和存储能力,能够高效地处理各种文件类型。此外,为了提高系统的安全性和稳定性,还需要对上传文件的大小、格式等进行严格的校验和限制。 ... [详细]
  • 大类|电阻器_使用Requests、Etree、BeautifulSoup、Pandas和Path库进行数据抓取与处理 | 将指定区域内容保存为HTML和Excel格式
    大类|电阻器_使用Requests、Etree、BeautifulSoup、Pandas和Path库进行数据抓取与处理 | 将指定区域内容保存为HTML和Excel格式 ... [详细]
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
  • 本文详细探讨了几种常用的Java后端开发框架组合及其具体应用场景。通过对比分析Spring Boot、MyBatis、Hibernate等框架的特点和优势,结合实际项目需求,为开发者提供了选择合适框架组合的参考依据。同时,文章还介绍了这些框架在微服务架构中的应用,帮助读者更好地理解和运用这些技术。 ... [详细]
  • 本文详细解析了 Android 系统启动过程中的核心文件 `init.c`,探讨了其在系统初始化阶段的关键作用。通过对 `init.c` 的源代码进行深入分析,揭示了其如何管理进程、解析配置文件以及执行系统启动脚本。此外,文章还介绍了 `init` 进程的生命周期及其与内核的交互方式,为开发者提供了深入了解 Android 启动机制的宝贵资料。 ... [详细]
  • 在本文中,我们将探讨如何在Docker环境中高效地管理和利用数据库。首先,需要安装Docker Desktop以确保本地环境准备就绪。接下来,可以从Docker Hub中选择合适的数据库镜像,并通过简单的命令将其拉取到本地。此外,我们还将介绍如何配置和优化这些数据库容器,以实现最佳性能和安全性。 ... [详细]
  • 本文详细介绍了在Linux系统上编译安装MySQL 5.5源码的步骤。首先,通过Yum安装必要的依赖软件包,如GCC、GCC-C++等,确保编译环境的完备。接着,下载并解压MySQL 5.5的源码包,配置编译选项,进行编译和安装。最后,完成安装后,进行基本的配置和启动测试,确保MySQL服务正常运行。 ... [详细]
author-avatar
黄初伦伟彦宜婷
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有