安装依赖工具

x84

1
dnf install virt-install virt-manager libvirt-daemon-qemu virt-viewer

arm

1
dnf install virt-install virt-manager libvirt-daemon-qemu edk2-aarch64.noarch virt-viewer

启用

1
systemctl start libvirtd && systemctl enable libvirtd

准备虚拟机磁盘文件

1. 使用dnf包管理器安装qemu-img
qemu-img是一种用于创建、转换和管理各种虚拟机磁盘映像文件格式的工具。-y选项表示自动确认所有提示,不需要用户交互。

1
dnf install -y qemu-img

2. 定义名为vmPool的存储池
存储池类型被设定为dir,表示该存储池存放在一个目录中。并指定存储池路径--target /mnt/vm/images/

1
virsh pool-define-as vmPool --type dir --target /mnt/vm/images/

3. 创建存储池
创建一个名为vmPool的存储池

1
virsh pool-build vmPool

4. 启动存储池

1
virsh pool-start vmPool

5. 设置存储池为自启动

1
virsh pool-autostart  vmPool

6. 创建磁盘映像文件
vmPool存储池中创建一个名为master.img的磁盘映像文件,该映像文件的总容量为200GB,实际已分配的存储为1GB,文件格式为qcow2。以此类推创建node1、node2。

1
virsh vol-create-as --pool vmPool --name master.img --capacity 200G --allocation 1G --format qcow2
1
virsh vol-create-as --pool vmPool --name node1.img --capacity 300G --allocation 1G --format qcow2
1
virsh vol-create-as --pool vmPool --name node2.img --capacity 300G --allocation 1G --format qcow2

打开 VNC 防火墙端口

方法一
1. 查询端口

1
netstat -lntup | grep qemu-kvm

2. 打开 VNC 的防火墙端口
假设端口从 5900 开始,参考命令如下:

1
2
3
firewall-cmd --zone=public --add-port=5900/tcp
firewall-cmd --zone=public --add-port=5901/tcp
firewall-cmd --zone=public --add-port=5902/tcp

方法二
直接关闭防火墙

1
systemctl stop firewalld && systemctl disable firewalld

准备虚拟机配置文件

创建虚拟机需要虚拟机配置文件。假设配置文件为 master.xml ,以虚拟机 hostname 为 k8s-master 的节点为例,node节点或者其他节点的配置根据需求自行修改就行,参考配置如下:

由于虚拟机相关配置必须唯一,新增虚拟机需要适配修改如下内容,保证虚拟机的唯一性:
name:虚拟机 hostname,建议尽量小写。例中为 k8s-master
nvram:nvram的句柄文件路径,需要全局唯一。例中为 /var/lib/libvirt/qemu/nvram/k8s-master.fd
disk 的 source file:虚拟机磁盘文件路径。例中为 /home/vm/images/master.img
interface 的 mac address:interface 的 mac 地址。例中为 52:54:00:00:00:80

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
<domain type='kvm'>
<name>k8s-master</name>
<memory unit='GiB'>8</memory>
<currentMemory unit='GiB'>8</currentMemory>
<vcpu placement='static'>8</vcpu>
<os>
<type arch='x86_64' machine='pc-i440fx-6.2'>hvm</type> <!-- 修改此处的 arch 和 machine -->
<nvram>/var/lib/libvirt/qemu/nvram/k8s-master.fd</nvram>
</os>
<features>
<acpi/>
<apic/>
</features>
<cpu mode='host-passthrough'>
<!-- `sockets='2'` :表示虚拟机有2个虚拟CPU插槽(类似于物理的CPU插槽)。可以理解为虚拟机有2个虚拟的CPU芯片。 -->
<!-- `cores='4'` :表示每个虚拟CPU插槽有4个核心。所以虚拟机总共有2 * 4 = 8个虚拟核心。 -->
<!-- `threads='1'` :表示每个虚拟核心有1个线程。这就是说,虚拟机不支持超线程(如果支持超线程,每个核心通常会有2个线程) -->
<topology sockets='2' cores='4' threads='1'/>
</cpu>
<clock offset='utc'/>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>restart</on_crash>
<devices>
<emulator>/usr/libexec/qemu-kvm</emulator>
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2'/>
<source file='/home/vm/images/master.img'/> <!-- 修改为你的镜像路径 -->
<target dev='vda' bus='virtio'/>
<boot order='1'/>
</disk>
<disk type='file' device='cdrom'>
<driver name='qemu' type='raw'/>
<source file='/home/openEuler-23.09-x86_64-dvd.iso'/> <!-- 修改为你要安装系统文件路径 -->
<readonly/>
<target dev='sdb' bus='scsi'/>
<boot order='2'/>
</disk>
<interface type='bridge'> <!-- 确保你的网络设置正确 -->
<mac address='ce:a0:ec:99:ec:e8'/> <!-- 随机生成一个MAC地址(必须是单播地址) -->
<source bridge='br0'/>
<model type='virtio'/>
</interface>
<interface type='bridge'> <!-- 确保你的网络设置正确 -->
<mac address='96:aa:e6:6b:b8:a2'/> <!-- 随机生成一个MAC地址(必须是单播地址) -->
<source bridge='br1'/>
<model type='virtio'/>
</interface>
<console type='pty'/>
<video>
<model type='virtio'/>
</video>
<controller type='scsi' index='0' model='virtio-scsi'/>
<controller type='usb' model='ehci'/>
<input type='tablet' bus='usb'/>
<input type='keyboard' bus='usb'/>
<graphics type='vnc' listen='0.0.0.0'/>
<seclabel type='dynamic' model='dac' relabel='yes'/>
</devices>
</domain>

安装虚拟机

1. 创建并启动虚拟机

1
virsh define master.xml && virsh start k8s-master

2. 获取虚拟机的 VNC 端口号

1
virsh vncdisplay k8s-master

3. 使用虚拟机连接工具
例如 VNC Viewer 远程连接虚拟机,并根据提示依次选择配置,完成系统安装。此处使用:MobaXterm,点击获取:注册码
4. 设置虚拟机 hostname,例如设置为 k8s-master

1
hostnamectl set-hostname k8s-master

命令详解

virsh命令详解