暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

不停服扩容PVC容量:Kubernetes无损流量优化秘籍

Linux运维智行录 2024-12-25
18

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

有年代感的存储卡


01
先决条件

1、Kubernetes版本 >= 1.11版本默认apiserver是开启的

2、底层存储CSI支持版本情况

  • NFS支持  >= 3.0.0

  • rbd/cephfs >= 2.0.0

3、确认 storageclass 配置参数


02
确认扩容pvc参数

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

  1. 如果是没有输出的话,则说明扩容pvc条件符合条件;

  2. 有输出结果,就看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}'


03
触发扩容PVC时间点

只有当文件系统为 XFS、Ext3 或 Ext4 时,才能调整包含文件系统的卷的大小。

当卷包含文件系统时,当新创建的 Pod 在 ReadWrite 模式下使用 PersistentVolumeClaim 时,文件系统才会调整大小。当文件系统扩展可以在 Pod 启动时完成,并且底层文件系统支持在线扩展。


04
实操PVC扩容

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


05
结语

通过上述方法,可以在不停止服务的情况下安全地增加PVC的容量,从而更好地适应不断增长的数据存储需求。这种方法不仅提高了运维效率,也增强了用户体验,确保了业务的持续稳定发展。随着技术的发展,Kubernetes及其生态系统将持续演进,为用户提供更加简便高效的管理工具。


别忘了,关注我们的公众号,获取更多关于容器技术和云原生领域的深度洞察和技术实战,让我们携手在技术的海洋中乘风破浪!

END

文章转载自Linux运维智行录,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论