KVM(名称来自英语:Kernel-basedVirtual Machine的缩写,即基于内核的虚拟机),是一种用于Linux内核中的虚拟化基础设施,可以将Linux内核转化为一个hypervisor。KVM在2007年2月被导入Linux 2.6.20核心中,以可加载核心模块的方式被移植到FreeBSD及illumos上。
KVM在具备Intel VT或AMD-V功能的x86平台上运行。它也被移植到S/390,PowerPC与IA-64平台上。在Linux内核3.9版中,加入ARM架构的支持。
1).KVM是开源软件,全称是kernel-based virtual machine(基于内核的虚拟机)。
2).是x86架构且硬件支持虚拟化技术(如 intel VT 或 AMD-V)的Linux全虚拟化解决方案。
3).它包含一个为处理器提供底层虚拟化 可加载的核心模块kvm.ko(kvm-intel.ko或kvm-AMD.ko)。
4).KVM还需要一个经过修改的QEMU软件(qemu-kvm),作为虚拟机上层控制和界面。
5).KVM能在不改变linux或windows镜像的情况下同时运行多个虚拟机,(它的意思是多个虚拟机使用同一镜像)并为每一个虚拟机配置个性化硬件环境(网卡、磁盘、图形适配器……)。
6).在主流的Linux内核,如2.6.20以上的内核均已包含了KVM核心。
kvm 是linux内核包含的东西,使用qemu作为上层管理(命令行)。
1).要求cpu 必须支持虚拟化。
2).性能:作为服务器很好,可是图形能力十分的差。即使放电影,图像也是像刷油漆一样,一层一层的。
3).cpu使用率控制很好。
4).控制上比较简洁,功能比较丰富:比如使用“无敌功能”所有更改指向内存,你的镜像永远保持干净。“母镜像”功能让你拥有n个独立快照点。还有很多参数。另外,kvm作为内核级的虚拟机,刚开始发展关注的公司比较多——但是还没有达到商业应用的水平。
KVM内存管理:
KVM继承了Linux系统管理内存的诸多特性,比如,分配给虚拟使用的内存可以被交换至交换空间、能够使用大内存页以实现更好的性能,以及对NUMA的支持能够让虚拟机高效访问更大的内存空间等。
KVM基于Intel的EPT(ExtendedPage Table)或AMD的RVI(Rapid Virtualization Indexing)技术可以支持更新的内存虚拟功能,这可以降低CPU的占用率,并提供较好的吞吐量。
此外,KVM还借助于KSM(Kernel Same-pageMerging)这个内核特性实现了内存页面共享。KSM通过扫描每个虚拟机的内存查找各虚拟机间相同的内存页,并将这些内存页合并为一个被各相关虚拟机共享的单独页面。在某虚拟机试图修改此页面中的数据时,KSM会重新为其提供一个新的页面副本。实践中,运行于同一台物理主机上的具有相同GuestOS的虚拟机之间出现相同内存页面的概率是很高的,比如共享库、内核或其它内存对象等都有可能表现为相同的内存页,因此,KSM技术可以降低内存占用进而提高整体性能。
1,环境准备
4G,2核
#关闭防火墙和selinux
[root@ c7-41 ~] systemctl stop firewalld
[root@ c7-41 ~] systemctl disable firewalld
[root@ c7-41 ~] setenforce 0
[root@ c7-41 ~] sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
[root@ c7-41 ~] egrep '(vmx|svm)' /proc/cpuinfo
[root@ c7-41 ~] yum -y install qemu-kvm qemu-kvm-tools libvirt
#libvirt用来管理kvm
#kvm属于内核不用安装
[root@ c7-41 ~] systemctl start libvirtd #启动libvirt
[root@ c7-41 ~] systemctl enable libvirtd #添加开机自启
3,进入opt,上传镜像,也可以使用dd命令,复制系统镜像,挂载到光盘上
[root@ c7-41 ~] cd /opt/
[root@ c7-41 opt] ls
CentOS-7-x86_64-DVD-1908.iso
[root@ c7-41 opt] if=/dev/cdrom of=/opt/CentOS-7-x86_64-DVD-1908.iso
也可以使用dd命令,复制系统镜像,挂载到光盘上
[root@ c7-41 opt] dd if=/dev/cdrom of=/opt/CentOS-7-x86_64-DVD-1908.iso
4,创建磁盘
[root@ c7-41 opt] qemu-img create -f qcow2 /opt/c77.qcow2 8G
Formatting '/opt/c77.qcow2', fmt=qcow2 size=8589934592 encryption=off cluster_size=65536 lazy_refcounts=off
[root@ c7-41 opt] ll
total 4554948
-rw-r--r-- 1 root root 197120 May 13 14:11 c77.qcow2
-rw-r--r-- 1 root root 4664066048 May 13 14:08 CentOS-7-x86_64-DVD-1908.iso
5,安装虚拟机
[root@ c7-41 opt] yum -y install virt-install
[root@ c7-41 opt] virt-install --virt-type=kvm --name=c77 --vcpus=1 -r 1024 --cdrom=/opt/CentOS-7-x86_64-DVD-1908.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole --os-type=linux --os-variant=rhel7 --disk path=/opt/c77.qcow2,size=6,format=qcow2
Starting install...
Domain installation still in progress. You can reconnect to
the console to complete the installation process.
[root@ c7-41 opt] virsh list --all #查看虚拟机运行状态
Id Name State
----------------------------------------------------
1 c77 running
6,使用vnc登陆,开始设置安装虚拟机
选择语言
选择时区
最小化安装,可以安装在几个工具
关闭kdump
开始安装
设置用户密码
安装完成,重启
7,重启后会断掉,在服务器上执行启动命令
[root@ c7-41 opt] virsh start c77 #c77是创建虚拟机的名字
Domain c77 started
[root@ c7-41 ~] brctl show
bridge name bridge id STP enabled interfaces
virbr0 8000.525400221bf0 yes virbr0-nic
vnet0
[root@ c7-41 ~] ifconfig virbr0
virbr0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.122.1 netmask 255.255.255.0 broadcast 192.168.122.255
ether 52:54:00:22:1b:f0 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
9,手动添加临时br0网卡
#安装所需组件
[root@ c7-41 ~] yum -y install bridge-utils
#手动添加临时br0网卡
[root@ c7-41 ~] brctl addbr br0
[root@ c7-41 ~] brctl show
bridge name bridge id STP enabled interfaces
br0 8000.000000000000 no
virbr0 8000.525400221bf0 yes virbr0-nic
vnet0
#执行下步操作,会导致xshell与宿主机断开连接,
[root@ c7-41 ~] brctl addif br0 ens33
#删除ens33的IP地址
[root@ c7-41 ~] ip addr del dev ens33 10.0.0.41/24
#配置br0的ip地址并启动设备
[root@ c7-41 ~] ifconfig br0 10.0.0.41/24 up
#重新加入默认网关
[root@ c7-41 ~] route add default gw 10.0.0.254
10,重新连接xshell查看是否生效
[root@ c7-41 ~] route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
10.0.0.0 0.0.0.0 255.255.255.0 U 0 0 0 br0
169.254.0.0 0.0.0.0 255.255.0.0 U 1003 0 0 ens37
172.16.0.0 0.0.0.0 255.255.0.0 U 0 0 0 ens37
192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0
#测试外网
[root@ c7-41 ~] ping -c 1 qq.com
PING qq.com (58.250.137.36) 56(84) bytes of data.
64 bytes from 58.250.137.36 (58.250.137.36): icmp_seq=1 ttl=128 time=96.0 ms
11,手动配置永久生效网卡
[root@ c7-41 ~] cd /etc/sysconfig/network-scripts/
#将网卡做一个备份
[root@ c7-41 network-scripts] cp ifcfg-ens33 /root
#配置第一块网卡ens33
[root@ c7-41 network-scripts] vim ifcfg-ens33
[root@ c7-41 network-scripts] cat ifcfg-ens33
DEVICE=ens33
TYPE=Ethernet
ONBOOT=yes
BRIDGE=br0
NM_CONTROLLED=no
#配置br0网卡
[root@ c7-41 network-scripts] cat> ifcfg-br0<<EOF
DEVICE=br0
TYPE=Bridge
ONBOOT=yes
BOOTPROTO=static
IPADDR=10.0.0.41
NETMASK=255.255.255.0
GATEWAY=10.0.0.254
NM_CONTROLLED=no
EOF
#重启网络
[root@ c7-41 network-scripts] systemctl restart network
12,在vnc上配置虚拟机网卡
[root@localhost ~] vi /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
NAME=eth0
DEVICE=eth0
ONBOOT=yes
IPADDR=10.0.0.100
PREFIX=24
GATEWAY=10.0.0.254
DNS1=223.5.5.5
DNS2=1.1.1.1
#重启网络
[root@localhost ~] systemctl restart network
#查看sshd是否开启X11转发
[root@ c7-41 ~] grep X11Forwarding /etc/ssh/sshd_config --colour
X11Forwarding yes
# X11Forwarding no
#安装x11组件
[root@ c7-41 ~] yum -y install xorg-x11-font-utils.x86_64 xorg-x11-server-utils.x86_64 xorg-x11-utils.x86_64 xorg-x11-xauth.x86_64 xorg-x11-xinit.x86_64 xorg-x11-drv-ati-firmware
14,安装libvirt
#libvirt是管理虚拟机的API库,支持kvm虚拟机,可以管理Xen等方案下的虚拟机
[root@ c7-41 ~] yum -y install virt-manager libvirt libvirt-Python python-virtinst libvirt-client virt-viewer mesa-libglapi
#因为此主机是服务器,没有图形化界面,如需virt-manager图形化安装安装虚拟机,需要安装x-Windows
[root@ c7-41 ~] yum -y install libXdmcp libXmu libxkbfile xkeyboard-config xorg-x11-xauth xorg-x11-xkb-utils
#重启libvirt服务
[root@ c7-41 ~] systemctl restart libvirtd.service
15,配置xshell
安装Xming后,打开xshell,在连接属性的tunneing中勾选Forwarding x11 connection to选项,可以正常打开virt-manager图形界面。
16,启动virt-manager
#断开xshell,重启连接可以自动弹出kvm管理软件
[root@ c7-41 ~] virt-manager
#如果出现乱码,可以安装此工具
[root@ c7-41 ~] yum -y install dejavu-sans-mono-fonts
点击鼠标右键,关闭虚拟机
双击c77虚拟机
会进入到此界面
查看虚拟机详细信息
配置网卡,为桥接状态
调配虚拟机开机自启
设置完成,返回图形化界面。