【51CTO.com快译】概述:Kubernetes中的卷是什么?
在Kubernetes中,存储卷抽象用于提供API,该API将存储的物理实现从应用程序资源的使用方式中抽象出来。在Kubernetes上运行的容器并不存储它们所创建或处理的数据。卷本质上提供了一个存储目录,运行在Pod中的容器可以使用该目录来存储和共享数据。
Kubernetes支持两种主要类型的卷:
(1)临时卷——这些是用于需要存储但不需要在重新启动后访问数据的应用程序。临时卷仅持续其Pod的生命周期,并在Pod停止运行时被删除。临时卷适用于内存大小有限且可能会影响性能的低延迟应用程序。Kubernetes允许使用各种不同用途的临时卷,其中包括:
- 空目录
- Secrets、ConfigMaps和downAPI
- CSI临时卷
- 通用临时卷
(2)持久卷——这是一个API对象,代表Pod使用的物理存储的抽象实现,但它们的持续时间超过了Pod的生命周期。持久卷(PV)是Pod连接到的物理存储的一部分,因此它们可以存储即使在容器重新启动后也可用的数据。
本文将探讨持久卷以及它们在Kubernetes生态系统中解决的问题。
卷插件
Kubernetes实现了容器存储接口(CSI),可以标准化用于存储实现的第三方插件的创建。Kubernetes使用这些插件将节点上的物理存储公开给在集群数据平台中运行的Kubelet。通过这种方式,Kubernetes抽象可以为Pod和容器提供存储资源。CSI支持的插件系统还允许供应商向Kubernetes添加存储系统,而无需修改Kubernetes的核心代码和二进制文件。
一些最流行的Kubernetes CSI插件包括:
- AWS Elastic Block Storage
- Azure disk
- BeeGFS
- CephFS
- Dell EMC PowerMax
- GCE Persistent Disk
- Google Cloud Filestore
- GlusterFS
- Huawei Storage CSI
- HyperV CSI
- IBM Block Storage
- OpenEBS
- Portworx
- Pure Storage CSI
(1)Kubernetes中的持久化存储
一旦CSI插件被设置并在Kubernetes中运行,资源和用户就可以使用Kubernetes存储API对象来使用卷:持久卷(PV)、持久卷声明(PVC)和存储类。本节探讨这些API对象及其在为Kubernetes中的容器提供持久存储方面的作用。
(2)持久卷(PV)
PV是集群可用的块存储,它通过捕获其实现协议的详细信息来公开对象、文件和块存储系统,无论是iSCSI(互联网上的SCSI)、NFS还是特定供应商和云计算提供商提供的任何存储系统。PV的生命周期独立于任何使用它的Pod。这意味着PV会在整个应用程序生命周期中持久保存数据以供容器使用。
PV是一个Kubernetes API对象,其配置类似于:
持久卷声明(PVC)
当用户请求PV存储时,他们使用PVC作为请求特定存储要求(例如访问模式和大小)的Kubernetes对象。PVC是通过将YAML配置文件应用于集群而创建的,其规范类似于:
Pod通过在Pod配置文件中将其声明为卷规范来附加到PVC:
一旦Pod绑定到PVC,PVC会根据配置文件中指定的指定磁盘大小和访问模式将其附加到相应的PV。
静态资源调配vs.动态资源调配
PV可以进行静态配置或动态配置。在静态PV配置中,存储对象首先在主机上创建和配置,然后可供集群使用。在这种情况下,Pod附加到指向此存储对象特定部分的PV。
如果PV是动态配置的,则使用存储类对象来定义指向物理存储系统的不同存储实现特征。存储类对象请求存储对象的一部分,然后创建一个与其配置文件中的规范相匹配的卷。存储类允许将PV自动且动态地分配给Kubernetes对象。
存储类对象的配置文件类似于:
PV和PVC的生命周期
PVC代表对PV资源的请求。两个对象之间的交互遵循以下模式:
(1)供应——这是物理存储系统可供集群用户使用的地方。而供应可以是静态的或动态的。
(2)绑定——将PVC与合适的PV匹配,然后将它们绑定在一起的过程。
(3)使用——Pod消耗卷的过程。
(4)回收——当用户使用完卷时,将删除绑定对象,从而回收存储资源。一些受支持的回收策略包括:
- 保留
- 删除
- 回收
可以使用预绑定程序为特定PV保留一些PV。这意味着PVC将始终绑定到PV,无论其Pod是否正在运行应用程序。
单片存储系统中的PV和PVC
在传统存储系统中,Kubernetes与可虚拟化和聚合多个存储设备的单体存储软件接口。这些设备可以是SAN存储、裸机服务器或基于云的块存储解决方案。该软件与使用PV、PVC和存储类管理存储访问的CSI插件接口。
传统共享存储设施
容器附加存储(CAS)和持久卷(PV)
容器附加存储(CAS)允许企业利用云原生平台的灵活性和可扩展性来扩展卷抽象的功能。在CAS中,存储解决方案作为微服务部署在容器中,可由Kubernetes等编排器管理。CAS集群的数据平台包括运行容器的副本Pod,这些容器提供卷并允许访问存储。CAS集群的控制平台包括策略、存储控制器和数据平台配置。
OpenEBS LocalPV卷
OpenEBS支持为Kubernetes中的本地卷配置动态PV。本地卷是仅可从单个节点(例如个人计算机(PC)或虚拟机(VM))使用的集群存储。本地卷用于可以容忍节点不正常时不可用的应用程序,并使用本地目录、分区和磁盘向群集公开存储资源。这使得该插件更适合需要动态管理和监视的本地需求,以及需要自我管理复制和数据安全的高性能应用程序。本地卷的一些使用情形包括:
- 复制数据库。
- 在单节点集群上运行的边缘工作负载。
- 具有自己的高可用集群(HA)配置的有状态工作负载。
结语
PV向Kubernetes集群公开物理存储实现,以便Pod可以存储和共享数据。使用PV,由不可变容器生成和存储的数据可以在应用程序的整个生命周期中持久使用。
本文探讨了理解Kubernetes持久存储所需的概念,主要关注PV和PVC。CAS通过依赖微服务和容器编排来扩展卷的功能,还允许创建灵活、精细且高度可用的云原生存储基础设施。
原文连接:Understanding Persistent Volumes and PVCs in Kubernetes and OpenEBS,作者:Sudip Sengupta
【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】