本文发表于一年多前。旧文章可能包含过时内容。请检查页面中的信息自发布以来是否已变得不正确。

使用 Kubernetes 调整持久卷大小

编者按:此文章是关于 Kubernetes 1.11 新功能的一系列深度文章之一

在 Kubernetes v1.11 中,持久卷扩展功能正在升级到 Beta 版。此功能允许用户通过编辑 `PersistentVolumeClaim` (PVC) 对象轻松调整现有卷的大小。用户不再需要手动与存储后端交互或删除并重新创建 PV 和 PVC 对象来增加卷的大小。不支持缩小持久卷。

卷扩展在 v1.8 中作为 Alpha 功能引入,v1.11 之前的版本需要启用功能门 `ExpandPersistentVolumes` 和准入控制器 `PersistentVolumeClaimResize`(后者阻止扩展其底层存储提供商不支持调整大小的 PVC)。在 Kubernetes v1.11+ 中,功能门和准入控制器都默认启用。

尽管该功能默认启用,但集群管理员必须选择允许用户调整其卷的大小。Kubernetes v1.11 支持以下内置卷插件的卷扩展:AWS-EBS、GCE-PD、Azure Disk、Azure File、Glusterfs、Cinder、Portworx 和 Ceph RBD。一旦管理员确定底层提供商支持卷扩展,他们就可以通过在其 `StorageClass` 对象中将 `allowVolumeExpansion` 字段设置为 `true` 来向用户提供该功能。只有从该 `StorageClass` 创建的 PVC 才允许触发卷扩展。

~> cat standard.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: standard
parameters:
  type: pd-standard
provisioner: kubernetes.io/gce-pd
allowVolumeExpansion: true
reclaimPolicy: Delete

任何由此 `StorageClass` 创建的 PVC 都可以进行编辑(如下所示)以请求更多空间。Kubernetes 会将存储字段的更改解释为请求更多空间,并触发自动卷大小调整。

PVC StorageClass

文件系统扩展

块存储卷类型,如 GCE-PD、AWS-EBS、Azure Disk、Cinder 和 Ceph RBD,通常需要文件系统扩展,然后扩展卷的额外空间才能被 Pod 使用。当引用卷的 Pod 重启时,Kubernetes 会自动处理此问题。

网络附加文件系统(如 Glusterfs 和 Azure File)可以在不重启引用 Pod 的情况下进行扩展,因为这些系统不需要特殊的文件系统扩展。

文件系统扩展必须通过终止使用该卷的 Pod 来触发。更具体地说:

  • 编辑 PVC 以请求更多空间。
  • 一旦底层卷由存储提供商扩展,PersistentVolume 对象将反映更新的大小,并且 PVC 将具有 `FileSystemResizePending` 条件。

您可以通过运行 `kubectl get pvc -o yaml` 进行验证

~> kubectl get pvc myclaim -o yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: myclaim
  namespace: default
  uid: 02d4aa83-83cd-11e8-909d-42010af00004
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 14Gi
  storageClassName: standard
  volumeName: pvc-xxx
status:
  capacity:
    storage: 9G
  conditions:
  - lastProbeTime: null
    lastTransitionTime: 2018-07-11T14:51:10Z
    message: Waiting for user to (re-)start a pod to finish file system resize of
      volume on node.
    status: "True"
    type: FileSystemResizePending
  phase: Bound
  • 一旦 PVC 具有条件 `FileSystemResizePending`,就可以重启使用该 PVC 的 Pod 以完成节点上的文件系统大小调整。可以通过删除并重新创建 Pod,或者通过缩减部署然后再次扩容来实现重启。
  • 文件系统大小调整完成后,PVC 将自动更新以反映新大小。

文件系统扩展过程中遇到的任何错误都应作为 Pod 上的事件提供。

在线文件系统扩展

Kubernetes v1.11 还引入了一个名为在线文件系统扩展的 Alpha 功能。此功能允许在卷仍被 Pod 使用时进行文件系统扩展。由于此功能是 Alpha 版,因此需要启用功能门 `ExpandInUsePersistentVolumes`。它受内置卷插件 GCE-PD、AWS-EBS、Cinder 和 Ceph RBD 支持。启用此功能后,引用已调整大小卷的 Pod 无需重启。相反,文件系统将在卷扩展过程中自动在线调整大小。文件系统扩展直到 Pod 引用已调整大小的卷时才会发生,因此如果没有任何 Pod 引用该卷正在运行,则文件系统扩展将不会发生。

我如何了解更多信息?

在此处查看有关此功能的更多文档:http://k8s.io/docs/concepts/storage/persistent-volumes