磁盘热插拔
磁盘热插拔需要开启 HotplugVolumes
特性门控:
[root@base-k8s-master-1 kubevirt]# kubectl edit kubevirts.kubevirt.io -n kubevirt kubevirt
...output omitted...
spec:
certificateRotateStrategy: {}
configuration:
developerConfiguration:
featureGates:
- VMLiveUpdateFeatures
- HonorWaitForFirstConsumer
- Snapshot
- HotplugVolumes
...output omitted...
目前只支持
scsi
总线磁盘热插拔,控制器为virtio-scsi
。
virtio
磁盘添加需要通过kubectl edit
添加并使用virtctl restart
重启虚拟机。
准备磁盘
准备一个 dataVolume
:
apiVersion: cdi.kubevirt.io/v1beta1
kind: DataVolume
metadata:
name: "dv-blank"
spec:
storage:
storageClassName: csi-rbd-sc
resources:
requests:
storage: 5Gi
source:
blank: {}
热添加磁盘
热添加磁盘:
[root@base-k8s-master-1 kubevirt]# virtctl addvolume my-vm --volume-name=dv-blank
Successfully submitted add volume request to VM my-vm for volume dv-blank
这里是临时添加,想要持久添加需要
--persist
参数。不加--persist
磁盘会加到 VMI 上,加--persist
参数磁盘会加到 VM 上。使用
--serial
参数可以指定磁盘编号。
检查虚拟机:
[root@base-k8s-master-1 ~]# kubectl exec -it virt-launcher-my-vm-7m2nh -- /bin/bash
bash-5.1$ virsh list
Authorization not available. Check if polkit service is running or see debug message for more information.
Id Name State
-------------------------------
1 default_my-vm running
bash-5.1$ virsh dumpxml default_my-vm
...output omitted...
<disk type='block' device='disk'>
<driver name='qemu' type='raw' cache='none' error_policy='stop' io='native' discard='unmap'/>
<source dev='/var/run/kubevirt/hotplug-disks/dv-blank' index='3'/>
<backingStore/>
<target dev='sdb' bus='scsi'/>
<serial>1234567890</serial>
<alias name='ua-dv-blank'/>
<address type='drive' controller='0' bus='0' target='0' unit='1'/>
</disk>
...output omitted...
bash-5.1$
exit
[root@base-k8s-master-1 kubevirt]# virtctl ssh fedora@my-vm
Last login: Sat Mar 22 12:38:30 2025 from 10.100.239.50
[fedora@vm-dv ~]$ lsblk -d
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 5G 0 disk
sdb 8:16 0 5G 0 disk
zram0 252:0 0 633M 0 disk [SWAP]
[fedora@vm-dv ~]# ls /dev/disk/by-id/
ata-QEMU_HARDDISK_QM00001 ata-QEMU_HARDDISK_QM00001-part3
ata-QEMU_HARDDISK_QM00001-part1 ata-QEMU_HARDDISK_QM00001-part4
ata-QEMU_HARDDISK_QM00001-part2 scsi-0QEMU_QEMU_HARDDISK_1234567890
热删除磁盘
[root@base-k8s-master-1 kubevirt]# virtctl removevolume my-vm --volume-name=dv-blank
Successfully submitted remove volume request to VM my-vm for volume dv-blank
[root@base-k8s-master-1 kubevirt]# virtctl ssh fedora@my-vm
Last login: Sat Mar 22 16:04:42 2025 from 10.100.239.49
[fedora@vm-dv ~]$ lsblk -d
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 5G 0 disk
zram0 252:0 0 633M 0 disk [SWAP]