Kubernetes 中对持久卷进行扩容

  • Kubernetes 中对持久卷进行扩容已关闭评论
  • 87 views
  • A+
所属分类:Kubernetes

Kubernetes v1.11 中,持久卷扩容能力升级为 Beta 阶段。这个功能让用户可以轻松的通过编辑 PVC 对象的方式修改现有卷的容量。没有这一功能之前,要对卷容量进行修改,需要要和存储后端进行手工交互,或者对 PV 以及 PVC 进行删除重建操作。持久卷不支持缩容操作。

v1.8 中卷扩展功能就已经进入 Alpha 阶段,v1.11 之前需要在 feature gate 中开启 ExpandPersistentVolumes,以及 admission 控制器PersistentVolumeClaimResize(防止在底层存储不支持扩容的情况下对 PVC 进行扩容)。在 Kubernetes v1.11 中,这两个项目都会被缺省激活。

虽然功能已经被激活,但是集群管理员还是需要进行操作,让用户能够对自己的卷进行扩容。Kubernetes 1.11 内置了对部分卷插件的扩容支持:AWS-EBS、GCE-PD、Azure Disk、Azure File、Glusterfs、Cinder、Portworx、以及 Ceph RBD。管理员确定底层存储能够支持卷扩展之后,就可以在 StorageClass 对象中设置allowVolumeExpansion 为 true 来启用这一功能了。只有从 StorageClass 中创建的 PVC 才允许使用卷扩展:

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 会处理 Storage 字段的变更,据此申请空间,触发卷的扩容。

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: myclaim
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 8Gi #更新这一字段,修改 PVC 容量

文件系统扩展

GCE-PD、AWS-EBS、Azure Disk、Cinder 以及 Ceph RBD 这些块存储卷通常需要首先进行文件系统的扩展,然后被扩展的卷的额外空间才能为 Pod 所用。引用这些卷的 Pod 重启时,Kubernetes 会自动完成这些任务。

网络挂载的文件系统,例如 Glusterfs 和 Azure File,因为不需要进行文件系统扩展,因此可以在不重启 Pod 的情况下直接进行扩展。

只有终止引用卷的 Pod,才会触发对应文件系统的扩展,更确切地说:

  • 编辑 PVC,申请更多空间。
  • 底层存储对底层卷进行了扩展之后,PV 对象就会响应这一变化,PVC 会进入FileSystemResizePending 状态。

可以运行 kubectl get pvc <pvc_name> -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 就可以重新启动来结束文件系统在 Node 上的扩展过程了。可以通过删除和重建 Pod 的方式进行重启,也可以通过对 Deployment 的伸缩来完成这一过程。
  • 文件系统的扩展操作完成之后,PVC 会自动更新,设置为新的容量。

文件系统扩展过程中遇到任何错误,都会在 Pod 中以 Event 的形式表现出来。

在线文件系统扩展

Kubernetes v1.11 还引入了一个 Alpha 功能,叫做在线文件系统扩展。这个功能可以对一个正在被 Pod 使用的卷进行文件系统的扩展。这个功能还处于 Alpha 阶段,因此需要通过 Feature gate 启用 ExpandInUsePersistentVolumes。目前支持的有 GCE-PD、AWS-EBS、Cinder 以及 Ceph RBD。当激活这个功能后,引用被扩展的卷的 Pod 无需重启。文件系统会随着卷扩展的步骤进行扩展。文件系统的扩展只有在 Pod 引用被扩展的卷的时候才会发生,所以如果没有 Pod 引用这个卷,那么就不会进行文件系统扩展。

原文:Resizing Persistent Volumes using Kubernetes

作者:Hemant Kumar

  • 我的微信
  • 微信扫一扫
  • weinxin
  • 微信公众号
  • 微信公众号扫一扫
  • weinxin
avatar