什么是虚拟化
在计算机技术中,虚拟化是一种资源管理技术,是将计算机的各种实体资源(CPU,内存,磁盘空间,网络适配器等)予以抽象,转换后呈现出来并可供分割,组合为一个或多个计算机配置环境,并重新分割,重新组合,已达到最大化合理利用物理资源的目的
虚拟化优势
虚拟化可以提高IT敏捷性,灵活性和可扩展性,同时大幅节约成本。更高的工作负载移动性,更高的性能和资源可用性,自动化运维这些都是虚拟化的优势,虚拟化技术可以使it部门更加轻松的进行管理以及降低拥有成本和运维成本,其优势很多;例如可以实现:
1资源超分,如物理内存128G可以给虚拟机分配200G内存
2.降低资金成本和运维成本
3.最大限度减少和消除停机
4.提高IT部门的工作效率,效益,敏捷性和响应能力
5.加快应用和资源的调配速度
6.提高业务连续性和灾难恢复能力
7.简化数据中心管理
8.减少端口冲突
虚拟机是什么
虚拟计算机称为“虚拟机”(VM,Virtual Machine),它是一种严密隔离且内含操作系统和应用的软件容器。每个虚拟机都是完全独立的。通过将多台虚拟机放置在一台物理计算机上,可仅在一台物理服务器或“主机”上运行多个操作系统和应用,名为“hypervisor”的精简软件层可将虚拟机与主机分离开来,并根据需要为每个虚拟机动态分配计算资源。
接下来我们了解一下KVM技术
KVM是开源软件,可运行多个未修改的linux和windows映像的虚拟机
kvm架构
kvm是基于虚拟花扩展的X86硬件开源的linux原生的全虚拟化解决方案,虚拟机被实现为常规的linux进程,由标准linux调度程序进行调度;虚拟机的每个虚拟CPU被实现为一个常规的linux进程。这使得kvm能够使用linux内核已有功能
但是。kvm本身不能执行任何硬件模拟,需要客户空间程序用过/dev/kvm接口设置一个客户机虚拟服务器的地址空间,向它提供模拟的I/O,并向他的视频显示映射回宿主的显示屏。目前这个应用程序是QEMU
接下来我们介绍一下kvm的功能
1支持CPU和memory超分
2.支持半虚拟化I/O
3.支持热插拔
4.支持对称多处理
5.支持实时迁移
6.支持PCI设备直接分配和单根I/O虚拟化
7.支持内核同页合并
8.支持NUMA
kvm的局限性
CPU overcommit:过载使用,性能下降
时间记录难以精确,依赖于时间同步机制,如NTP
VM量特别大时,MAC地址存在冲突的可能性
实时迁移:共享存储,CPU架构,版本等
性能局限性
如何实现基于kvm的虚拟化安装
我是在vmware上使用虚拟机作为宿主机实现安装虚拟机
因为kvm需要宿主机CPU支持虚拟化功能,因为要在虚拟机配置界面的处理器选项中开启虚拟化功能
#接下来需要安装相关包文件,其中libvirt必须安装,它是使用最多的KVM虚拟化管理工具和应用程序接口,即通过libvirt调用KVM创建虚拟机,libvirt是KVM通用的访问API,其不但能管理KVM,还能管理VMware、Xen、Hyper-V、virtualBox等虚拟化方案。
[root@localhost ~]# yum -y install qemu-kvm libvirt virt-manager virt-install virt-viewer
[root@localhost ~]# systemctl start --now libvirtd
[root@localhost ~]# ss -ntlu
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
udp UNCONN 0 0 192.168.122.1:53 0.0.0.0:*
udp UNCONN 0 0 127.0.0.53%lo:53 0.0.0.0:*
udp UNCONN 0 0 0.0.0.0%virbr0:67 0.0.0.0:*
udp UNCONN 0 0 0.0.0.0:111 0.0.0.0:*
udp UNCONN 0 0 0.0.0.0:5355 0.0.0.0:*
udp UNCONN 0 0 [::]:111 [::]:*
udp UNCONN 0 0 [::]:5355 [::]:*
tcp LISTEN 0 128 0.0.0.0:111 0.0.0.0:*
tcp LISTEN 0 32 192.168.122.1:53 0.0.0.0:*
tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
tcp LISTEN 0 128 0.0.0.0:5355 0.0.0.0:*
tcp LISTEN 0 128 [::]:111 [::]:*
tcp LISTEN 0 128 [::]:22 [::]:*
tcp LISTEN 0 128 [::]:5355 [::]:*
#生成新的虚拟网卡
[root@localhost ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:0c:29:15:e4:3d brd ff:ff:ff:ff:ff:ff
inet 10.0.0.8/24 brd 10.0.0.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe15:e43d/64 scope link
valid_lft forever preferred_lft forever
3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
link/ether 52:54:00:96:cd:5c brd ff:ff:ff:ff:ff:ff
inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
valid_lft forever preferred_lft forever
4: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc fq_codel master virbr0 state DOWN group default qlen 1000
link/ether 52:54:00:96:cd:5c brd ff:ff:ff:ff:ff:ff
#virbr0为网桥设备 virbr0-nic为生成的虚拟网卡,充当虚拟机的nat网卡
#将需要安装系统的iso文件上传到宿主机即10.0.0.8主机
[root@localhost ~]# mkdir /data/isos
[root@localhost ~]# ls /data/isos/
CentOS-7-x86_64-Minimal-2003.iso cn_windows_server_2008_r2_standard_enterprise_datacenter_and_web_with_sp1_vl_build_x64_dvd_617396.iso
CentOS-8.2.2004-x86_64-minimal.iso
#打开Windows中的xmanager-Passive
[root@localhost ~]# export DISPLAY=10.0.0.1:0.0
[root@localhost ~]# virt-manager
[root@localhost ~]# MESA-LOADER: failed to open swrast (search paths /usr/lib64/dri)
libGL error: failed to load driver: swrast
#弹出图形化窗口,接下来我们就可以进行手动安装虚拟机了,过程略
也可以通过命令行工具实现安装
#virt-install属于交互式命令,可以批量式创建管理虚拟机
#qemu-img create 一定要确认对应路径下没有此文件,如果存在将覆盖原文件
[root@localhost ~]# virt-install --virt-type kvm --name centos7 --ram 1024 --vcpus 2 --cdrom=/data/isos/CentOS-7-x86_64-Minimal-2003.iso --disk path=/var/lib/libvirt/images/centos7.qcow2 --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole --os-variant=centos7.0
Starting install...
Domain installation still in progress. You can reconnect to
the console to complete the installation process.
#使用光盘启动之后使用图形化工具virt-manager手动安装
[root@localhost ~]# export DISPLAY=10.0.0.1:0.0
[root@localhost ~]# virt-manager
[root@localhost ~]# MESA-LOADER: failed to open swrast (search paths /usr/lib64/dri)
libGL error: failed to load driver: swrast
#安装过程略