知识的价值不在于占有,而在于使用。这篇文章主要讲述PV/PVC/StorageClass相关的知识,希望能为你提供帮助。
一、PV/PVC/StorageClass简介管理存储是管理计算的一个明显问题。该PersistentVolume子系统为用户和管理员提供了一个API,用于抽象如何根据消费方式提供存储的详细信息。为此,我们引入了两个新的API资源:PersistentVolume和PersistentVolumeClaimPersistentVolume(PV)是集群中由管理员配置的一段网络存储。 它是集群中的资源,就像节点是集群资源一样。 PV是容量插件,如Volumes,但其生命周期独立于使用PV的任何单个pod。 此API对象捕获存储实现的详细信息,包括NFS,iSCSI或特定于云提供程序的存储系统。PersistentVolumeClaim(PVC)是由用户进行存储的请求。 它类似于pod。 Pod消耗节点资源,PVC消耗PV资源。Pod可以请求特定级别的资源(CPU和内存)。声明可以请求特定的大小和访问模式(例如,可以一次读/写或多次只读)。虽然PersistentVolumeClaims允许用户使用抽象存储资源,但是PersistentVolumes对于不同的问题,用户通常需要具有不同属性(例如性能)。群集管理员需要能够提供各种PersistentVolumes不同的方式,而不仅仅是大小和访问模式,而不会让用户了解这些卷的实现方式。对于这些需求,有StorageClass 资源。StorageClass为管理员提供了一种描述他们提供的存储的“类”的方法。 不同的类可能映射到服务质量级别,或备份策略,或者由群集管理员确定的任意策略。 Kubernetes本身对于什么类别代表是不言而喻的。 这个概念有时在其他存储系统中称为“配置文件”。PVC和PV是一一对应的。
二、生命周期PV是群集中的资源。PVC是对这些资源的请求,并且还充当对资源的检查。PV和PVC之间的相互作用遵循以下生命周期:Provisioning =>
Binding =>
Using=>
Releasing=>
Recycling供应准备Provisioning---通过集群外的存储系统或者云平台来提供存储持久化支持。- 静态提供Static:集群管理员创建多个PV。 它们携带可供集群用户使用的真实存储的详细信息。 它们存在于Kubernetes API中,可用于消费- 动态提供Dynamic:当管理员创建的静态PV都不匹配用户的PersistentVolumeClaim时,集群可能会尝试为PVC动态配置卷。 此配置基于StorageClasses:PVC必须请求一个类,并且管理员必须已创建并配置该类才能进行动态配置。 要求该类的声明有效地为自己禁用动态配置。绑定Binding---用户创建pvc并指定需要的资源和访问模式。在找到可用pv之前,pvc会保持未绑定状态。使用Using---用户可在pod中像volume一样使用pvc。释放Releasing---用户删除pvc来回收存储资源,pv将变成“released”状态。由于还保留着之前的数据,这些数据需要根据不同的策略来处理,否则这些存储资源无法被其他pvc使用。回收Recycling---pv可以设置三种回收策略:保留(Retain),回收(Recycle)和删除(Delete)。- 保留策略:允许人工处理保留的数据。- 删除策略:将删除pv和外部关联的存储资源,需要插件支持。- 回收策略:将执行清除操作,之后可以被新的pvc使用,需要插件支持。注:目前只有NFS和HostPath类型卷支持回收策略,AWS EBS,GCE PD,Azure Disk和Cinder支持删除(Delete)策略。
三、pv的主要类型GCEPersistentDiskAWSElasticBlockStoreAzureFileAzureDiskFC (Fibre Channel)FlexvolumeFlockerNFSiSCSIRBD (Ceph Block Device)CephFSCinder (OpenStack block storage)GlusterfsVsphereVolumeQuobyte VolumesHostPath (Single node testing only – local storage is not supported in any way and WILL NOT WORK in a multi-node cluster)Portworx VolumesScaleIO VolumesStorageOS
四、pv卷阶段状态Available – 资源尚未被claim使用Bound – 卷已经被绑定到claim了Released – claim被删除,卷处于释放状态,但未被集群回收。Failed – 卷自动回收失败
五、StorageClass1、什么是StorageClass 复制代码 Kubernetes提供了一套可以自动创建PV的机制,即:Dynamic Provisioning.而这个机制的核心在于:StorageClass这个API对象.StorageClass对象会定义下面两部分内容:
- PV的属性.比如,存储类型,Volume的大小等.
- 创建这种PV需要用到的存储插件
- 动创建的 PV 以${namespace}-${pvcName}-${pvName}这样的命名格式创建在 NFS 服务器上的共享数据目录中
- 而当这个 PV 被回收后会以archieved-${namespace}-${pvcName}-${pvName}这样的命名格式存在 NFS 服务器上。
- 创建一个可用的NFS Serve
- 创建Service Account.这是用来管控NFS provisioner在k8s集群中运行的权限
- 创建StorageClass.负责建立PVC并调用NFS provisioner进行预定的工作,并让PV与PVC建立管理
- 创建NFS provisioner.有两个功能,一个是在NFS共享目录下创建挂载点(volume),另一个则是建了PV并将PV与NFS的挂载点建立关联
推荐阅读
- 部署yum仓库及NFS共享服务
- 文本处理和shell练习题
- flutter如何从TextWidget复制文本Flutter专题34
- ceph使用命令总结
- halo博客自动备份到GitHub
- Flutter 专题26 易忽略的小而巧的技术点汇总#星光计划2.0#
- 怎样在网络上发现和阻止加密挖矿攻击
- 系统入门深度学习,直击算法工程师m
- PEX 批量装机