本文发表于一年多前。旧文章可能包含过时内容。请检查页面中的信息自发布以来是否已变得不正确。
使用 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
~> 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。