随着云计算和容器化技术的普及,Kubernetes已成为部署和管理应用程序的关键平台。然而,当业务数据增长时,如何在不影响在线服务的前提下对持久卷声明(PVC)进行扩容,成为运维人员面临的挑战。本文将介绍一种无需停机即可完成PVC容量扩展的方法,确保业务连续性和用户体验不受影响。

有年代感的存储卡
1、Kubernetes版本 >= 1.11版本默认apiserver是开启的
2、底层存储CSI支持版本情况
NFS支持 >= 3.0.0
rbd/cephfs >= 2.0.0
3、确认 storageclass 配置参数
1、确认apiserver参数
# 1.11 <= kubernetes版本 <= 1.24
$ ps -ef | grep [a]piserver | egrep 'disable-admission-plugins|feature-gates'
# kubernetes <= 1.25
$ ps -ef | grep [a]piserver | egrep 'disable-admission-plugins'
Tip:
如果是没有输出的话,则说明扩容pvc条件符合条件;
有输出结果,就看disable-admission-plugins 参数列表是否包含PersistentVolumeClaimResize 以及 feature-gates 参数包含 ExpandPersistentVolumes=false
2、确认 SC 配置
$ kubectl get storageclass
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
ceph-fs-storage cephfs.csi.ceph.com Retain Immediate true 130d
ceph-rbd-storage rbd.csi.ceph.com Retain Immediate true 131d
local-storage kubernetes.io/no-provisioner Delete WaitForFirstConsumer false 131d
nfs-storage k8s/nfs-provisioner Delete Immediate true 45d
# ALLOWVOLUMEEXPANSION字段是否为TRUE,请修改为true
$ kubectl patch storageclass ceph-rbd-storage -p '{"allowVolumeExpansion": true}'
只有当文件系统为 XFS、Ext3 或 Ext4 时,才能调整包含文件系统的卷的大小。
当卷包含文件系统时,当新创建的 Pod 在 ReadWrite 模式下使用 PersistentVolumeClaim 时,文件系统才会调整大小。当文件系统扩展可以在 Pod 启动时完成,并且底层文件系统支持在线扩展。
1、修改PVC请求容量大小
$ kubectl -n kube-system edit pvc prometheus
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 16Gi # 修改扩容到容量的值
storageClassName: ceph-rbd-storage
volumeMode: Filesystem
volumeName: pvc-6ff4a3a6-cd81-4fcc-9dd3-c47a7fb7d3ba
2、验证PVC情况

Tip:当type: FileSystemResizePending情况
1、当pod异常时,只需要等pod再次启动会自动触发扩容;
2、当pod正常运行时,只需要等几分钟。pod有对挂载点读写操作则会触发扩容
3、验证pod状态容量
$ kubectl -n kube-system exec -it prometheus-6dc4bcd4b7-k4575 -c prometheus-server -- df -Th /data/
Filesystem Type Size Used Available Use% Mounted on
/dev/rbd2 ext4 15.6G 6.6G 9.0G 42% /data
通过上述方法,可以在不停止服务的情况下安全地增加PVC的容量,从而更好地适应不断增长的数据存储需求。这种方法不仅提高了运维效率,也增强了用户体验,确保了业务的持续稳定发展。随着技术的发展,Kubernetes及其生态系统将持续演进,为用户提供更加简便高效的管理工具。
别忘了,关注我们的公众号,获取更多关于容器技术和云原生领域的深度洞察和技术实战,让我们携手在技术的海洋中乘风破浪!





