本文已超过一年。较早的文章可能包含过时的内容。请检查页面中的信息自发布以来是否已不再正确。
使用 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 会将存储字段的更改解释为请求更多空间,并触发自动卷调整大小。
文件系统扩容
块存储卷类型,如 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。