本文发表已超过一年。较旧的文章可能包含过时的内容。请检查页面中的信息自发布以来是否已变得不正确。
使用 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 使用之前进行文件系统扩展。每当引用卷的 pod 重新启动时,Kubernetes 都会自动处理此问题。
网络附加文件系统(如 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。