一、场景描述

在kvm虚拟机中安装好了kubernets,但是一开始虚拟机的磁盘只有50G,为了kubernetes中可以运行更多的pod,因此需要对虚拟机进行磁盘扩容,由于虚拟机在系统安装是磁盘使用的lvm的方式,所以可以进行根分区扩容,若采用的是传统的分区方式,扩容需要采用其他的方案

二、操作步骤

1、使用qemu-img对虚拟机的磁盘文件进行扩容命令如下:

qemu-img -resize k8s-master-1.23 +100G

ps: 需要提起将虚拟机关机,否则会出现扩容失败,导致磁盘文件损坏,具体解决方法: https://blog.51cto.com/u_15743393/6174635 扩容完成如下:

[root@tyb ~]# qemu-img info /vm/k8s-master-1.23.qcow2 
image: /vm/k8s-master-1.23.qcow2
file format: qcow2
virtual size: 150G (161061273600 bytes)
disk size: 3.8G
cluster_size: 65536
Format specific information:
    compat: 1.1
    lazy refcounts: true

2、扩容跟分区

这是开启虚拟机我们可以看到磁盘的分区大小并没有改变

[root@master ~]# lsblk 
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0              11:0    1 1024M  0 rom  
vda             252:0    0  150G  0 disk 
├─vda1          252:1    0    1G  0 part /boot
└─vda2          252:2    0   49G  0 part 
  └─centos-root 253:0    0   49G  0 lvm  /

但是磁盘的总大小已经变成了150G 接下来需要对扩容的100G进行分区 fdsik命令完成后如下所示

[root@master ~]# lsblk 
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0              11:0    1 1024M  0 rom  
vda             252:0    0  150G  0 disk 
├─vda1          252:1    0    1G  0 part /boot
├─vda2          252:2    0   49G  0 part 
│ └─centos-root 253:0    0   49G  0 lvm  /
└─vda3          252:3    0   90G  0 part 

这里可以看到我们新添加的分区 查看你一下虚拟机中lvm的结果

[root@master ~]# lvs
  LV   VG     Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root centos -wi-ao---- <49.00g                                                    
[root@master ~]# vgs
  VG     #PV #LV #SN Attr   VSize   VFree
  centos   1   1   0 wz--n- <49.00g    0 
[root@master ~]# pvs
  PV         VG     Fmt  Attr PSize   PFree
  /dev/vda2  centos lvm2 a--  <49.00g    0 

下一步开始lv的扩容

# 将新添加的分区做成pv
[root@master ~]# pvcreate /dev/vda3
  Physical volume "/dev/vda3" successfully created.
[root@master ~]# pvs
  PV         VG     Fmt  Attr PSize   PFree 
  /dev/vda2  centos lvm2 a--  <49.00g     0 
  /dev/vda3         lvm2 ---   90.00g 90.00g

# 扩容原有的vg
[root@master ~]# vgextend centos /dev/vda3
  Volume group "centos" successfully extended
[root@master ~]# vgs
  VG     #PV #LV #SN Attr   VSize   VFree  
  centos   2   1   0 wz--n- 138.99g <90.00g
[root@master ~]# 
[root@master ~]# pvs
  PV         VG     Fmt  Attr PSize   PFree  
  /dev/vda2  centos lvm2 a--  <49.00g      0 
  /dev/vda3  centos lvm2 a--  <90.00g <90.00g

# 扩容lv,这里的lv就是我的根分区
[root@master ~]# lvextend /dev/centos/root /dev/vda3
  Size of logical volume centos/root changed from <49.00 GiB (12543 extents) to 138.99 GiB (35582 extents).
  Logical volume centos/root successfully resized.
You have new mail in /var/spool/mail/root
[root@master ~]# lvs
  LV   VG     Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root centos -wi-ao---- 138.99g 
这块扩容的比较简单直接将所有的空间全部扩容进去了

3、最后重载根分区

# 先查看根分区的文件类型,然后选用合适的工具
[root@master ~]# df -hT
Filesystem              Type      Size  Used Avail Use% Mounted on
devtmpfs                devtmpfs  2.0G     0  2.0G   0% /dev
tmpfs                   tmpfs     2.0G     0  2.0G   0% /dev/shm
tmpfs                   tmpfs     2.0G  8.6M  2.0G   1% /run
tmpfs                   tmpfs     2.0G     0  2.0G   0% /sys/fs/cgroup
/dev/mapper/centos-root xfs        49G  3.9G   46G   8% /
/dev/vda1               xfs      1014M  137M  878M  14% /boot
tmpfs                   tmpfs     396M     0  396M   0% /run/user/0

# 我的根分区是xfs的文件系统,所以使用xfs_growfs进行重载
[root@master ~]# xfs_growfs /
meta-data=/dev/mapper/centos-root isize=512    agcount=4, agsize=3211008 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=12844032, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=6271, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 12844032 to 36435968

# 完成后如下
[root@master ~]# df -hT
Filesystem              Type      Size  Used Avail Use% Mounted on
devtmpfs                devtmpfs  2.0G     0  2.0G   0% /dev
tmpfs                   tmpfs     2.0G     0  2.0G   0% /dev/shm
tmpfs                   tmpfs     2.0G  8.6M  2.0G   1% /run
tmpfs                   tmpfs     2.0G     0  2.0G   0% /sys/fs/cgroup
/dev/mapper/centos-root xfs       139G  3.9G  136G   3% /
/dev/vda1               xfs      1014M  137M  878M  14% /boot
tmpfs                   tmpfs     396M     0  396M   0% /run/user/0

最后完美扩容根分区