概念

Kubernetes v1.16 文档不再得到积极维护。您当前正在查看的版本是静态快照。有关最新文档,请参见 最新版本。

编辑这个页面

持久卷

This document describes the current state of PersistentVolumes in Kubernetes. Familiarity with 建议。

介绍

Managing storage is a distinct problem from managing compute instances. The PersistentVolume subsystem provides an API for users 和 administrators that abstracts details of how storage is provided from how it is consumed. To do this, we introduce two new API resources: PersistentVolumePersistentVolumeClaim.

A PersistentVolume (PV) is a piece of storage in the cluster that has been provisioned by an administrator 要么 dynamically provisioned using 储存类别。它是集群中的资源,就像节点是集群资源一样。 PV是类似于Volumes的卷插件,但是其生命周期独立于使用PV的任何单个Pod。此API对象捕获NFS,iSCSI或特定于云提供商的存储系统的存储实现的详细信息。

A PersistentVolumeClaim (PVC) is a request for storage by a user. It is similar to a Pod. 豆荚 consume node resources 和 PVCs consume PV resources. 豆荚 can request specific levels of resources (CPU 和 Memory). Claims can request specific size 和 access modes (e.g., they can be mounted once read/write 要么 many times read-only).

While 持续卷索赔 allow a user to consume abstract storage resources, it is common that users need PersistentVolumes with varying 属性(例如性能)针对不同的问题。集群管理员 need to be able to offer a variety of PersistentVolumes that differ in more 而不只是大小和访问方式,而不会使用户接触到 如何实现这些卷。对于这些需求,有 存储类资源。

详细的演练和工作示例.

卷和声明的生命周期

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

供应

可以通过两种方式设置PV:静态或动态。

静态的

集群管理员创建许多PV。它们带有实际存储的详细信息,可供群集用户使用。它们存在于Kubernetes API中,可供使用。

动态

当管理员创建的所有静态PV均不匹配用户时’s PersistentVolumeClaim, 群集可能会尝试动态地专门为PVC配置卷。 This provisioning is based on 存储类es: the PVC must request a 存储类 和 管理员必须已经为动态创建并配置了该类 provisioning to occur. Claims that request the class "" effectively disable 为自己动态配置。

要基于存储类启用动态存储配置,集群管理员 needs to enable the DefaultStorageClass 准入控制器 on the API server. This can be done, for example, by ensuring that DefaultStorageClass is among the comma-delimited, 要么dered list of values for the --enable-admission-plugins flag of API服务器组件。有关API服务器命令行标志的更多信息, check kube-apiserver 文档。

捆绑

A user creates, 要么 in the case of dynamic provisioning, has already created, a PersistentVolumeClaim with a specific amount of storage requested 和 with certain access modes. A control loop in the master watches for new PVCs, finds a matching PV (if possible), 和 binds them together. If a PV was dynamically provisioned for a new PVC, the loop will always bind that PV to the PVC. Otherwise, the user will always get at least what they asked for, but the volume may be in excess of what was requested. Once bound, PersistentVolumeClaim binds are exclusive, regardless of how they were bound. A PVC to PV binding is a one-to-one mapping.

如果不存在匹配的卷,则声明将无限期保持未绑定。随着匹配量的增加,声明将受到约束。例如,配备有许多50Gi PV的群集将与请求100Gi的PVC不匹配。将100Gi PV添加到群集时,可以绑定PVC。

使用

窗格使用声明作为卷。群集检查索赔以找到绑定的卷并将该卷装入Pod。对于支持多种访问模式的卷,用户可以在将其声明用作Pod中的卷时指定所需的模式。

Once a user has a claim 和 that claim is bound, the bound PV belongs to the user for as long as they need it. Users schedule 豆荚 和 access their claimed PVs by including a persistentVolumeClaim in their Pod’s 卷 block. 请参阅下面的语法详细信息.

使用中的存储对象保护

“使用中的存储对象保护”功能的目的是确保不会从系统中删除绑定到PVC的Pod和持久卷(PV)有效使用的持久卷声明(PVC)。失利。

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

如果用户删除了Pod正在使用的PVC,则不会立即删除该PVC。 PVC的清除被推迟,直到任何Pod不再主动使用PVC。另外,如果管理员删除绑定到PVC的PV,则不会立即删除该PV。 PV的去除被推迟,直到PV不再与PVC结合。

您可以看到,当PVC受到保护时,’s status is Terminating 和 the Finalizers list includes kubernetes.io/pvc-protection:

kubectl describe pvc hostpath
Name:          hostpath
Namespace:     default
StorageClass:  example-hostpath
Status:        Terminating
Volume:
Labels:        <none>
Annotations:   volume.beta.kubernetes.io/storage-class=example-hostpath
               volume.beta.kubernetes.io/storage-provisioner=example.com/hostpath
Finalizers:    [kubernetes.io/pvc-protection]
...

您可以看到当PV受到保护时’s status is Terminating 和 the Finalizers list includes kubernetes.io/pv-protection too:

kubectl describe pv task-pv-volume
Name:            task-pv-volume
Labels:          type=本地注解:     <none>
Finalizers:      [kubernetes.io/pv-protection]存储类:    standard
Status:          Available
Claim:
Reclaim Policy:  删除
Access Modes:    RWO
Capacity:        1Gi
Message:
Source:
    Type:          主机路径 (bare host directory volume)
    Path:          /tmp/data
    主机路径Type:
Events:            <none>

回收中

When a user is done with their volume, they can delete the PVC objects from the API that allows reclamation of the 资源。 The reclaim policy for a PersistentVolume tells the cluster what to do with the volume after it has been 已发布 of its claim. Currently, 卷 can either be 保留ed, 回收d, 要么 删除d.

保留

The 保留 reclaim policy allows for manual reclamation of the 资源。 When the PersistentVolumeClaim is deleted, the PersistentVolume still exists 和 the volume is considered “released”。但是它尚未可用于其他索赔,因为先前的索赔人’的数据保留在卷上。管理员可以按照以下步骤手动回收该卷。

  1. 删除the PersistentVolume. The associated storage asset in external infrastructure (such as an AWS EBS, GCE PD, Azure磁盘, 要么 煤渣 volume) still exists after the PV is deleted.
  2. 相应地手动清理关联存储资产上的数据。
  3. Manually delete the associated storage asset, 要么 if you want to reuse the same storage asset, create a new PersistentVolume with the storage asset definition.

删除

For volume plugins that support the 删除 reclaim policy, deletion removes both the PersistentVolume object from Kubernetes, as well as the associated storage asset in the external infrastructure, such as an AWS EBS, GCE PD, Azure磁盘, 要么 煤渣 volume. 卷数 that were dynamically provisioned inherit the 收回他们的政策 存储类, which defaults to 删除. The administrator should configure the 存储类 according to users’期望;否则,PV必须在创建后进行编辑或打补丁。看到 更改持久卷的回收策略.

回收

警告: The 回收 reclaim policy is deprecated. Instead, the recommended approach is to use dynamic provisioning.

If supported by the underlying volume plugin, the 回收 reclaim policy performs a basic scrub (rm -rf /thevolume/*) on the volume 和 makes it available again for a new claim.

但是,管理员可以使用Kubernetes控制器管理器命令行参数来配置自定义回收站Pod模板,如下所述 这里. The custom recycler Pod template must contain a specification, as shown in the example below:

apiVersion: v1
kind: Pod
metadata:
  name: pv-recycler
  namespace: default
spec:
  restartPolicy: Never
  卷:
  - name: vol
    hostPath:
      path: /any/path/it/will/be/replaced
  containers:
  - name: pv-recycler
    image: "k8s.gcr.io/busybox"
    command: ["/bin/sh", "-c", "test -e /scrub && rm -rf /scrub/..?* /scrub/.[!.]* /scrub/*  && test -z \"$(ls -A /scrub)\" || exit 1"]
    volumeMounts:
    - name: vol
      mountPath: /scrub

However, the particular path specified in the custom recycler Pod template in the part is replaced with the particular path of the volume that is being recycled.

扩展永久卷声明

功能状态: Kubernetes v1.11 贝塔
该功能当前位于 贝塔 状态,含义:

  • 版本名称包含beta(例如v2beta3)。
  • 代码已经过测试。启用该功能被认为是安全的。默认启用。
  • 尽管细节可能会更改,但不会放弃对整体功能的支持。
  • 对象的架构和/或语义可能会在随后的Beta或稳定版本中以不兼容的方式更改。发生这种情况时,我们将提供有关迁移到下一个版本的说明。这可能需要删除,编辑和重新创建API对象。编辑过程可能需要一些思考。对于依赖该功能的应用程序,可能需要停机。
  • 建议仅用于非关键业务用途,因为在后续版本中可能会发生不兼容的更改。如果您有多个可以独立升级的群集,则可以放宽此限制。
  • 请尝试使用我们的Beta功能,并提供有关它们的反馈!他们退出测试版后,对我们进行更多更改可能不切实际。

现在默认启用对扩展持续卷索赔(PVC)的支持。你可以扩大 以下类型的卷:

  • gcePersistentDisk
  • awsElasticBlockStore
  • 煤渣
  • 糊精
  • rbd
  • Azure文件
  • Azure磁盘
  • 波特沃克斯
  • FlexVolumes
  • CSI

仅当存储级别为PVC时,才能展开PVC’s allowVolumeExpansion field is set to true.

apiVersion: storage.k8s.io/v1
kind: 存储类
metadata:
  name: gluster-vol-default
provisioner: kubernetes.io/glusterfs
parameters:
  resturl: "http://192.168.10.100:8080"
  restuser: ""
  secretNamespace: ""
  secretName: ""
allowVolumeExpansion: true

要请求更大的PVC体积,请编辑PVC对象并指定更大的体积 size. This triggers expansion of the volume that backs the underlying PersistentVolume. A new PersistentVolume is never created to satisfy the claim. Instead, an existing volume is resized.

CSI卷扩展

功能状态: Kubernetes v1.16 贝塔
该功能当前位于 贝塔 状态,含义:

  • 版本名称包含beta(例如v2beta3)。
  • 代码已经过测试。启用该功能被认为是安全的。默认启用。
  • 尽管细节可能会更改,但不会放弃对整体功能的支持。
  • 对象的架构和/或语义可能会在随后的Beta或稳定版本中以不兼容的方式更改。发生这种情况时,我们将提供有关迁移到下一个版本的说明。这可能需要删除,编辑和重新创建API对象。编辑过程可能需要一些思考。对于依赖该功能的应用程序,可能需要停机。
  • 建议仅用于非关键业务用途,因为在后续版本中可能会发生不兼容的更改。如果您有多个可以独立升级的群集,则可以放宽此限制。
  • 请尝试使用我们的Beta功能,并提供有关它们的反馈!他们退出测试版后,对我们进行更多更改可能不切实际。

默认情况下启用对扩展CSI卷的支持,但它也需要特定的CSI驱动程序来支持卷扩展。有关更多信息,请参阅特定CSI驱动程序的文档。

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

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

当卷包含文件系统时,仅在使用新Pod时才调整文件系统的大小 the PersistentVolumeClaim in ReadWrite mode. File system expansion is either done when a Pod is starting up 或Pod正在运行且基础文件系统支持联机扩展时。

FlexVolumes allow resize if the driver is set with the RequiresFSResize capability to true. 可以在Pod重新启动时调整FlexVolume的大小。

调整使用中的PersistentVolumeClaim的大小

功能状态: Kubernetes v1.15 贝塔
该功能当前位于 贝塔 状态,含义:

  • 版本名称包含beta(例如v2beta3)。
  • 代码已经过测试。启用该功能被认为是安全的。默认启用。
  • 尽管细节可能会更改,但不会放弃对整体功能的支持。
  • 对象的架构和/或语义可能会在随后的Beta或稳定版本中以不兼容的方式更改。发生这种情况时,我们将提供有关迁移到下一个版本的说明。这可能需要删除,编辑和重新创建API对象。编辑过程可能需要一些思考。对于依赖该功能的应用程序,可能需要停机。
  • 建议仅用于非关键业务用途,因为在后续版本中可能会发生不兼容的更改。如果您有多个可以独立升级的群集,则可以放宽此限制。
  • 请尝试使用我们的Beta功能,并提供有关它们的反馈!他们退出测试版后,对我们进行更多更改可能不切实际。
注意: Expanding in-use PVCs is available as 贝塔 since Kubernetes 1.15, 和 as α since 1.11. The ExpandInUsePersistentVolumes feature must be enabled, which is the case automatically for many clusters for 贝塔 features. Refer to the 功能门 文档以获取更多信息。

在这种情况下,您不’无需删除并重新创建使用现有PVC的Pod或部署。 文件系统扩展后,所有使用中的PVC都将自动供其Pod使用。 此功能对Pod或部署中未使用的PVC无效。您必须创建一个Pod 在扩展完成之前使用PVC。

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

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

持久卷的类型

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

  • GCEP永久磁盘
  • AWSElasticBlockStore
  • Azure文件
  • Azure磁盘
  • CSI
  • 足球俱乐部(光纤通道)
  • FlexVolume
  • 植绒
  • NFS
  • iSCSI
  • RBD(Ceph块设备)
  • 头文件
  • 煤渣(OpenStack块存储)
  • Glusterfs
  • VsphereVolume
  • 千字节卷
  • 主机路径(仅单节点测试–任何方式都不支持本地存储,并且在多节点群集中将无法使用)
  • 波特沃克斯卷
  • ScaleIO卷
  • 存储操作系统

持久卷

每个PV包含规格和状态,即规格和状态。

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv0003
spec:
  capacity:
    storage: 5Gi
  volumeMode: 文件系统
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: 回收
  storageClassName: slow
  mountOptions:
    - hard
    - nfsvers=4.1
  nfs:
    path: /tmp
    server: 172.17.0.2

容量

通常,PV将具有特定的存储容量。这是使用PV设置的’s capacity attribute. 见 Kubernetes 资源模型 to understand the units expected by capacity.

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

音量模式

功能状态: Kubernetes v1.13 贝塔
该功能当前位于 贝塔 状态,含义:

  • 版本名称包含beta(例如v2beta3)。
  • 代码已经过测试。启用该功能被认为是安全的。默认启用。
  • 尽管细节可能会更改,但不会放弃对整体功能的支持。
  • 对象的架构和/或语义可能会在随后的Beta或稳定版本中以不兼容的方式更改。发生这种情况时,我们将提供有关迁移到下一个版本的说明。这可能需要删除,编辑和重新创建API对象。编辑过程可能需要一些思考。对于依赖该功能的应用程序,可能需要停机。
  • 建议仅用于非关键业务用途,因为在后续版本中可能会发生不兼容的更改。如果您有多个可以独立升级的群集,则可以放宽此限制。
  • 请尝试使用我们的Beta功能,并提供有关它们的反馈!他们退出测试版后,对我们进行更多更改可能不切实际。

在Kubernetes 1.9之前,所有卷插件都在持久卷上创建了文件系统。 Now, you can set the value of volumeMode to block to use a raw block device, 要么 filesystem to use a filesystem. filesystem is the default if the value is omitted. This is an optional API parameter.

存取模式

A PersistentVolume can be mounted on a host in any way supported by the resource provider. As shown in the table below, providers will have different capabilities 和 each PV’的访问模式设置为该特定卷支持的特定模式。例如,NFS可以支持多个读/写客户端,但是特定的NFS PV可能以只读方式在服务器上导出。每个PV都有自己的一组访问模式,用于描述该特定PV’s capabilities.

访问方式为:

  • ReadWriteOnce–该卷可以通过单个节点以读写方式安装
  • ReadOnlyMany–该卷可以被许多节点只读安装
  • ReadWriteMany–该卷可以被许多节点读写安装

在CLI中,访问模式缩写为:

  • RWO-ReadWriteOnce
  • ROX-ReadOnlyMany
  • RWX-ReadWriteMany

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

音量插件 ReadWriteOnce ReadOnlyMany ReadWriteMany
AWSElasticBlockStore - -
Azure文件
Azure磁盘 - -
头文件
煤渣 - -
CSI 取决于司机 取决于司机 取决于司机
足球俱乐部 -
FlexVolume 取决于司机
植绒 - -
GCEP永久磁盘 -
Glusterfs
主机路径 - -
iSCSI -
兆字节
NFS
RBD -
VsphereVolume - -(在并置Pod时有效)
波特沃克斯卷 -
ScaleIO -
存储操作系统 - -

PV可以具有一个类别,该类别可以通过设置 storageClassName 属性的名称 存储类. 特定类别的PV只能绑定到请求的PVC that class. A PV with no storageClassName has no class 和 can only be bound 不需要特殊类别的PVC。

In the past, the annotation volume.beta.kubernetes.io/storage-class was used instead of the storageClassName attribute. This annotation is still working; however, 在以后的Kubernetes版本中,它将完全弃用。

回收政策

当前的回收政策是:

  • 保留– manual reclamation
  • 回收– basic scrub (rm -rf /thevolume/*)
  • 删除–关联的存储资产(例如AWS EBS,GCE PD,Azure Disk或OpenStack 煤渣卷)已删除

当前,仅NFS和HostPath支持回收。 AWS EBS,GCE PD,Azure Disk和Cinder卷支持删除。

挂载选项

当在节点上安装持久卷时,Kubernetes管理员可以指定其他安装选项。

注意: 并非所有的Persistent Volume类型都支持安装选项。

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

  • AWSElasticBlockStore
  • Azure磁盘
  • Azure文件
  • 头文件
  • 煤渣(OpenStack块存储)
  • GCEP永久磁盘
  • Glusterfs
  • NFS
  • 千字节卷
  • RBD(Ceph块设备)
  • 存储操作系统
  • VsphereVolume
  • iSCSI

挂载选项未经验证,因此如果其中一个无效,挂载将仅失败。

In the past, the annotation volume.beta.kubernetes.io/mount-options was used instead of the mountOptions attribute. This annotation is still working; however, 在以后的Kubernetes版本中,它将完全弃用。

节点亲和力

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

PV可以指定 节点亲和力 定义限制可以访问此卷的节点的约束。使用PV的Pod仅会安排到由节点亲缘关系选择的节点上。

卷将处于以下阶段之一:

  • 可用的–尚未绑定到索赔的免费资源
  • 界–该数量受索赔约束
  • 已发行 –声明已被删除,但是群集尚未回收该资源
  • 失败的–该卷的自动回收失败

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

持续卷索赔

每个PVC均包含规格和状态,即索赔的规格和状态。

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: myclaim
spec:
  accessModes:
    - ReadWriteOnce
  volumeMode: 文件系统
  resources:
    requests:
      storage: 8Gi
  storageClassName: slow
  selector:
    matchLabels:
      release: "stable"
    matchExpressions:
      - {key: environment, operator: In, values: [dev]}

存取模式

当请求使用特定访问模式进行存储时,声明使用与卷相同的约定。

音量模式

声明使用与卷相同的约定来表示将卷作为文件系统或块设备使用。

资源资源

声明与Pods一样,可以请求特定数量的资源。在这种情况下,该请求用于存储。相同 资源模型 同时适用于数量和理赔。

选择器

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

  • matchLabels -该卷必须带有此值的标签
  • matchExpressions -通过指定键,值列表以及与键和值相关的运算符提出的要求列表。有效的运算符包括In,NotIn,Exists和DidNotExist。

All of the requirements, from both matchLabelsmatchExpressions, are ANDed together – they must all be satisfied in 要么der to match.

声明可以通过指定名称来请求特定类别 存储类 using the attribute storageClassName. Only PVs of the requested class, ones with the same storageClassName as the PVC, can be bound to the PVC.

聚氯乙烯’t necessarily have to request a class. A PVC with its storageClassName set equal to "" is always interpreted to be requesting a PV with no class, so it 只能绑定到没有类的PV(没有注释或一组等于 ""). A PVC with no storageClassName is not quite the same 和 is treated differently 由群集决定,具体取决于 DefaultStorageClass 入场插件 已开启。

  • 如果启用了进入插件,则管理员可以指定一个 default 存储类. All PVCs that have no storageClassName can be bound only to PVs of that default. Specifying a default 存储类 is done by setting the annotation storageclass.kubernetes.io/is-default-class equal to true in a 存储类 object. If the administrator does not specify a default, the 集群响应PVC创建,就像准入插件已关闭一样。如果 指定了多个默认值,准入插件禁止创建 all PVCs.
  • 如果准入插件已关闭,则没有默认概念 存储类. All PVCs that have no storageClassName can be bound only to PVs that have no class. In this case, the PVCs that have no storageClassName are treated the same way as PVCs that have their storageClassName set to "".

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

When a PVC specifies a selector in addition to requesting a 存储类, 要求进行“与”运算:只有所请求类别的PV 请求的标签可能已绑定到PVC。

注意: Currently, a PVC with a non-empty selector can’没有为其动态配置PV。

In the past, the annotation volume.beta.kubernetes.io/storage-class was used instead of storageClassName attribute. This annotation is still working; however, it won’将来的Kubernetes版本中将不支持该版本。

索赔量

Pod通过将声明用作卷来访问存储。声明必须与使用声明的Pod存在于相同的命名空间中。集群在Pod中找到索赔’s namespace 和 uses it to get the PersistentVolume backing the claim. The volume is then mounted to the host 和 into the Pod.

apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
    - name: myfrontend
      image: nginx
      volumeMounts:
      - mountPath: "/var/www/html"
        name: mypd
  卷:
    - name: mypd
      persistentVolumeClaim:
        claimName: myclaim

关于命名空间的说明

PersistentVolumes binds are exclusive, 和 since 持续卷索赔 are namespaced objects, mounting claims with “Many” modes (ROX, RWX) is only possible within one namespace.

原始块体积支持

功能状态: Kubernetes v1.13 贝塔
该功能当前位于 贝塔 状态,含义:

  • 版本名称包含beta(例如v2beta3)。
  • 代码已经过测试。启用该功能被认为是安全的。默认启用。
  • 尽管细节可能会更改,但不会放弃对整体功能的支持。
  • 对象的架构和/或语义可能会在随后的Beta或稳定版本中以不兼容的方式更改。发生这种情况时,我们将提供有关迁移到下一个版本的说明。这可能需要删除,编辑和重新创建API对象。编辑过程可能需要一些思考。对于依赖该功能的应用程序,可能需要停机。
  • 建议仅用于非关键业务用途,因为在后续版本中可能会发生不兼容的更改。如果您有多个可以独立升级的群集,则可以放宽此限制。
  • 请尝试使用我们的Beta功能,并提供有关它们的反馈!他们退出测试版后,对我们进行更多更改可能不切实际。

以下卷插件支持原始块卷,包括动态预配置,其中 applicable:

  • AWSElasticBlockStore
  • Azure磁盘
  • 足球俱乐部(光纤通道)
  • GCEP永久磁盘
  • iSCSI
  • 本地量
  • RBD(Ceph块设备)
  • VsphereVolume(alpha)
注意: Kubernetes 1.9中仅FC卷和iSCSI卷支持原始块卷。 在1.10中添加了对其他插件的支持。

使用原始块卷的持久卷

apiVersion: v1
kind: PersistentVolume
metadata:
  name: block-pv
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteOnce
  volumeMode: 
  persistentVolumeReclaimPolicy: 保留
  fc:
    targetWWNs: ["50060e801049cfd1"]
    lun: 0
    readOnly: false

持久卷声明请求原始块卷

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: block-pvc
spec:
  accessModes:
    - ReadWriteOnce
  volumeMode: 
  resources:
    requests:
      storage: 10Gi

Pod规范在容器中添加Raw 块 Device路径

apiVersion: v1
kind: Pod
metadata:
  name: pod-with-block-volume
spec:
  containers:
    - name: fc-container
      image: fedora:26
      command: ["/bin/sh", "-c"]
      args: [ "tail -f /dev/null" ]
      volumeDevices:
        - name: data
          devicePath: /dev/xvda
  卷:
    - name: data
      persistentVolumeClaim:
        claimName: block-pvc
注意: 为Pod添加原始块设备时,请在容器中指定设备路径,而不是安装路径。

绑定块体积

If a user requests a raw block volume by indicating this using the volumeMode field in the PersistentVolumeClaim spec, the binding rules differ slightly from previous releases that didn’请勿将此模式作为规格的一部分。 列出了用户和管理员可能指定用于请求原始块设备的可能组合的表。该表指示是否绑定卷或不指定组合: 静态预配置卷的卷绑定矩阵:

光伏体积模式 PVC体积模式 结果
未指定 未指定 绑定
未指定 无捆绑
未指定 文件系统 绑定
未指定 无捆绑
绑定
文件系统 无捆绑
文件系统 文件系统 绑定
文件系统 无捆绑
文件系统 未指定 绑定
注意: α版本仅支持静态配置的卷。管理员在使用裸块设备时应注意考虑这些值。

卷快照和从快照支持还原卷

功能状态: Kubernetes v1.12 α
该功能当前位于 α 状态,含义:

  • 版本名称包含Alpha(例如v1alpha1)。
  • 可能是越野车。启用该功能可能会暴露错误。默认禁用。
  • 随时可能删除对功能的支持,恕不另行通知。
  • 在以后的软件版本中,API可能会以不兼容的方式更改,恕不另行通知。
  • 由于存在更高的错误风险和缺乏长期支持,建议仅用于短期测试集群。

卷快照功能已添加,仅支持CSI卷插件。有关详细信息,请参见 卷快照.

要支持从卷快照数据源还原卷,请启用 VolumeSnapshotDataSource apiserver和控制器管理器上的功能门。

从卷快照创建持久卷声明

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: restore-pvc
spec:
  storageClassName: csi-hostpath-sc
  dataSource:
    name: new-snapshot-test
    kind: VolumeSnapshot
    apiGroup: snapshot.storage.k8s.io
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi

卷克隆

功能状态: Kubernetes v1.16 贝塔
该功能当前位于 贝塔 状态,含义:

  • 版本名称包含beta(例如v2beta3)。
  • 代码已经过测试。启用该功能被认为是安全的。默认启用。
  • 尽管细节可能会更改,但不会放弃对整体功能的支持。
  • 对象的架构和/或语义可能会在随后的Beta或稳定版本中以不兼容的方式更改。发生这种情况时,我们将提供有关迁移到下一个版本的说明。这可能需要删除,编辑和重新创建API对象。编辑过程可能需要一些思考。对于依赖该功能的应用程序,可能需要停机。
  • 建议仅用于非关键业务用途,因为在后续版本中可能会发生不兼容的更改。如果您有多个可以独立升级的群集,则可以放宽此限制。
  • 请尝试使用我们的Beta功能,并提供有关它们的反馈!他们退出测试版后,对我们进行更多更改可能不切实际。

卷克隆功能已添加,仅支持CSI卷插件。有关详细信息,请参见 批量克隆.

要支持从PVC数据源克隆卷,请启用 VolumePVCDataSource apiserver和控制器管理器上的功能门。

从现有pvc创建持久卷声明

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: cloned-pvc
spec:
  storageClassName: my-csi-plugin
  dataSource:
    name: existing-src-pvc-name
    kind: PersistentVolumeClaim
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi

编写便携式配置

如果你’重写可在多种集群上运行的配置模板或示例 并且需要持久存储,建议您使用以下模式:

  • 在您的配置包中包含PersistentVolumeClaim对象(旁边) 部署,ConfigMap等)。
  • 由于用户实例化,因此请勿在配置中包含PersistentVolume对象 该配置可能没有创建PersistentVolumes的权限。
  • 在实例化时为用户提供提供存储类名称的选项 the template.
    • 如果用户提供了存储类名称,则将该值放入 persistentVolumeClaim.storageClassName 领域。 这将导致PVC匹配正确的存储空间 如果群集具有由管理员启用的StorageClasses,则为class。
    • 如果用户未提供存储类别名称,请保留 persistentVolumeClaim.storageClassName 字段为零。这将导致 PV将自动为用户提供默认的StorageClass in the cluster. 许多 cluster environments have a default 存储类 installed, 或管理员可以创建自己的默认StorageClass。
  • 在您的工具中,注意一段时间后没有粘结的PVC 并将其显示给用户,因为这可能表明该群集没有 动态存储支持(在这种情况下,用户应创建匹配的PV) 或群集没有存储系统(在这种情况下,用户无法部署 需要PVC的配置)。

反馈