持久卷
本文档描述了……的当前状态持久卷在库伯内特斯。熟悉卷建议。
介绍
管理存储与管理计算实例是截然不同的问题。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仍然存在,卷被认为是“已释放”。但由于前一位索赔人的数据仍在数量上,因此还不能用于另一项索赔。管理员可以通过以下步骤手动回收卷。
- 删除PersistentVolume。删除PV后,外部基础结构中的关联存储资产(如AWS EBS、GCE PD、Azure磁盘或Cinder卷)仍然存在。
- 相应地手动清理关联存储资产上的数据。
- 手动删除关联的存储资产,或者如果要重用相同的存储资产,请使用存储资产定义创建一个新的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)状态并取消调整大小请求。否则,控制器将在没有管理员干预的情况下不断重试调整大小请求。
- 标记绑定到持久性volumeclamblaim(PVC)的PersistentVolume(PV)
保持
回收政策。 - 删除PVC。自光伏有
保持
回收策略——当我们重新创建PVC时,不会丢失任何数据。 - 删除
claimRef
从PV规格中输入,因此新的PVC可以绑定到它。这应该是pv可用
. - 重新制作尺寸比PV小的PVC并固定
卷名
PVC的字段到PV的名称。这应该将新的PVC绑定到现有的PV。 - 不要忘记恢复PV的回收策略。
持久卷的类型
PersistentVolume类型是作为插件实现的。Kubernetes目前支持以下插件:
awselasticblockstore.
-AWS弹性块存储(EBS)蓝盘
——Azure磁盘蓝锉
- Azure文件cephfs
——CephFS体积csi
—容器存储接口CSI (Container Storage Interface)足球俱乐部
—FC存储flexVolume
-FlexVolumegcePersistentDisk
—GCE持久化磁盘glusterfs
- Glusterfs卷主机路径
- HostPath卷(仅用于单节点测试);不能在多节点群集中工作;请考虑使用当地的
(取而代之的是音量)iscsi
-iSCSI(IP上的SCSI)存储当地的
-安装在节点上的本地存储设备。nfs
-网络文件系统(NFS)存储portworxVolume
-蒲草量rbd
—RBD (Rados Block Device)卷vsphereVolume
-vSphere VMDK卷
以下类型的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版本中,它将被完全弃用。
节点亲和力
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。所有没有的pvc
storageClassName
只能绑定到该默认值的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的配置)。
下一步是什么
- 了解更多关于创建一个PersistentVolume.
- 了解更多关于创建PersistentVolumeClaim.
- 阅读持久存储设计文档.
API参考
阅读本页描述的api: