持久卷(PV)与持久卷声明(PVC)创建本地持久化存储_第1页
持久卷(PV)与持久卷声明(PVC)创建本地持久化存储_第2页
持久卷(PV)与持久卷声明(PVC)创建本地持久化存储_第3页
持久卷(PV)与持久卷声明(PVC)创建本地持久化存储_第4页
持久卷(PV)与持久卷声明(PVC)创建本地持久化存储_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

持久卷(PV)与持久卷声明(PVC),创建本地持久化存储持久卷PersistentVolumePersistentVolume(PV)是集群中⼀块存储资源,由管理员主动创建提供或使⽤StorageClass动态提供。它与节点资源⼀样,不属于任何命名空间,有着⾃⼰独⽴的⽣命周期。⽽⽤户则通过PersistentVolumeClaim(PVC)来申请所需的存储资源。1.⽣命周期在Kubernetes集群中,PV作为存储资源存在,Pod通过PVC来使⽤PV。PV和PVC之间的交互过程有着⾃⼰的⽣命周期,这个⽣命周期分为5个阶段:供应(Provisioning):即PV的创建,可以直接创建PV(静态⽅式),也可以使⽤StorageClass(动态⽅式);绑定(Binding):将PV分配给PVC;使⽤(Using):Pod通过PVC使⽤该Volume;释放(Releasing):Pod释放Volume并删除PVC;回收(Reclaiming):回收PV,可以保留PV以便下次使⽤,也可以直接从云存储中删除;根据上述的5个阶段,存储卷的存在下⾯的4种状态:Available:可⽤状态,处于此状态表明PV以及准备就绪了,可以被PVC使⽤了;Bound:绑定状态,表明PV已被分配给了PVC;Released:释放状态,表明PVC解绑PV,但还未执⾏回收策略;Failed:错误状态,表明PV发⽣错误;1.1供应(Provisioning)供应是为集群提供可⽤的存储卷,在Kubernetes中有两种持久化存储卷的提供⽅式:静态或者动态,两者区别在于。1.1.1静态(Static)PV是由Kubernetes的集群管理员创建的,代表真实的存储,可被Pod作为真实存储使⽤。在静态供应的情况下,由集群管理员预先创建PV,开发者创建PVC和Pod,Pod通过PVC使⽤PV提供的存储。静态供应⽅式的过程如下图所⽰:[图⽚上传中...(image-5c62e8-1597076467904-3)]<figcaption></figcaption>2.1.2动态(Dynamic)对于动态的提供⽅式,当管理员创建的静态PV都不能够匹配⽤户的PVC时,集群会尝试⾃动为PVC提供⼀个存储卷,这种提供⽅式基于StorageClass。在动态提供⽅⾯,PVC需要请求⼀个存储类,但此存储类必须由管理员预先创建和配置。集群管理员需要在API-Server中启⽤DefaultStorageClass控制器。动态供应过程如下图所⽰:[图⽚上传中...(image-7fd658-1597076467904-2)]<figcaption></figcaption>1.2绑定(Binding)Kubernetes会动态的将PVC与可⽤的PV的进⾏绑定,如果⼀个PV曾经动态供给到了⼀个新的PVC,那么PVC绑定就是专属的。另外,

⽤户总是能得到它们所要求的存储,但是volume可能超过它们的请求。⼀旦绑定了,PVC绑定就是专属的,⽆论它们的绑定模式是什么。如果没有匹配的PV,那么PVC会⽆限期的处于未绑定状态,直到存在匹配的PV。⽐如,就算集群中存在很多的50G的PV,需要100G容量的PVC也不会匹配满⾜需求的PV,直到集群中有100G的PV时,PVC才会被绑定。PVC会基于下⾯的条件绑定PV,如果下⾯的条件同时存在,则选择符合所有要求的PV进⾏绑定:1.如果PVC指定了存储类,则只会绑定指定了同样存储类的PV;2.如果PVC设置了选择器,则选择器去匹配符合的PV;3.如果没有指定存储类和设置选取器,PVC会根据存储空间容量⼤⼩和访问模式匹配符合的PV。1.3使⽤(Using)Pod把PVC作为卷来使⽤,集群会通过PVC查找绑定的PV,并将其挂接⾄Pod。对于⽀持多种访问⽅式的卷,⽤户在使⽤PVC作为卷时,可以指定需要的访问⽅式。⼀旦⽤户拥有了⼀个已经绑定的PVC,被绑定的PV就归该⽤户所有。⽤户能够通过在Pod的存储卷中包含的PVC,从⽽访问所占有的PV。1.4释放(Releasing)当⽤户完成对卷的使⽤时,可以通过请求API-Server来删除PVC,删除后还可以重新申请,在删除PVC后对应的持久化存储卷被视为“被释放”,但这时还不能给其他的PVC使⽤。之前的PVC数据还保存在卷中,要根据策略来进⾏后续处理。1.5回收(Reclaiming)PV的回收策略向集群阐述了在PVC释放卷时,应如何进⾏后续⼯作。⽬前可以采⽤三种策略:保留,回收或者删除。保留策略允许重新申请这⼀资源。在PVC能够⽀持的情况下,删除策略会同时删除卷以及AWSEBS/GCEPD或者Cinder卷中的存储内容。如果插件能够⽀持,回收策略会执⾏基础的擦除操作(rm-rf/thevolume/*),这⼀卷就能被重新申请了。1.5.1保留保留回收策略允许⼿⼯回收资源。当PVC被删除,PV将继续存储现有的数据,虽然存储卷被处于已释放的状态,但是它对于其他的PVC仍是不可⽤的。管理员能够通过下⾯的步骤⼿⼯回收存储卷:1.删除PV:在PV被删除后,在外部设施中相关的存储资产仍然还在;2.⼿⼯删除遗留在外部存储中的数据;3.⼿⼯删除存储资产,如果需要重⽤这些存储资产,则需要创建新的PV;1.5.2循环此策略将会被遗弃,建议后续使⽤动态供应的模式。循环回收会在存储卷上执⾏基本擦除命令rm-rf/thevolume/,使数据对于新的PVC可⽤。1.5.3删除对于⽀持删除回收策略的存储卷插件,删除即会从Kubernetes中移除PV,也会从相关的外部设施中删除存储资产,例如AWSEBS,GCEPD,AzureDisk或者Cinder存储卷。2.创建持久存储卷在创建持久卷PV时需要指定实际存储类型,类型是作为插件实现的,⽬前⽀持以下插件:GCEPersistentDiskAWSElasticBlockStoreAzureFileAzureDiskCSIFC(FibreChannel)FlexVolumeFlockerNFSiSCSIRBD(CephBlockDevice)CephFSCinder(OpenStackblockstorage)GlusterfsVsphereVolumeQuobyteVolumesHostPath(Singlenodetestingonly--localstorageisnotsupportedinanywayandWILLNOTWORKinamulti-nodecluster)PortworxVolumesScaleIOVolumesStorageOS下⾯是⼀个持久卷的声明YAML配置⽂件。在此配置⽂件中要求提供5Gi的存储空间,存储模式为Filesystem,访问模式是ReadWriteOnce,通过Recycle回收策略进⾏持久化存储卷的回收,指定存储类为slow,使⽤nfs的插件类型。apiVersion:v1kind:PersistentVolumemetadata:name:pvspec:capacity:#容量storage:5GivolumeMode:Filesystem#存储卷模式accessModes:#访问模式-ReadWriteOncepersistentVolumeReclaimPolicy:Recycle#持久化卷回收策略storageClassName:slow#存储类mountOptions:#挂接选项-hard-nfsvers=4.1nfs:path:/tmpserver:复制代码2.1容量(Capacity)PV需通过capcity属性指定存储容量,⽬前capcity属性仅有storage(存储⼤⼩)这唯⼀⼀个设置。2.2存储卷模式(VolumeMode)存储卷模式的默认值为Filesystem。在Kubernetesv1.9版本后⽤户可以指定volumeMode的值,除了⽀持⽂件系统(filesystem)外,也⽀持块设备(rawblockdevices)。2.3访问模式(AccessModes)访问模式的可选范围如下:ReadWriteOnce(缩写RWO):仅允许单个节点挂载进⾏读写;ReadOnlyMany(缩写ROX):允许多个节点挂载且只读;ReadWriteMany(缩写RWX):允许多个节点挂载进⾏读写;即使某个存储卷插件⽀持多种访问模式,但⼀次也只能配置⼀种访问模式。下⾯是各个存储卷插件⽀持的访问模式清单:存储卷插件ReadWriteOnceReadOnlyManyReadWriteManyAWSElasticBlockStore✓––AzureFileAzureDiskCephFS✓✓–✓–✓✓✓✓✓✓✓✓✓✓✓✓✓✓✓✓✓✓✓–✓–CinderFC✓✓––FlexVolumeFlocker––GCEPersistentDiskGlusterfsHostPathiSCSI✓✓––✓–✓––PhotonPersistentDiskQuobyte–✓✓✓–✓✓–NFSRBDVsphereVolumePortworxVolumeScaleIO–(workswhenpodsarecollocated)–✓–✓–StorageOS–2.4类(Class)通过storageClassName属性指定存储类别,即StorageClass资源对象的名称。具有特定类别的PV只能与请求了该类别的PVC进⾏绑定。

2.5回收策略当前的回收策略可选值包括:Retain--持久化卷被释放后,仍保留数据,需要⼿⼯进⾏回收操作;Recycle--回收空间,删除PVC后,执⾏基础擦除命令rm-rf/thevolume/*(NFS、HostPath存储⽀持);Delete--删除PVC后,会删除与PV相关的存储数据(AWSEBS、GCEPD存储⽀持);2.6挂载参数(MountOptions)当PV挂载到⼀个节点时,可能需要设置额外的挂载参数,可以通过mountOptions字段设置。但只有下⾯的存储卷类型⽀持挂载参数:GCEPersistentDiskAWSElasticBlockStoreAzureFileAzureDiskNFSiSCSIRBD(CephBlockDevice)CephFSCinder(OpenStackblockstorage)GlusterfsVsphereVolumeQuobyteVolumesVMwarePhoton3.持久卷声明下⾯是⼀个名称为myclaim的持久卷声明YAML配置⽂件,它的访问模式为ReadWriteOnce,存储卷模式是Filesystem,需要的存储空间⼤⼩为8Gi,指定的存储类为slow,并设置了标签选择器和匹配表达式。kind:PersistentVolumeClaimapiVersion:v1metadata:name:pvcspec:accessModes:#访问模式-ReadWriteOncevolumeMode:Filesystem#存储卷模式resources:#资源requests:storage:8GistorageClassName:slow#存储类selector:#选择器matchLabels:release:"stable"matchExpressions:#匹配表达式-{key:environment,operator:In,values:[dev]}复制代码3.1选择器在PVC中,可以通过标签选择器来进⼀步的过滤PV。选择器的有两种:matchLabels:只有存在与此处的标签⼀样的PV才会被PVC选中;matchExpressions:匹配表达式由键、值和操作符组成,操作符包括In,NotIn,Exists和DoesNotExist,只有符合表达式的PV才能被选择;如果同时设置了matchLabels和matchExpressions,则会进⾏求与(&),即只有同时满⾜上述匹配要求的PV才会被选择。3.2存储类除了使⽤标签过滤PV,还可通过storageClassName属性指定存储类,PV只有为该存储类的才能被绑定到PVC上。4.Pod中使⽤PVCPod通过使⽤PVC来访问PV,Pod需与PVC在同⼀个命名空间中,PVC会与集群中合适的PV进⾏绑定,并将PV挂载到主机和Pod上。kind:PodapiVersion:v1metadata:name:mypodspec:containers:-name:nginximage:nginxvolumeMounts:-mountPath:"/var/www/html"name:mypd#挂载的存储卷的名称volumes:-name:mypdpersistentVolumeClaim:claimName:myclaim#PVC名称复制代码5.本地持久化存储本地持久化存储(LocalPersistentVolume)就是把数据存储到Pod运⾏的宿主机上,其必须保证Pod被调度到具有本地持久化存储的节点上。为什么需要这种类型的存储呢?有时候你的应⽤对磁盘IO有很⾼的要求,⽹络存储性能肯定不如本地的⾼,尤其是本地使⽤了SSD这种磁盘。在⾮本地持久化存储的场景中,我们会先创建PV,然后创建PVC,此时如果两者匹配则会⾃动进⾏绑定。即使是动态PV创建,Pod也会先调度到某个节点上,然后根据PVC进⾏创建PV最后绑定到Pod中。可是对于本地持久化存储有⼀个问题就是PV必须提前准备好,⽽且并⾮每⼀个集群节点都有该PV,因此Pod不能随意调度。那么如何保证Pod⼀定被调度到有PV的节点上呢?这时就需要在PV中声明节点亲和性,且Pod被调度的时候还要考虑卷的分布情况。1.下⾯是PV的定义,即使node02节点上也有/data/vol1⽬录,但PV也不⼀定会在node2上,因为nodeAffinity属性设置了亲和主机node01。apiVersion:v1kind:PersistentVolumemetadata:name:example-pvspec:capacity:storage:5GivolumeMode:FilesystemaccessModes:-ReadWriteOncepersistentVolumeReclaimPolicy:DeletestorageClassName:local-storagelocal:#local类型path:/data/vol1#节点上的具体路径nodeAffinity:#这⾥就设置了节点亲和required:nodeSelectorTerms:-matchExpressions:-key:kubernetes.io/hostnameoperator:Invalues:-node01#这⾥我们使⽤node01节点,该节点有/data/vol1路径复制代码2.定义存储类:kind:StorageClassapiVersion:storage.k8s.io/v1metadata:name:local-storageprovisioner:kubernetes.io/no-provisionervolumeBindingMode:WaitForFirstConsumer复制代码这⾥的volumeBindingMode:WaitForFirstConsumer很关键,表⽰为延迟绑定(等待第⼀个消费者后再进⾏绑定),该配置会影响PVC与PV的绑定时机,只有在出现第⼀个使⽤指定PVC的Pod时,才会将PVC与PV进⾏绑定。因为通常PVC会在有合适的PV时⽴即绑定,但如果Pod被调度到没有该PV的节点上,会导致Pod⼀直被挂起。⽽延迟绑定的作⽤即Pod的调度要参考卷的分布。当调度器开始调度Pod的时候会看看它要求的LPV在哪⾥,然后再调度到该节点,进⾏PVC的绑定,最后再挂载到Pod中,保证了Pod所在的节点⼀定就是LPV所在的节点。所以让PVC延迟绑定,就是要等到使⽤这个PVC的Pod出现在调度器上之后,根据综合评估在来绑定PVC。3.定义PVC:kind:PersistentVolumeClaimapiVersion:v1metadata:name:lo

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论