是否可以调整持久卷的大小?

per*_*ter 22 kubernetes google-kubernetes-engine

我正在Kubernetes上运行MySQL部署但是看起来我的分配空间不够,最初我添加了一个持续的卷,50GB现在我想扩展它100GB.

我已经看到一个持久的卷声明在创建后是不可变的,但我能以某种方式调整持久卷的大小,然后重新创建我的声明吗?

Dmi*_*sky 16

是的,从1.11开始,可以在某些云提供商上调整持久卷的大小.要增加音量大小:

  1. kubectl edit pvc $your_pvc使用编辑大小spec.resources.requests.storage
  2. 使用卷终止pod.

一旦使用卷的pod终止,文件系统就会扩展,并且文件系统的大小PV会增加.有关详细信息,请参阅上面的链

  • 感谢您提到 pod 终止;现在说得通了,但我在 Kubernetes 博客上宣布该功能的博客文章中没有看到这一点。如果您不使用 PVC 删除任何 Pod,Kubernetes 将无法调整卷大小! (2认同)

csa*_*hez 15

对于某些卷类型,可以在Kubernetes 1.9(alpha in 1.8)中使用:gcePersistentDisk,awsElasticBlockStore,Cinder,glusterfs,rbd

它需要启用PersistentVolumeClaimResizeallowVolumeExpansion字段设置为true 的准入插件和存储类.

请参阅https://kubernetes.io/docs/concepts/storage/persistent-volumes/#expanding-persistent-volumes-claims上的官方文档


Saa*_*Ali 8

不,Kubernetes还不支持自动音量调整.

磁盘大小调整是一个完全手动的过程.

假设您创建了具有给定容量的Kubernetes PV对象,并且PV绑定到PVC,然后附加/挂载到节点以供pod使用.如果您增加卷大小,pod将继续能够毫无问题地使用磁盘,但是他们无法访问额外的空间.

要在卷上启用其他空间,必须手动调整分区大小.您可以按照此处的说明执行此操作.您必须首先删除引用卷的pod,等待它分离,而不是手动将卷附加/装入您有权访问的某个VM实例,并运行所需的步骤来调整它.

已打开问题#35941以跟踪功能请求.

  • PV/PVC用于存储发现.创建的PVC具有您希望存储的最低要求,它将绑定到满足这些最低要求的可用(未绑定)PV.PV对象是真实存储的"表示".它需要定义容量.一旦PVC/PV被束缚,其中任何一个的容量都无关紧要,因为PVC已经完成.当pod由pod引用时,pod仅使用安装该卷所需的PV对象中的信息(它忽略容量值). (3认同)

Ram*_*man 5

在1.8及更高版本中,对于某些卷类型(包括和)有一些支持,如果集群上启用了某些实验功能。gcePersistentDiskawsBlockStore

对于其他卷类型,现在必须手动完成。此外,在以后的版本(当前预定为1.11)中将支持在Pod在线(很好!)时自动执行此操作:

目前,以下是我要使用AzureDisk卷类型(对于托管磁盘)手动执行此操作的步骤,该卷类型当前不支持永久性磁盘大小调整(但现在也支持此功能):

  1. 确保 PV已设置回收策略“保留”。
  2. 删除有状态集和相关的容器。即使将保持PV和PVC状态,Kubernetes也应释放PV Bound。请特别注意由操作员(例如Prometheus)管理的状态集-可能需要暂时禁用操作员。一次也可以Scale做一个吊舱。请耐心等待几分钟。
  3. 使用Azure API或门户调整PV的基础存储大小。
  4. 通过将基础存储添加为VM设置中的“磁盘”,将基础存储安装在VM(例如Kubernetes主服务器)上。在VM中,使用e2fsckresize2fs调整PV上文件系统的大小(假设ext3 / 4 FS)。卸载磁盘。
  5. 保存关联的PVC的JSON / YAML配置。
  6. 删除关联的PVC。PV应更改为状态Released
  7. 编辑PV的YAML配置,此后PV状态应为Available
    1. 指定新卷的大小spec.capacity.storage
    2. 删除spec.claimref uidresourceVersion字段,并
    3. 删除status.phase
  8. 编辑保存的PVC配置:
    1. 删除metadata.resourceVersion字段,
    2. 删除元数据pv.kubernetes.io/bind-completedpv.kubernetes.io/bound-by-controller注释,并
    3. spec.resources.requests.storage字段更改为更新的PV大小,并
    4. 删除其中的所有字段status
  9. 使用编辑的PVC配置创建新资源。PVC应该处于启动Pending状态,但是PV和PVC都应相对快速地过渡到Bound
  10. 重新创建StatefulSet和/或更改有状态集配置以重新启动Pod。