在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-utils | Linux网桥,用来配置虚拟机的桥接网络。 |
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也支持多种类型的网络,主要分为三种。
NAT模式 虚拟机需要把流量发送到宿主机,宿主机器转换网络信息后再发出,外部机器无法感知到虚拟机的存在。此种方式宿主机器相当于一个路由器,因此宿主机上会有一个和虚拟机同网段的IP,并且虚拟机的网关地址是宿主机的这个IP。
主机模式 虚拟机只能互相访问,不能访问宿主机。此种方式与NAT模式类似,但它没有与虚拟机同网段的IP,因此虚拟机也不能借助于宿主机来访问外部网络。
桥接模式 虚拟机和宿主机都关联在一个网桥上,因此虚拟机可以与宿主机在同一个网段,并且外部机器可以直接访问到虚拟机,虚拟机也可以借助网桥来访问外部网络。
还有一种模式在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
创建虚拟机
创建虚拟机有三种选择
virt-install 使用命令创建虚拟机较为方便快捷,但对新手不友好,很多参数不知道如何设置。
Libvirt 使用libvirt提供的api接口进行创建,此种方式开发虚拟化平台会用到。
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
推荐本站淘宝优惠价购买喜欢的宝贝:
本文链接:https://www.hqyman.cn/post/11926.html 非本站原创文章欢迎转载,原创文章需保留本站地址!
休息一下~~