本文已超过一年。较早的文章可能包含过时的内容。请检查页面中的信息自发布以来是否已不再正确。

使用 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 使用。Kubernetes 会在引用您卷的 Pod 重新启动时自动处理此事。

网络附加文件系统(如 Glusterfs 和 Azure File)无需重新启动引用它们的 Pod 即可扩容,因为这些系统不需要特殊的文件系统扩容操作。

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

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

您可以通过运行 kubectl get pvc <pvc_name> -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