25
2025
06
20:18:55

Linux虚拟化技术KVM

在Windows平台上我们习惯于使用VmWare或者virtual box来实现虚拟化,虽然它们拥有Linux版本,但大多数企业都选择了使用KVM来做Linux平台的虚拟化,因此学习掌握KVM是一项必不可少的技能。

安装KVM

以centos为例,下面是安装KVM虚拟化的命令。

yum install -y qemu-kvm libvirt virt-install bridge-utils

这么多软件都是什么作用?

软件作用
qemu-kvm整合了QEMU 和 KVM 的一个软件。
libvirt封装了QEMU的接口,可以更加方便的操作虚拟机,并且提供了很多种编程语言的SDK。
virt-install用来创建虚拟机的命令行工具。
bridge-utilsLinux网桥,用来配置虚拟机的桥接网络。

kvm、qemu、qemu-kvm和libvirt到底有什么关系?

KVM(Kernel Virtual Machine)是Linux的一个内核驱动模块,它需要CPU的支持,采用硬件辅助虚拟化技术Intel-VT、AMD-V;内存相关如Intel的EPT和AMD的RVI技术,使得它能够让Linux主机成为一个Hypervisor(虚拟机监控器)。

QEMU是一个纯软件实现的虚拟机,它可以模拟CPU、内存、磁盘等其他硬件,让虚拟机认为自己底层就是硬件,其实这些都是QEMU模拟的,虚拟机的所有操作都要经过QEMU转译一层,也就导致了QEMU本身的性能较差。

qemu-kvm是QEMU整合了KVM,把CPU虚拟化和内存虚拟化交给了KVM来做,自己来模拟IO设备,例如网卡和磁盘。这一套组合拳打下来,性能损失大大降低,相较于直接使用硬件,带来的损耗大概在1%-2%之间。

libvirt是目前使用最为广泛的对KVM虚拟机进行管理的工具和API。Libvirtd是一个daemon进程,可以被本地的virsh调用,也可以被远程的virsh调用,Libvirtd调用qemu-kvm操作虚拟机。

启动libvirt

systemctl start libvirtd systemctl enable libvirtd

如果你不想使用命令行工具来管理虚拟机,可以安装 virt-manager 。

yum install -y virt-manager

在支持x11转发的ssh客户端(例如:MobaXterm)上可以直接输入 virt-manager 来启动。

虚拟网络类型

vmware类型,kvm也支持多种类型的网络,主要分为三种。

  1. NAT模式 虚拟机需要把流量发送到宿主机,宿主机器转换网络信息后再发出,外部机器无法感知到虚拟机的存在。此种方式宿主机器相当于一个路由器,因此宿主机上会有一个和虚拟机同网段的IP,并且虚拟机的网关地址是宿主机的这个IP。

  2. 主机模式 虚拟机只能互相访问,不能访问宿主机。此种方式与NAT模式类似,但它没有与虚拟机同网段的IP,因此虚拟机也不能借助于宿主机来访问外部网络。

  3. 桥接模式 虚拟机和宿主机都关联在一个网桥上,因此虚拟机可以与宿主机在同一个网段,并且外部机器可以直接访问到虚拟机,虚拟机也可以借助网桥来访问外部网络。

    还有一种模式在openstack等云平台上使用较为广泛,网桥上绑定的物理网卡没有IP,对应交换机配置端口为trunk模式,虚拟机 端口连接到网桥上,并配置端口不同的VLAN tag以达到隔离和互联的目的。

NAT模式和主机模式都无需单独配置,接下来我们看下如何配置桥接网络。

配置桥接网络

物理网卡绑定到网桥上之后就会导致网络断开,因此我们需要把原IP配置到网桥上。

# 进入网卡配置文件夹 cd /etc/sysconfig/network-scripts/ # 拷贝原网卡配置文件作为桥接网卡 cp ifcfg-enp134s0f0 ifcfg-br0

修改 ifcfg-br0 中的 TYPE=Ethernet 为 TYPE=Bridge,最终效果如下:

DEVICE=br0 ONBOOT=yes BOOTPROTO=none TYPE=Bridge IPADDR=172.16.0.52 PREFIX=16 GATEWAY=172.16.0.1 DNS1=114.114.114.114

修改ifcfg-enp134s0f0 文件删除其中的 IPADDR= NETMASK= GATEWAY= 行,并在最后添加上BRIDGE=br0,最终效果如下:

DEVICE="enp134s0f0" ONBOOT=yes BOOTPROTO=none TYPE=Ethernet BRIDGE=br0

最后重启网络。

systemctl restart network

查看网络信息也可以看到IP配置到了网桥上,网桥上又关联了物理网卡。

[root@localhost network-scripts]# ip a 8: enp134s0f0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master br0 state UP group default qlen 1000     link/ether 74:a4:b5:01:04:22 brd ff:ff:ff:ff:ff:ff     inet6 fe80::76a4:b5ff:fe01:422/64 scope link         valid_lft forever preferred_lft forever 17: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000     link/ether 74:a4:b5:01:04:22 brd ff:ff:ff:ff:ff:ff     inet 172.16.0.52/16 brd 172.16.255.255 scope global br0        valid_lft forever preferred_lft forever     inet6 fe80::76a4:b5ff:fe01:422/64 scope link         valid_lft forever preferred_lft forever [root@localhost network-scripts]# brctl show bridge name     bridge id               STP enabled     interfaces br0             8000.74a4b5010422       no              enp134s0f0

创建虚拟机

创建虚拟机有三种选择

  1. virt-install 使用命令创建虚拟机较为方便快捷,但对新手不友好,很多参数不知道如何设置。

  2. Libvirt 使用libvirt提供的api接口进行创建,此种方式开发虚拟化平台会用到。

  3. virt-manager 使用图形化界面创建虚拟机,此种方式较为简单,只要会用vmware,就会用virt-manager。

因此我比较推荐使用virt-manager来创建虚拟机,过程很简单,我就不发截图了。

管理虚拟机

操作虚拟机的一些常用命令

# 列出正在运行的虚拟机 virsh list # 列出全部的虚拟机 virsh list --all # 启动虚拟机 virsh start test   # 关闭虚拟机 virsh shutdown test   # 强制停止虚拟机 virsh destroy test   # 彻底销毁虚拟机,会删除虚拟机配置文件,但不会删除虚拟磁盘 virsh undefine test   # 设置宿主机开机时该虚拟机也开机 virsh autostart test   # 解除开机启动 virsh autostart --disable test  # 挂起虚拟机 virsh suspend test  # 恢复挂起的虚拟机 virsh resume test  # 查看虚拟机的VNC端口,得到vnc端口之后可以使用vncviewer等工具访问虚拟机 virsh vncdisplay test # 导出虚拟机xml配置文件 virsh dumpxml test >/root/test.xml # 修改虚拟机配置文件 virsh edit test

参考

https://blog.51cto.com/changfei/1672147




推荐本站淘宝优惠价购买喜欢的宝贝:

image.png

本文链接:https://www.hqyman.cn/post/11926.html 非本站原创文章欢迎转载,原创文章需保留本站地址!

分享到:
打赏





休息一下~~


« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

请先 登录 再评论,若不是会员请先 注册

您的IP地址是: