准备虚拟机

本章介绍使用 virt manager 安装虚拟机的方法,如果您已经准备好虚拟机,可以跳过本章节。

安装依赖工具

安装虚拟机,会依赖相关工具,安装依赖并使能 libvirtd 服务的参考命令如下(如果需要代理,请先配置代理):

  1. $ dnf install virt-install virt-manager libvirt-daemon-qemu edk2-aarch64.noarch virt-viewer
  2. $ systemctl start libvirtd
  3. $ systemctl enable libvirtd

准备虚拟机磁盘文件

  1. $ dnf install -y qemu-img
  2. $ virsh pool-define-as vmPool --type dir --target /mnt/vm/images/
  3. $ virsh pool-build vmPool
  4. $ virsh pool-start vmPool
  5. $ virsh pool-autostart vmPool
  6. $ virsh vol-create-as --pool vmPool --name master0.img --capacity 200G --allocation 1G --format qcow2
  7. $ virsh vol-create-as --pool vmPool --name master1.img --capacity 200G --allocation 1G --format qcow2
  8. $ virsh vol-create-as --pool vmPool --name master2.img --capacity 200G --allocation 1G --format qcow2
  9. $ virsh vol-create-as --pool vmPool --name node1.img --capacity 300G --allocation 1G --format qcow2
  10. $ virsh vol-create-as --pool vmPool --name node2.img --capacity 300G --allocation 1G --format qcow2
  11. $ virsh vol-create-as --pool vmPool --name node3.img --capacity 300G --allocation 1G --format qcow2

打开 VNC 防火墙端口

方法一

  1. 查询端口

    1. $ netstat -lntup | grep qemu-kvm
  2. 打开 VNC 的防火墙端口。假设端口从 5900 开始,参考命令如下:

    1. $ firewall-cmd --zone=public --add-port=5900/tcp
    2. $ firewall-cmd --zone=public --add-port=5901/tcp
    3. $ firewall-cmd --zone=public --add-port=5902/tcp
    4. $ firewall-cmd --zone=public --add-port=5903/tcp
    5. $ firewall-cmd --zone=public --add-port=5904/tcp
    6. $ firewall-cmd --zone=public --add-port=5905/tcp

方法二

直接关闭防火墙

  1. $ systemctl stop firewalld

准备虚拟机配置文件

创建虚拟机需要虚拟机配置文件。假设配置文件为 master.xml ,以虚拟机 hostname 为 k8smaster0 的节点为例,参考配置如下:

  1. cat master.xml
  2. <domain type='kvm'>
  3. <name>k8smaster0</name>
  4. <memory unit='GiB'>8</memory>
  5. <vcpu>8</vcpu>
  6. <os>
  7. <type arch='aarch64' machine='virt'>hvm</type>
  8. <loader readonly='yes' type='pflash'>/usr/share/edk2/aarch64/QEMU_EFI-pflash.raw</loader>
  9. <nvram>/var/lib/libvirt/qemu/nvram/k8smaster0.fd</nvram>
  10. </os>
  11. <features>
  12. <acpi/>
  13. <gic version='3'/>
  14. </features>
  15. <cpu mode='host-passthrough'>
  16. <topology sockets='2' cores='4' threads='1'/>
  17. </cpu>
  18. <iothreads>1</iothreads>
  19. <clock offset='utc'/>
  20. <on_poweroff>destroy</on_poweroff>
  21. <on_reboot>restart</on_reboot>
  22. <on_crash>restart</on_crash>
  23. <devices>
  24. <emulator>/usr/libexec/qemu-kvm</emulator>
  25. <disk type='file' device='disk'>
  26. <driver name='qemu' type='qcow2' iothread="1"/>
  27. <source file='/mnt/vm/images/master0.img'/>
  28. <target dev='vda' bus='virtio'/>
  29. <boot order='1'/>
  30. </disk>
  31. <disk type='file' device='cdrom'>
  32. <driver name='qemu' type='raw'/>
  33. <source file='/mnt/openEuler-21.03-everything-aarch64-dvd.iso'/>
  34. <readonly/>
  35. <target dev='sdb' bus='scsi'/>
  36. <boot order='2'/>
  37. </disk>
  38. <interface type='network'>
  39. <mac address='52:54:00:00:00:80'/>
  40. <source network='default'/>
  41. <model type='virtio'/>
  42. </interface>
  43. <console type='pty'/>
  44. <video>
  45. <model type='virtio'/>
  46. </video>
  47. <controller type='scsi' index='0' model='virtio-scsi'/>
  48. <controller type='usb' model='ehci'/>
  49. <input type='tablet' bus='usb'/>
  50. <input type='keyboard' bus='usb'/>
  51. <graphics type='vnc' listen='0.0.0.0'/>
  52. </devices>
  53. <seclabel type='dynamic' model='dac' relabel='yes'/>
  54. </domain>

由于虚拟机相关配置必须唯一,新增虚拟机需要适配修改如下内容,保证虚拟机的唯一性:

  • name:虚拟机 hostname,建议尽量小写。例中为 k8smaster0
  • nvram:nvram的句柄文件路径,需要全局唯一。例中为 /var/lib/libvirt/qemu/nvram/k8smaster0.fd
  • disk 的 source file:虚拟机磁盘文件路径。例中为 /mnt/vm/images/master0.img
  • interface 的 mac address:interface 的 mac 地址。例中为 52:54:00:00:00:80

安装虚拟机

  1. 创建并启动虚拟机

    1. $ virsh define master.xml
    2. $ virsh start k8smaster0
  2. 获取虚拟机的 VNC 端口号

    1. $ virsh vncdisplay k8smaster0
  3. 使用虚拟机链接工具,例如 VNC Viewer 远程链接虚拟机,并根据提示依次选择配置,完成系统安装

  4. 设置虚拟机 hostname,例如设置为 k8smaster0

    1. $ hostnamectl set-hostname k8smaster0