持久卷

本文档描述了……的当前状态持久卷在库伯内特斯。熟悉建议。

介绍

管理存储与管理计算实例是截然不同的问题。PersistentVolume子系统为用户和管理员提供了一个API,它从存储的使用方式中抽象出如何提供存储的详细信息。为此,我们引入了两个新的API资源:PersistentVolume和PersistentVolumeClaim。

A.PersistentVolume(PV)是群集中已由管理员调配或使用动态调配的存储存储类. 它是集群中的资源,就像节点是集群资源一样。PV是与卷类似的卷插件,但其生命周期独立于使用PV的任何单个Pod。此API对象捕获存储实现的详细信息,可以是NFS、iSCSI或特定于云提供商的存储系统。

A.持久卷目标(PVC)是用户对存储的请求。它类似于Pod。Pod消耗节点资源,PVC消耗PV资源。Pod可以请求特定级别的资源(CPU和内存)。声明可以请求特定的大小和访问模式(例如,它们可以装入ReadWriteOnce、ReadOnlyMany或ReadWriteMany,请参阅)AccessModes).

虽然持久性volumeclaims允许用户消耗抽象的存储资源,但是用户常常需要具有不同属性的持久性volumes,例如性能,用于不同的问题。群集管理员需要能够提供各种持久性volumes,这些volumes比大小和访问模式更多样化,而不会使用户公开到这些卷的详细信息。对于这些需求,有存储类资源

带有工作示例的详细演练

卷和声明的生命周期

PV是群集中的资源。PVC是对这些资源的请求,还充当对资源的声明检查。PVs和PVC之间的交互遵循以下生命周期:

供应

有两种配置PV的方法:静态或动态。

静止的

群集管理员创建多个PV。它们包含真实存储的详细信息,可供集群用户使用。它们存在于Kubernetes API中,可供使用。

动态

当管理员创建的静态pv都与用户的persistentvolumecclaim不匹配时,集群可能会尝试动态地为PVC提供一个专门的卷。此配置基于storageclass: PVC必须请求一个存储类管理员必须已创建并配置该类,以便进行动态资源调配。请求该类的声明""有效地为自己禁用动态资源调配。

要启用基于存储类的动态存储资源调配,群集管理员需要启用DefaultStorageClass接纳控制器在API服务器上。这可以做到,例如,通过确保DefaultStorageClass是以逗号分隔的有序值列表中的--启用许可插件API服务器组件的标志。有关API服务器命令行标志的更多信息,请检查kube apiserver德赢是不是大平台文档。

结合

用户创建或在动态配置的情况下已经创建了一个持久的volumeclamiam,其具有所请求的特定存储量和具有某些访问模式。用于新PVC的主手表中的控制循环,查找匹配的PV(如果可能的话),并将它们绑定在一起。如果为新PVC动态配置PV,则循环将始终将该PV绑定到PVC。否则,用户将永远至少得到他们所要求的,但卷可能超过所请求的内容。一旦绑定,持久性volumeclaim binds是独家的,无论它们是何种约束。PVC至PV结合是一对一的映射,使用施用符号是持久性volume与持久性volumeclaim之间的双向结合。

如果匹配的卷不存在,则声明将无限期地保持未绑定状态。当匹配的卷可用时,声明将被绑定。例如,配置了许多50Gi PV的群集将与请求100Gi的PVC不匹配。将100Gi PV添加到群集时,可以绑定PVC。

使用

豆荚使用声明作为体积。集群检查声明,找到绑定卷,并为Pod挂载该卷。对于支持多种访问模式的卷,用户指定在Pod中使用它们的声明作为卷时希望使用哪种模式。

一旦用户拥有一个声明并且该声明被绑定,绑定的PV就属于用户,只要用户需要它。用户通过包括持久卷目标舱内的部分块看见作为卷的索赔有关这方面的更多详细信息。

使用中的存储对象保护

使用中的存储对象保护功能的目的是确保Pod正在使用的PersistentVolumeClaims(PVC)和绑定到PVC的PersistentVolume(PVs)不会从系统中删除,因为这可能会导致数据丢失。

注意:当存在正在使用PVC的Pod对象时,Pod将积极使用PVC。

如果用户删除POD的主动使用中的PVC,则不会立即删除PVC。推迟PVC去除,直到任何豆荚不再积极地使用PVC。此外,如果管理员删除绑定到PVC的PV,则不会立即删除PV。推迟PV去除直至PV不再与PVC结合。

您可以看到,当PVC的状态为时,PVC受到保护终止终结器清单包括www.amasoeur.com/pvc-protection:

kubectl描述pvc主机路径名称:主机路径命名空间:默认存储类:示例主机路径状态:终止卷:标签:注释:Volume.beta.www.amasoeur.com/storage-class=示例hostpath volume.beta.www.amasoeur.com/storage-provisioner=example.com/hostpath终结器:[www.amasoeur.com/pvc-protection]...

当PV的状态为时,表示该PV已被保护终止终结器清单包括www.amasoeur.com/pv-protection:

kubectl描述pv任务pv卷名称:任务pv卷标签:类型=当地的注释:终结器:[www.amasoeur.com/pv-protection]StorageClass:标准状态:终止声明:回收策略:删除访问模式:RWO容量:1Gi消息:源:类型:主机路径(裸主机目录卷)路径:/tmp/data HostPathType: Events: 

回收

用户处理完卷后,可以从允许回收资源的API中删除PVC对象。PersistentVolume的回收策略告诉集群在释放其声明后如何处理该卷。目前,卷可以保留、回收或删除。

保持

这个保持回收策略允许对资源进行手动回收。当persistentvolumecclaim被删除时,PersistentVolume仍然存在,卷被认为是“已释放”。但由于前一位索赔人的数据仍在数量上,因此还不能用于另一项索赔。管理员可以通过以下步骤手动回收卷。

  1. 删除PersistentVolume。删除PV后,外部基础结构中的关联存储资产(如AWS EBS、GCE PD、Azure磁盘或Cinder卷)仍然存在。
  2. 相应地手动清理关联存储资产上的数据。
  3. 手动删除关联的存储资产,或者如果要重用相同的存储资产,请使用存储资产定义创建一个新的persistentvolume。

删去

的卷插件删去回收策略,删除将从Kubernetes中删除PersistentVolume对象,以及外部基础结构中的关联存储资产,如AWS EBS、GCE PD、Azure磁盘或Cinder卷。动态配置的卷将继承回收其StorageClass的策略,默认为删去. 管理员应根据用户的期望配置StorageClass;否则,PV必须在创建后进行编辑或修补。看见更改PersistentVolume的回收策略

回收

警告:这个回收不推荐使用回收策略。相反,建议使用动态资源调配。

如果基础卷插件支持,则回收回收策略执行一个基本的擦洗(rm-射频/音量/*),并使其可再次用于新的索赔。

但是,管理员可以使用Kubernetes控制器管理器命令行参数配置自定义回收器Pod模板,如参考.自定义回收器Pod模板必须包含规格,如下例所示:

蜂房:v1种类:圆荚体元数据:名称:光伏回收器名称空间:默认的规格:餐馆政策:从来没有:-名称:主机路径:路径:/任何/path/it/will/be/replacement容器:-名称:光伏回收器形象:“k8s.gcr.io / busybox”命令:[“/bin/sh”,“c”,“test-e/scrub&&rm-rf/scrub/.?*/scrub/[!.]*/scrub/*&&test-z\”$(ls-A/scrub)\“|退出1”]体积数:-名称:山径:/擦洗

但是,在中的自定义回收站模板中指定的特定路径零件将替换为正在回收的卷的特定路径。

保留PersistentVolume

控制飞机可以绑定PersistentVolumeClaimes到匹配的PersistentVolumes在集群中。但是,如果您希望PVC绑定到特定PV,则需要对其进行预绑定。

通过以持久性volumeclaim指定持久性volume,您声明了该特定PV和PVC之间的绑定。如果PersistentVolume存在并且没有保留持久性volumeclamblumlaim bodyclaimRef字段,则将绑定PersistentVolume和PersistentVolumeClaim。

绑定的发生与某些卷匹配条件无关,包括节点关联性。控制飞机仍然在检查存储类、访问模式和请求的存储大小是有效的。

蜂房:v1种类:持久卷目标元数据:名称:氟聚氯乙烯名称空间:规格:storageClassName:""#必须显式设置空字符串,否则将设置默认StorageClass卷名:富光伏...

此方法不保证对PersistentVolume的任何绑定权限。如果其他持久性volumeclabls可以使用您指定的PV,则首先需要保留该存储卷。指定相关的持久性volumeclumlumlumlumlumimblamclaimRef使PV不能与其他PVCs结合。

蜂房:v1种类:PersistentVolume元数据:名称:富光伏规格:storageClassName:""claimRef:名称:氟聚氯乙烯名称空间:...

如果您想使用具有其属性的PersistentVolume,这非常有用不礼貌着手保持,包括重用现有PV的情况。

扩大持续数量索赔

功能状态: Kubernetes v1.11[测试版]

默认情况下,支持扩展PersistentVolumeClaims(PVCs)。您可以扩展以下类型的卷:

  • gcePersistentDisk
  • awselasticblockstore.
  • 煤渣
  • glusterfs
  • rbd
  • Azure文件
  • Azure磁盘
  • 蒲公英
  • 柔性卷
  • CSI

仅当PVC的存储类为允许体积膨胀字段设置为true。

蜂房:storage.k8s.io/v1种类:存储类元数据:名称:gluster-vol-default粮食供应者:www.amasoeur.com /从而参数:resturl:"http://192.168.10.100:8080"restuser:""secretNamespace:""秘名:""允许体积膨胀:真正的

要为PVC请求更大的体积,编辑PVC对象并指定更大的尺寸。这会触发支持底层PersistentVolume的卷的扩展。永远不会创建新的PersistentVolume来满足声明。相反,将调整现有卷的大小。

CSI卷扩展

功能状态: Kubernetes v1.16[测试版]

默认情况下,支持扩展CSI卷,但它还需要特定的CSI驱动程序来支持卷扩展。有关更多信息,请参阅特定CSI驱动程序的文档。德赢是不是大平台

调整包含文件系统的卷的大小

如果文件系统是XFS、Ext3或Ext4,则只能调整包含文件系统的卷的大小。

当卷包含文件系统时,仅当新Pod在中使用PersistentVolumeClaim时,才会调整文件系统的大小读写模式。文件系统扩展可以在Pod启动时进行,也可以在Pod运行且底层文件系统支持在线扩展时进行。

如果驱动程序设置为RequiresFSResize能力真正的.FlexVolume可以在Pod重启时调整大小。

调整正在使用的PersistentVolumeClaim的大小

功能状态: Kubernetes v1.15[测试版]
注意:自Kubernetes 1.15起,扩展在用PVCs作为beta版,自1.11起作为alpha版ExpandInUsePersistentVolumes特性必须启用,这是许多测试特性集群的自动情况。指的是特征门德赢是不是大平台有关更多信息的文档。

在这种情况下,您不需要删除并重新创建使用现有PVC的Pod或部署。一旦文件系统被扩展,任何正在使用的PVC都会自动对其Pod可用。此功能对Pod或部署未使用的PVC没有影响。在扩展完成之前,您必须创建一个使用PVC的Pod。

与其他卷类型类似,FlexVolume卷在Pod使用时也可以扩展。

注意:仅当底层驱动程序支持调整大小时,才可以调整FlexVolume大小。
注意:扩展EBS卷是一项耗时的操作。此外,每卷配额为每6小时修改一次。

扩容卷时从失败中恢复

如果扩展底层存储失败,集群管理员可以手动恢复持久卷声明(Persistent Volume Claim, PVC)状态并取消调整大小请求。否则,控制器将在没有管理员干预的情况下不断重试调整大小请求。

  1. 标记绑定到持久性volumeclamblaim(PVC)的PersistentVolume(PV)保持回收政策。
  2. 删除PVC。自光伏有保持回收策略——当我们重新创建PVC时,不会丢失任何数据。
  3. 删除claimRef从PV规格中输入,因此新的PVC可以绑定到它。这应该是pv可用
  4. 重新制作尺寸比PV小的PVC并固定卷名PVC的字段到PV的名称。这应该将新的PVC绑定到现有的PV。
  5. 不要忘记恢复PV的回收策略。

持久卷的类型

PersistentVolume类型是作为插件实现的。Kubernetes目前支持以下插件:

以下类型的PersistentVolume已弃用。这意味着支持仍然可用,但将在未来的Kubernetes发行版中删除。

  • 煤渣-煤渣(露天堆垛式砌块储存)(弃用在v1.18中)
  • 植绒者-植绒存储器(弃用在v1.22)
  • quobyte-量子体积(弃用在v1.22)
  • storageos-StorageOS卷(弃用在v1.22)

旧版本的Kubernetes还支持以下树内持久卷类型:

  • photonPersistentDisk—Photon控制器持久化磁盘。(无法使用的第1.15版之后)
  • scaleIO- ScaleIO音量(无法使用的v1.21之后)

持久卷

每个PV包含一个规格和状态,这是卷的规格和状态。PersistentVolume对象的名称必须是有效的DNS子域名

蜂房:v1种类:PersistentVolume元数据:名称:pv0003规格:容量:存储:5Gi体积模型:文件系统访问模式:-读写persistentVolumeReclaimPolicy:回收storageClassName:山地选项:——努力-nfsvers=4.1nfs:路径:/ tmp服务器:172.17.0.2
注意:在群集中使用PersistentVolume可能需要与卷类型相关的帮助程序。在本例中,PersistentVolume的类型为NFS,需要帮助程序/sbin/mount.NFS来支持NFS文件系统的装载。

容量

通常,PV将具有特定的存储容量。这是用PV来设置的容量属性。参见Kubernetes资源模型了解客户期望的单位容量

目前,存储大小是唯一可以设置或请求的资源。未来的属性可能包括IOPS、吞吐量等。

音量模式

功能状态: Kubernetes v1.18(稳定)

库伯内特斯支持两种观点体积模型PersistentVolumes:文件系统

体积模型是可选的API参数。文件系统在以下情况下使用默认模式:体积模型参数被省略。

一个卷volumeMode:文件系统安装把豆荚放入目录中。如果该卷由块设备支持,并且该设备为空,则Kubernetes会在首次装入该设备之前在该设备上创建一个文件系统。

您可以设置体积模型使用卷作为原始块设备。这样的卷作为块设备显示在Pod中,其中没有任何文件系统。这种模式有助于为Pod提供访问卷的最快方式,而Pod和卷之间没有任何文件系统层。另一方面,在Pod中运行的应用程序必须知道如何处理原始块设备。看到原始块卷支持有关如何使用卷的示例,请参见volumeMode:块豆荚。

访问模式

PersistentVolume可以以资源提供程序支持的任何方式装载到主机上。如下表所示,供应商将具有不同的能力,每个PV的访问模式设置为该特定卷支持的特定模式。例如,NFS可以支持多个读/写客户机,但特定的NFS PV可能在服务器上以只读方式导出。每个PV都有自己的访问模式集,描述特定PV的功能。

访问模式为:

  • ReadWriteOnce——单个节点可以以读写的方式挂载卷
  • ReadOnlyMany——卷可以被许多节点以只读方式挂载
  • ReadWriteMany--卷可以由许多节点以读写方式装入
  • ReadWriteOncePod—卷可以通过单个Pod以读写方式装入。这仅适用于CSI卷和Kubernetes 1.22+版。

在命令行中,接入方式缩写为:

  • RWO-ReadWriteOnce
  • ROX - Readonlymany.
  • RWX-ReadWriteMany
  • RWOP——ReadWriteOncePod

重要!卷一次只能使用一种访问模式装入,即使它支持多种访问模式。例如,GCEPersistentDisk可以由单个节点作为ReadWriteOnce装入,也可以由多个节点作为ReadOnlyMany装入,但不能同时装入。

体积插件 读写 现成的 读写 读写密码
奥塞拉斯蒂克连锁店 - - -
AzureFile -
蓝盘 - - -
CEPFS -
煤渣 - - -
CSI 这取决于司机 这取决于司机 这取决于司机 这取决于司机
足球俱乐部 - -
FlexVolume 这取决于司机 -
枫树 - - -
GCEPersistentDisk - -
从而 -
主机路径 - - -
iSCSI - -
Quobyte -
NFS -
RBD - -
vspherevolume. - -(吊舱并置时工作) -
PortworxVolume - -
StorageOS - - -

PV可以有一个类,通过设置storageClassName属性的名称存储类. 特定类的PV只能绑定到请求该类的PV。一个没有storageClassName没有类,只能绑定到不请求特定类的PVC。

过去,该诠释volume.beta.www.amasoeur.com /存储类是用来代替storageClassName此注释仍然有效;但是,在将来的Kubernetes版本中,它将被完全弃用。

回收政策

目前的回收策略是:

  • 保留—人工填海
  • 循环使用——基本磨砂(rm-射频/音量/*)
  • 删除--删除关联的存储资产,如AWS EBS、GCE PD、Azure磁盘或OpenStack Cinder卷

目前,只有NFS和HostPath支持回收。AWS EBS,GCE PD,Azure磁盘和CINDER卷支持删除。

挂载选项

Kubernetes管理员可以指定持久卷在节点上时指定额外的安装选项。

注意:并非所有持久卷类型都支持装载选项。

以下卷类型支持装载选项:

  • 奥塞拉斯蒂克连锁店
  • 蓝盘
  • AzureFile
  • CEPFS
  • Cinder (OpenStack块存储)
  • GCEPersistentDisk
  • 从而
  • NFS
  • 量子体积
  • RBD(Ceph闭锁装置)
  • StorageOS
  • vspherevolume.
  • iSCSI

未验证装载选项。如果装载选项无效,则装载失败。

过去,该诠释volume.beta.www.amasoeur.com/mount-options是用来代替山地选项此注释仍然有效;但是,在将来的Kubernetes版本中,它将被完全弃用。

节点亲和力

注意:对于大多数卷类型,您不需要设置此字段。它会自动填充AWS EBS,GCE PDAzure磁盘卷块类型。您需要明确设置此项当地的卷。

PV可以指定节点关联以定义限制此卷可以从哪些节点访问的约束。使用PV的POD将仅调度到由节点关联选择的节点。要指定节点关联,请设置节点相关性规格一个PV的PersistentVolumeAPI参考有更多关于这个领域的细节。

阶段

一卷将分以下几个阶段:

  • 可用--尚未绑定到声明的可用资源
  • 绑定 - 体积绑定到索赔
  • Released——声明已被删除,但集群尚未回收资源
  • 失败--卷的自动回收失败

CLI将显示与PV绑定的PVC的名称。

PersistentVolumeClaims

每个PVC都包含一个规范和状态,即声明的规范和状态。PersistentVolumeClaim对象的名称必须是有效的DNS子域名

蜂房:v1种类:持久卷目标元数据:名称:我的要求规格:访问模式:-读写体积模型:文件系统资源:请求:存储:8GI.storageClassName:选择器:matchlabels.:释放:“稳定的”matchExpressions.:- {关键:环境,运营商:IN,价值观:[dev]}

访问模式

索赔使用与卷的约定相同请求具有特定访问模式的存储时。

音量模式

索赔使用与卷相同的约定指示卷作为文件系统或块设备使用。

资源

声明与POD一样,可以请求特定数量的资源。在本例中,请求是为了存储。相同资源模型适用于卷和索赔。

选择器

索赔可以指定标签选择器进一步过滤卷集。只有标签与选择器匹配的卷才能绑定到声明。选择器可以包含两个字段:

  • matchlabels.—卷必须有一个具有此值的标签
  • matchExpressions.-通过指定键、值列表以及关联键和值的操作符而产生的需求列表。有效的操作符包括In、NotIn、Exists和doesnoexist。

来自两者的所有要求matchlabels.matchExpressions.它们必须都满足才能匹配。

声明可以通过指定声明的名称来请求特定类存储类使用属性storageClassName. 仅请求类的PV,具有相同storageClassName作为PVC,可以绑定到PVC上。

PVC不一定需要请求一个类storageClassName设置等于""总是被解释为请求一个没有类的PV,因此它只能绑定到没有类的PV(没有注释或一个集等于"").没有聚氯乙烯storageClassName是不完全相同的,并被集群区别对待,取决于是否DefaultStorageClass准入插件已打开。

  • 如果打开了许可插件,管理员可以指定一个默认的StorageClass。所有没有的pvcstorageClassName只能绑定到该默认值的pv。通过设置注释来指定默认的StorageClassstorageclass.www.amasoeur.com / is-default-class等于真正的在StorageClass对象中。如果管理员没有指定默认值,那么集群将响应创建PVC,就像关闭了接纳插件一样。如果指定了多个默认值,则允许插件禁止创建所有pvc。
  • 如果许可插件被关闭,则没有默认StorageClass的概念。所有没有storageClassName只能绑定到没有类的PVs。在这种情况下,没有类的PVCstorageClassName就像室性早搏一样storageClassName着手""

根据安装方法的不同,在安装过程中,插件管理器可能会将默认StorageClass部署到Kubernetes群集。

当PVC指定a选择器除了请求StorageClass外,还将这些要求合并在一起:只有请求的类别和带有请求标签的PV才能绑定到PVC。

注意:目前,一个PVC与一个非空选择器不能为它动态配置PV。

过去,该诠释volume.beta.www.amasoeur.com /存储类被用来代替storageClassName此注释仍在工作;但是,将来的Kubernetes版本将不支持它。

作为卷的索赔

Pod通过将声明用作卷来访问存储。声明必须与使用声明的Pod位于同一命名空间中。群集在Pod的命名空间中找到声明,并使用它来获取支持声明的PersistentVolume。然后将卷装入主机并装入Pod。

蜂房:v1种类:圆荚体元数据:名称:mypod.规格:容器:-名称:myfrontend形象:nginx体积数:-山径:" / var / www / html”名称:多年电价确定:-名称:多年电价确定持久卷目标:索赔名称:我的要求

关于名称空间的注记

PersistentVolumes绑定是排他的,由于persistentvolumecclaims是命名空间对象,因此使用“Many”模式挂载索赔(火箭,RWX)只能在一个名称空间中使用。

持久卷类型主机路径

A.主机路径PersistentVolume使用节点上的文件或目录模拟网络连接存储。请参阅的一个例子主机路径打字卷

原始块卷支持

功能状态: Kubernetes v1.18(稳定)

以下卷插件支持裸块卷,包括在适用的情况下动态配置:

  • 奥塞拉斯蒂克连锁店
  • 蓝盘
  • CSI
  • FC(光纤通道)
  • GCEPersistentDisk
  • iSCSI
  • 局部体积
  • 露天炉渣
  • RBD(Ceph闭锁装置)
  • vspherevolume.

使用裸块卷的PersistentVolume

蜂房:v1种类:PersistentVolume元数据:名称:块PV.规格:容量:存储:10Gi.访问模式:-读写体积模型:persistentVolumeReclaimPolicy:保持足球俱乐部:targetWWNs:[“50060e801049cfd1”]:0只读的:错误的

持久请求原始块卷的持久性volumeclaim

蜂房:v1种类:持久卷目标元数据:名称:block-pvc规格:访问模式:-读写体积模型:资源:请求:存储:10Gi.

在容器中添加Raw块设备路径的Pod规范

蜂房:v1种类:圆荚体元数据:名称:pod-with-block-volume规格:容器:-名称:fc容器形象:软呢帽:26命令:[“/bin/sh”,“c”]arg游戏:[“尾- f / dev / null”]volumeDevices:-名称:数据设备路径:/dev/xvda:-名称:数据持久卷目标:索赔名称:block-pvc
注意:为Pod添加原始块设备时,可以在容器中指定设备路径,而不是装载路径。

绑定块卷

如果用户通过使用体积模型在持久性VuluMeCLAIM规范中,绑定规则与以前没有考虑到该模式的一部分的绑定规则略有不同。列出的是用户和管理员可能指定用于请求原始块设备的可能组合表。该表指示卷是否将被绑定:静态配置卷的卷绑定矩阵:

PV volumeMode 聚氯乙烯体积模 结果
未指明 未指明 绑定
未指明 没有绑定
未指明 文件系统 绑定
未指明 没有绑定
绑定
文件系统 没有绑定
文件系统 文件系统 绑定
文件系统 没有绑定
文件系统 未指明 绑定
注意:只有静态配置的卷都支持alpha发布。使用RAW块设备时,管理员应注意考虑这些值。

卷快照和从快照恢复卷支持

功能状态: Kubernetes v1.20(稳定)

卷快照仅支持树外CSI卷插件。有关详细信息,请参阅卷快照. 不推荐使用树内卷插件。您可以在卷插件常见问题解答

从卷快照创建PersistentVolumeClaim

蜂房:v1种类:持久卷目标元数据:名称:restore-pvc规格:storageClassName:csi主机路径sc数据源:名称:new-snapshot-test种类:卷快照每组:snapshot.storage.k8s.io访问模式:-读写资源:请求:存储:10Gi.

卷克隆

卷克隆仅适用于CSI卷插件。

从现有PVC创建PersistentVolumeClaim

蜂房:v1种类:持久卷目标元数据:名称:cloned-pvc规格:storageClassName:我的csi插件数据源:名称:existing-src-pvc-name种类:持久卷目标访问模式:-读写资源:请求:存储:10Gi.

卷填充器和数据源

功能状态: Kubernetes v1.22 [alpha]
注意:

Kubernetes支持自定义卷填充器;这个alpha特性在Kubernetes 1.18中被引入。Kubernetes 1.22用重新设计的API重新实现了该机制。检查您正在阅读与您的集群匹配的Kubernetes文档版本。德赢是不是大平台输入kubectl版本

要使用自定义卷填充器,必须启用AnyVolumeDataSource特征门用于kube apiserver和kube控制器管理器。

卷填充器利用名为数据源.不像数据源字段,该字段只能包含对另一个persistentvolumecclaim或VolumeSnapshot的引用数据源字段可以包含对同一命名空间中任何对象的引用,但PVC以外的核心对象除外。对于已启用功能门的群集,请使用数据源优先于数据源

数据源的引用

这个数据源字段的行为几乎与数据源领域如果指定了其中一个字段而未指定另一个字段,则API服务器将为这两个字段提供相同的值。创建后不能更改这两个字段,尝试为这两个字段指定不同的值将导致验证错误。因此,这两个字段将始终具有相同的内容。

有两个不同之处数据源场与场数据源用户应注意的领域:

  • 这个数据源字段忽略无效值(如同字段为空),而数据源字段从不忽略值,如果使用无效值,将导致错误。无效值是除PVC之外的任何核心对象(没有APIGOUP的对象)。
  • 这个数据源字段可能包含不同类型的对象,而数据源字段只允许PVCs和VolumeSnapshots。

用户应始终使用数据源在已启用功能门的群集上,并返回到数据源在不需要的集群上。在任何情况下都没有必要同时查看两个字段。语义稍有不同的重复值的存在只是为了向后兼容。特别是,新旧控制器的混合能够进行互操作,因为字段是相同的。

使用卷的思想

卷填充器是控制器可以创建非空卷,其中卷的内容由自定义资源确定数据源字段:

蜂房:v1种类:持久卷目标元数据:名称:填充聚氯乙烯规格:数据源:名称:示例名称种类:示例数据源每组:示例.storage.k8s.io访问模式:-读写资源:请求:存储:10Gi.

因为卷填充器是外部组件,如果没有安装所有正确的组件,尝试创建使用一个填充器的PVC可能会失败。外部控制器应在PVC上生成事件,以提供有关创建状态的反馈,包括由于缺少某些组件而无法创建PVC时的警告。

您可以安装Alpha卷数据源验证器控制器加入到集群中。如果没有注册填充器来处理这类数据源,则控制器在PVC上生成警告事件。当为PVC安装了合适的填充器时,填充器控制器负责报告与卷创建和过程中问题相关的事件。

编写可移植配置

如果您编写的配置模板或示例运行在广泛的群集上,并且需要持久存储,建议您使用以下模式:

  • 在配置包中包括PersistentVolumeClaim对象(以及部署、配置映射等)。
  • 不要在配置中包括PersistentVolume对象,因为实例化配置的用户可能没有创建PersistentVolume的权限。
  • 用户可以选择在实例化模板时提供存储类名。
    • 如果用户提供了存储类名,则将该值放入persistentVolumeClaim.storageClassName字段。如果管理员启用了存储类,这将导致PVC匹配正确的存储类。
    • 如果用户未提供存储类名,请保留persistentVolumeClaim.storageClassName字段为零。这将导致使用群集中的默认StorageClass为用户自动配置PV。许多群集环境都安装了默认的StorageClass,或者管理员可以创建自己的默认StorageClass。
  • 在工具中,观察一段时间后未绑定的PVC,并将其呈现给用户,因为这可能表明集群没有动态存储支持(在这种情况下,用户应创建匹配的PV),或者集群没有存储系统(在这种情况下,用户无法部署需要PVC的配置)。

下一步是什么

API参考

阅读本页描述的api:

最后修改于2021年8月04日晚上10:52太平洋标准时间:从PV / PVC概念到新的API参考(1b3125353)