使用libvirt和XFS在线扩展Ceph RBD设备

我在 使用kubeadm升级Kubernetes集群1.25 升级虚拟机操作系统,但是由于最初虚拟机创建的磁盘较小,所以需要扩展磁盘后才能升级系统。

执行 rbd ls 命令检查存储池中rbd磁盘
rbd -p libvirt-pool ls -l

可以看到:

NAME               SIZE     PARENT  FMT  PROT  LOCK
z-k8s-m-1          6.5 GiB            2        excl
z-k8s-m-1.docker   9.3 GiB            2        excl
z-k8s-m-2          6.5 GiB            2        excl
z-k8s-m-2.docker   9.3 GiB            2        excl
...
  • 检查详细的RBD存储块信息:

    rbd info libvirt-pool/z-k8s-m-1
    

输出显示:

rbd image 'z-k8s-m-1':
        size 6.5 GiB in 1669 objects
        order 22 (4 MiB objects)
        snapshot_count: 0
        id: 31f3344490f20
        block_name_prefix: rbd_data.31f3344490f20
        format: 2
        features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
        op_features:
        flags:
        create_timestamp: Fri Dec 10 11:53:41 2021
        access_timestamp: Tue Nov  8 21:56:00 2022
        modify_timestamp: Tue Nov  8 22:47:19 2022
  • RBD调整磁盘大小到16GB ( 1024x16=16384 ),并且 virsh blockresize 刷新虚拟机磁盘:

rbd resize调整RBD块设备镜像大小, virsh blockresize调整虚拟机vda大小
rbd resize --size 16384 libvirt-pool/z-k8s-m-1
virsh blockresize --domain z-k8s-m-1 --path vda --size 16G
  • 登录到虚拟机内部执行growpart和xfs_growfs调整分区以及文件系统大小:

在虚拟机内部使用growpart和xfs_growfs扩展根目录文件系统
#安装growpart
apt install cloud-guest-utils
#扩展分区2
growpart /dev/vda 2
#扩展XFS根分区
xfs_growfs /

在线扩展Ceph RBD磁盘vdb1

我在 在Kubernetes部署Stable Diffusion 也同样遇到了虚拟机 /dev/vdb1 空间不足导致无法运行容器的问题,解决方法相似

  • 再次检查rbd磁盘

执行 rbd ls 命令检查存储池中rbd磁盘
rbd -p libvirt-pool ls -l

可以看到虚拟机 z-k8s-n-1 磁盘:

NAME               SIZE     PARENT  FMT  PROT  LOCK
z-k8s-n-1           16 GiB            2        excl
z-k8s-n-1.docker   9.3 GiB            2        excl
  • 检查 z-k8s-n-1.docker 磁盘详细信息:

    rbd info libvirt-pool/z-k8s-n-1.docker
    

显示如下:

rbd image 'z-k8s-n-1.docker':
     size 9.3 GiB in 2385 objects
     order 22 (4 MiB objects)
     snapshot_count: 0
     id: 4f30059fb9053
     block_name_prefix: rbd_data.4f30059fb9053
     format: 2
     features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
     op_features:
     flags:
     create_timestamp: Wed Dec 29 08:21:52 2021
     access_timestamp: Fri Jan 13 10:37:56 2023
     modify_timestamp: Fri Jan 13 10:39:06 2023
  • z-k8s-n-1.docker 扩展到50G( 1024x50=51200 ),并且 virsh blockresize 刷新虚拟机磁盘:

rbd resize调整RBD块设备镜像大小, virsh blockresize调整虚拟机vdb大小
rbd resize --size 51200 libvirt-pool/z-k8s-n-1.docker
virsh blockresize --domain z-k8s-n-1 --path vdb --size 50G
  • 登录到虚拟机内部执行growpart和xfs_growfs调整分区以及文件系统大小:

在虚拟机内部使用growpart和xfs_growfs扩展vdb1对应文件系统/var/lib/containerd
#安装growpart
apt install cloud-guest-utils
#扩展vdb分区1
growpart /dev/vdb 1
#扩展XFS分区/var/lib/containerd
xfs_growfs /var/lib/containerd
  • 完成后检查空间可以看到已经在线扩展成50G:

    $ df -h | grep vdb1
    /dev/vdb1        50G  8.2G   42G  17% /var/lib/containerd
    

参考