在上一篇的作业中,我们了解了虚拟化和KVM的相关知识,此篇主要看下如何通过KVM来创建虚拟机。在使用KVM创建虚拟机时,我们可以选择NAT网络或Bridge网络,NAT网络虚拟机可以直接访问外网,外网无法直接访问虚拟机;Bridge网络虚拟机可以访问外网,外网也可直接访问虚拟机。

  1. 实验准备

1.1 宿主机要求

    宿主机使用CentOS或者Ubuntu等都可以,建议准备4核CPU、至少2G内存和60G硬盘空间的保底要求,以防实验环节宿主机资源不够用导致无法安装成功。

使用KVM创建NAT和Bridge网络虚拟机_创建虚拟机

1.2 开启并验证虚拟化功能

    要想使用KVM创建NAT或Bridge网络虚拟机,首先要确保我们使用的计算机物理硬件是支持虚拟化的,并且要开启虚拟化功能。以笔者使用的VMware Workstation为例,需要勾选“虚拟机设置”—“处理器”中的“虚拟化Intel VT-x或AMD-V/RVI(V)”,开启并登录宿主机后,执行lscpu | grep -E "vmx|svm"命令或grep -E "vmx|svm" /proc/cpuinfo | wc -l命令检验是否支持虚拟化功能,如果支持,前一个命令会显示vmx或svm,后一个命令会显示宿主机核数对应的值。

使用KVM创建NAT和Bridge网络虚拟机_nat_02

使用KVM创建NAT和Bridge网络虚拟机_创建虚拟机_03


  1. 创建NAT网络虚拟机

2.1 安装KVM工具包

    笔者以CentOS7.9作为宿主机来演示相关的实验,在实验之前,我们需要安装好KVM工具包,包括qemu-kvm、qemu-kvm-tools、libvirt、libvirt-client、virt-manager和virt-install。

使用KVM创建NAT和Bridge网络虚拟机_外网_04

    由于笔者使用的是最小化安装,执行ifconfig命令时只会显示eth0和lo网卡的信息,此时启动libvirtd服务后即可看到新生成的NAT⽹卡virbr0,并且有一个默认的地址192.168.122.1。NAT模式下,当前虚拟主机可以通过地址转换,使用宿主机的IP进行外网的访问,而外网则无法直接访问虚拟机。

使用KVM创建NAT和Bridge网络虚拟机_网桥_05

使用KVM创建NAT和Bridge网络虚拟机_kvm_06

    如果想要修改默认的virbr0网址,可以修改/etc/libvirt/qemu/networks/目录下的default.xml或者autostart/default.xml文件,其他内容不用动,virbr0网址可修改“ip address”一行,并可指定子网掩码,另外要设置新的地址池范围。修改完毕重启libvirtd服务,如果没有显示新的IP,需要重启服务器生效。

使用KVM创建NAT和Bridge网络虚拟机_kvm_07

使用KVM创建NAT和Bridge网络虚拟机_网桥_08

使用KVM创建NAT和Bridge网络虚拟机_外网_09

2.2 开启ip_forward功能

    由于所有后期创建的虚拟机网关必须指向virbr0网址,即172.16.0.1,然后经过NAT转换后才能访问外网,宿主机需要开启ip_forward功能。

使用KVM创建NAT和Bridge网络虚拟机_外网_10

2.3 创建磁盘

2.3.1 查看qemu-img帮助

    虚拟机的CPU和内存可以直接从宿主机调用,但磁盘文件需要单独创建,需要指定虚拟机在创建时的最大和最小磁盘。创建磁盘时需要用到qemu-img命令,该命令的具体用法可查看相关帮助,它不仅可以创建磁盘,还可以转换磁盘格式。

使用KVM创建NAT和Bridge网络虚拟机_创建虚拟机_11

2.3.2 虚拟机磁盘格式

    虚拟机的磁盘主要可分为raw、cow、qcow2和vmdk四种:

    ①raw:读写等性能是最好的,但是该格式创建的属于裸磁盘,会根据划分的大小立即在宿主机中占用同等大小的磁盘空间。如果使用了该磁盘格式,在进行虚拟机迁移时,即使只用了很少的磁盘空间,也要将所有划分的空间整体迁移过去。

    ②cow:瘦增长磁盘,不会在宿主机中立即占用指定分配的磁盘空间,会随着数据的增长而增长。

    ③qcow2:在cow的基础上进行了优化,属于瘦增长磁盘的增强版,目前主流的LVM环境和OpenStack中都是使用该磁盘格式的。

    ④vmdk:VMware专属的磁盘格式。

2.3.3 创建虚拟机磁盘

    默认的虚拟机磁盘保存路径为/var/lib/libvirt/images/,由于raw的性能最好,qcow2使用最广,笔者以这两种格式为例均创建一个指定10G大小的磁盘,在创建时我们需要使用-f选项指定磁盘格式,名称可以自定义,但是建议设为服务名称以便管理。创建完毕,可以看到raw磁盘格式的大小就是10G,而qcow2只占用了最基础的空间,只有后期数据增加了才会增加。使用file命令去查看时,raw格式的为数据盘,而qcow2格式的则为qemu模拟的磁盘镜像文件。

使用KVM创建NAT和Bridge网络虚拟机_创建虚拟机_12

2.4 创建ISO文件路径

    因笔者使用的是本地光盘安装方式,在创建虚拟机之前还要将ISO光盘上传到宿主机,如果是要安装的虚拟机较多,使用的光盘版本不一,建议单独创建一个比较容易记住的目录来存放。

使用KVM创建NAT和Bridge网络虚拟机_网桥_13

2.5 创建NAT网络虚拟机

    虚拟机的创建需要使用命令行和virt-manager图形管理工具。

2.5.1 virt-install常用选项

    使用命令行来创建虚拟机时,需要用到virt-install命令。查看virt-install命令帮助时,其选项比较多,常用的包括--virt-type(要使用的管理程序名称,如vkm、qemu和xen)、-n(指定虚拟机名称,同一宿主机上的虚拟机名称不能同名)、--ram/--memory(指定最大内存,不会立即占用)、--vcpus(指定虚拟CPU核心)、--cdrom(指定光盘安装的路径)、--disk(指定要使用的磁盘路径)、--network(指定何种方式的网络安装)、--graphics(配置虚拟机显示设置)、--noautoconsole(不要自动尝试连接到客户端控制台)等。

使用KVM创建NAT和Bridge网络虚拟机_nat_14

2.5.2 创建虚拟机

    笔者在常用选项的基础上创建默认类型网络(NAT)虚拟机,创建完毕会打开5900端口,后期再创建的会在此端口的基础上加1。

使用KVM创建NAT和Bridge网络虚拟机_创建虚拟机_15

2.5.3 安装虚拟机

    安装环节可以使用vnc或者virt-manager工具,不过vnc无法设置虚拟机的相关参数。如果是使用xshell等终端,需要保证已安装过xmanager工具,并且xshell终端设置了X11转移,否则无法打开virt-manager界面。

使用KVM创建NAT和Bridge网络虚拟机_创建虚拟机_16

    执行virt-manager命令后会弹出管理界面,双击要安装的虚拟机进行安装,默认情况下是等1分钟就会自动安装,如果需要修改参数得在1分钟内处理好,进入页面后按tab键在底部新增的条目后添加。

使用KVM创建NAT和Bridge网络虚拟机_外网_17

    安装过程与在VMware安装无太大区别,主要是在NETWORK & HOSTNAME环节检测是否能获取到IP,如无法获取,则表示宿主机上的配置出现了问题。

使用KVM创建NAT和Bridge网络虚拟机_kvm_18

使用KVM创建NAT和Bridge网络虚拟机_创建虚拟机_19

2.6 检测虚拟机是否可以用

    安装完毕后,第一次虚拟机是无法自动重启的,需手动启动。

使用KVM创建NAT和Bridge网络虚拟机_nat_20

使用KVM创建NAT和Bridge网络虚拟机_kvm_21

    输入root密*码登录后,可以ping通外网,也能安装软件,则说明虚拟机的安装是没问题的。

使用KVM创建NAT和Bridge网络虚拟机_网桥_22


  1. 创建Bridge网络虚拟机

    在不设置静态路由的基础上,外网是无法直接访问NAT网络虚拟机的,NAT网络虚拟机对主机的性能损耗也较大,在企业中使用更多的则是Bridge网络虚拟机。Bridge类似于交换机的安全设备,虚拟机都连接到Bridge,Bridge的另一端就是宿主机的地址,报文通过宿主机出去,免去了地址转换,节省了宿主机的性能。外网访问虚拟机时,也能通过Bridge直达。Bridge网络的虚拟机性能相对于NAT网络虚拟机更好,缺点是比较浪费IP地址。

3.1 宿主机配置网桥

    网桥的名称可自定义,笔者使用的为br0。创建网桥时,需要注释掉宿主机网卡中的IP地址、网关、子网掩码和DNS,并添加一行BRIDGE=br0。同时也要创建网桥的网卡,网卡类别设为Bridge,要将宿主机网卡中注释的内容剪切过来。br0网卡在重启网卡后生效,重启网卡前需确保宿主机上安装了bridge-utils包,否则可能会导致远程终端断开连接。

使用KVM创建NAT和Bridge网络虚拟机_kvm_23

使用KVM创建NAT和Bridge网络虚拟机_创建虚拟机_24

使用KVM创建NAT和Bridge网络虚拟机_创建虚拟机_25

3.2 创建Bridge网络虚拟机

    Bridge网络虚拟机的创建基本与NAT网络虚拟机相同,不过在network部分需指定网络类型为bridge,由于笔者在NAT部分创建了两个磁盘,还剩一个qcow2格式的未使用,就直接使用该磁盘。安装环节与NAT网络虚拟机一样,同样要在NETWORK & HOSTNAME环节查看是否能自动获取IP地址,以及IP地址是否和宿主机在同一个网段。初次重启也会无法启动,要手动启动。

使用KVM创建NAT和Bridge网络虚拟机_外网_26

使用KVM创建NAT和Bridge网络虚拟机_外网_27

使用KVM创建NAT和Bridge网络虚拟机_kvm_28

3.3 检测虚拟机是否可用

    进入虚拟机后,可以ping通外网,并能安装服务,则说明新创建的虚拟机是可用的。查看IP时显示的mac地址与宿主机上的vnet0是成对的,如果后面创建其他的桥接虚拟机,也会与宿主机上的vnet1、vnet2之类成对。

使用KVM创建NAT和Bridge网络虚拟机_nat_29

使用KVM创建NAT和Bridge网络虚拟机_创建虚拟机_30

    与NAT不同的是,外部网络是可以直接访问到Bridge网络虚拟机的,只要宿主机没挂,并且虚拟机处于开机状态,连接Bridge虚拟机就如同连接一般的主机一样。

使用KVM创建NAT和Bridge网络虚拟机_nat_31