×

启用卷扩展支持

在扩展持久卷之前,StorageClass对象必须将allowVolumeExpansion字段设置为true

步骤
  • 编辑StorageClass对象并通过运行以下命令添加allowVolumeExpansion属性

    $ oc edit storageclass <storage_class_name> (1)
    1 指定存储类的名称。

    以下示例演示在存储类配置的底部添加此行。

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    ...
    parameters:
      type: gp2
    reclaimPolicy: Delete
    allowVolumeExpansion: true (1)
    1 将此属性设置为true允许在创建后扩展PVC。

扩展CSI卷

您可以使用容器存储接口 (CSI) 在创建存储卷后扩展它们。

CSI卷扩展不支持以下操作:

  • 扩展卷时从故障中恢复

  • 缩小

先决条件
  • 底层CSI驱动程序支持调整大小。

  • 使用动态配置。

  • 控制StorageClass对象已将allowVolumeExpansion设置为true。更多信息,请参见“启用卷扩展支持”。

步骤
  1. 对于持久卷声明 (PVC),请将.spec.resources.requests.storage设置为所需的新大小。

  2. 监视 PVC 的status.conditions字段以查看调整大小是否已完成。OpenShift Container Platform 在扩展期间将Resizing条件添加到 PVC,扩展完成后将其移除。

扩展具有受支持驱动程序的 FlexVolume

使用 FlexVolume 连接到后端存储系统时,可以在创建持久性存储卷后对其进行扩展。这是通过在 OpenShift Container Platform 中手动更新持久卷声明 (PVC) 来完成的。

如果驱动程序的RequiresFSResize设置为true,则 FlexVolume 允许扩展。可以在 Pod 重启时扩展 FlexVolume。

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

先决条件
  • 底层卷驱动程序支持调整大小。

  • 驱动程序的RequiresFSResize功能设置为true

  • 使用动态配置。

  • 控制StorageClass对象已将allowVolumeExpansion设置为true

步骤
  • 要在 FlexVolume 插件中使用调整大小功能,必须使用以下方法实现ExpandableVolumePlugin接口

    RequiresFSResize

    如果为true,则直接更新容量。如果为false,则调用ExpandFS方法完成文件系统调整大小。

    ExpandFS

    如果为true,则在完成物理卷扩展后调用ExpandFS来调整文件系统大小。卷驱动程序也可以同时执行物理卷调整大小和文件系统调整大小。

由于 OpenShift Container Platform 不支持在控制平面节点上安装 FlexVolume 插件,因此不支持控制平面扩展 FlexVolume。

扩展本地卷

您可以手动扩展使用本地存储运算符 (LSO) 创建的持久卷 (PV) 和持久卷声明 (PVC)。

步骤
  1. 扩展底层设备。确保这些设备上有足够的可用容量。

  2. 通过编辑 PV 的.spec.capacity字段,更新相应的 PV 对象以匹配新的设备大小。

  3. 对于用于将 PVC 绑定到 PV 的存储类,请设置allowVolumeExpansion:true

  4. 对于 PVC,请将.spec.resources.requests.storage设置为与新大小匹配。

如果需要,Kubelet 应自动扩展卷上的底层文件系统,并更新 PVC 的状态字段以反映新大小。

扩展具有文件系统的持久卷声明 (PVC)

扩展基于需要文件系统调整大小的卷类型的 PVC(例如 GCE、EBS 和 Cinder)是一个两步过程。首先,扩展云提供商中的卷对象。其次,扩展节点上的文件系统。

仅当使用该卷启动新 Pod 时,才会扩展节点上的文件系统。

先决条件
  • 控制StorageClass对象必须将allowVolumeExpansion设置为true

步骤
  1. 编辑 PVC 并通过编辑spec.resources.requests请求新大小。例如,以下操作将ebs PVC 扩展到 8 Gi

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: ebs
    spec:
      storageClass: "storageClassWithFlagSet"
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 8Gi (1)
    1 spec.resources.requests更新为更大的值会扩展 PVC。
  2. 云提供商对象完成调整大小后,PVC 将设置为FileSystemResizePending。使用以下命令检查条件

    $ oc describe pvc <pvc_name>
  3. 云提供商对象完成调整大小后,PersistentVolume对象会在PersistentVolume.Spec.Capacity中反映新请求的大小。此时,您可以从 PVC 创建或重新创建新的 Pod 以完成文件系统调整大小。Pod 运行后,即可使用新请求的大小,并且 PVC 中的FileSystemResizePending条件将被移除。

扩展卷时从故障中恢复

如果扩展底层存储失败,OpenShift Container Platform 管理员可以手动恢复持久卷声明 (PVC) 状态并取消调整大小请求。否则,控制器将持续重试调整大小请求。

步骤
  1. 使用Retain回收策略标记绑定到 PVC 的持久卷 (PV)。这可以通过编辑 PV 并将persistentVolumeReclaimPolicy更改为Retain来完成。

  2. 删除 PVC。

  3. 手动编辑 PV 并从 PV 规范中删除claimRef条目,以确保新创建的 PVC 可以绑定到标记为Retain的 PV。这将 PV 标记为Available

  4. 以较小的尺寸或底层存储提供程序可以分配的尺寸重新创建 PVC。

  5. 将 PVC 的volumeName字段设置为 PV 的名称。这仅将 PVC 绑定到已配置的 PV。

  6. 恢复 PV 上的回收策略。

其他资源
  • 控制StorageClass对象已将allowVolumeExpansion设置为true(请参见 启用卷扩展支持)。