1. KVM 介绍
Kernel-based Virtual Machine的简称,是一个开源的系统虚拟化模块,自Linux 2.6.20之后集成在Linux的各个主要发行版本中。它使用Linux自身的调度器进行管理,所以相对于Xen,其核心源码很少。KVM目前已成为学术界的主流VMM之一。
KVM的虚拟化需要硬件支持(如Intel VT技术或者AMD V技术)。是基于硬件的完全虚拟化。而Xen早期则是基于软件模拟的Para-Virtualization,新版本则是基于硬件支持的完全虚拟化。但Xen本身有自己的进程调度器,存储管理模块等,所以代码较为庞大。广为流传的商业系统虚拟化软件VMware ESX系列是基于软件模拟的Full-Virtualization。
1.1. 关于KVM
- KVM是开源软件,全称是kernel-based virtual machine(基于内核的虚拟机)。
- 是x86架构且硬件支持虚拟化技术(如 intel VT 或 AMD-V)的Linux全虚拟化解决方案。
- 它包含一个为处理器提供底层虚拟化 可加载的核心模块kvm.ko(kvm-intel.ko或kvm-AMD.ko)。
- KVM还需要一个经过修改的QEMU软件(qemu-kvm),作为虚拟机上层控制和界面。
- KVM能在不改变linux或windows镜像的情况下同时运行多个虚拟机,(它的意思是多个虚拟机使用同一镜像)并为每一个虚拟机配置个性化硬件环境(网卡、磁盘、图形适配器……)。
- 在主流的Linux内核,如2.6.20以上的内核均已包含了KVM核心。
1.2. KVM 主要特点
- 要求cpu 必须支持虚拟化。
- 性能:作为服务器很好,可是图形能力十分的差。即使放电影,图像也是像刷油漆一样,一层一层的。
- cpu使用率控制很好。
- 控制上比较简洁,功能比较丰富:比如使用“无敌功能”所有更改指向内存,你的镜像永远保持干净。“母镜像”功能让你拥有n个独立快照点。还有很多参数。另外,kvm作为内核级的虚拟机,刚开始发展关注的公司比较多——但是还没有达到商业应用的水平。
1.3. qemu
全称Quick Emulator。是独立虚拟软件,能独立运行虚拟机(根本不需要kvm)。kqemu是该软件的加速软件。kvm并不需要qemu进行虚拟处理,只是需要它的上层管理界面进行虚拟机控制。虚拟机依旧是由kvm驱动。所以,大家不要把概念弄错了,盲目的安装qemu和kqemu。qemu使用模拟器
1.4. KVM内存管理
KVM继承了Linux系统管理内存的诸多特性,比如,分配给虚拟使用的内存可以被交换至交换空间、能够使用大内存页以实现更好的性能,以及对NUMA的支持能够让虚拟机高效访问更大的内存空间等。
KVM基于Intel的EPT(ExtendedPage Table)或AMD的RVI(Rapid Virtualization Indexing)技术可以支持更新的内存虚拟功能,这可以降低CPU的占用率,并提供较好的吞吐量。
此外,KVM还借助于KSM(Kernel Same-pageMerging)这个内核特性实现了内存页面共享。KSM通过扫描每个虚拟机的内存查找各虚拟机间相同的内存页,并将这些内存页合并为一个被各相关虚拟机共享的单独页面。在某虚拟机试图修改此页面中的数据时,KSM会重新为其提供一个新的页面副本。实践中,运行于同一台物理主机上的具有相同GuestOS的虚拟机之间出现相同内存页面的概率是很的,比如共享库、内核或其它内存对象等都有可能表现为相同的内存页,因此,KSM技术可以降低内存占用进而提高整体性能
2. CentOS 7 安装KVM
2.1. 环境检查
-
检查宿主机是否支持 虚拟化
egrep 'vmx|svm' /proc/cpuinfo
注:
如果flags: 里有vmx 或者svm就说明支持VT;如果没有任何的输出,说明你的cpu不支持,将无法成功安装KVM虚拟机。
-
确保BIOS开启VT
Intel(R) Virtualization Tech [Enabled]
如有必要,还需在BIOS中开启VT-d
-
确保内核版本较新,支持KVM
用uname -r查看内核版本,如果在2.6.20以下的linux版本,需升级内核。
查看是否有kvm模块
$ lsmod|grep kvm kvm_intel 183705 0 kvm 615914 1 kvm_intel
-
关闭 防火墙、SELinux等
$ systemctl stop firewalld $systemctl stop iptables $systemctl disable firewalld $ systemctl disable iptables $ getenforce Disabled
2.2. 开始安装
2.2.1 配置网卡
-
安装bridge-utils工具
yum -y install bridge-utils
-
增加桥接网卡
$ cd /etc/sysconfig/network-scripts $ cp ifcfg-eth0 ifcfg-br0
修改网卡配置文件
$ cat ifcfg-eth0 TYPE=Ethernet BRIDGE=br0 # 指定桥接网卡 DEFROUTE=yes PEERDNS=yes PEERROUTES=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_PEERDNS=yes IPV6_PEERROUTES=yes IPV6_FAILURE_FATAL=no NAME=eth0 UUID=67a016ba-96a5-410d-abac-ecb69be60eba DEVICE=eth0 ONBOOT=yes $ cat ifcfg-br0 TYPE=Bridge # 类型 Bridge BOOTPROTO=dhcp IPADDR=192.168.8.200 NETMASK=255.255.255.0 GATEWAY=192.158.8.25 DEFROUTE=yes PEERDNS=yes PEERROUTES=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_PEERDNS=yes IPV6_PEERROUTES=yes IPV6_FAILURE_FATAL=no NAME=br0 #UUID=67a016ba-96a5-410d-abac-ecb69be60eba # 注释 DEVICE=br0 ONBOOT=yes
重启网卡
$ systemctl restart network # 执行ip a 查看网卡,发现已经多一个br0网卡 $ ip a $ brctl show bridge name bridge id STP enabled interfaces br0 8000.001c42a73b29 no eth0 docker0 8000.024216722c40 no
2.2.2. 安装kvm需要软件
-
libvirt是管理虚拟机的API库,不仅支持KVM虚拟机,也可以管理Xen等方案下的虚拟机。
yum -y install libcanberra-gtk2 qemu-kvm.x86_64 \ qemu-kvm-tools.x86_64 libvirt.x86_64 libvirt-cim.x86_64 \ libvirt-client.x86_64 libvirt-java.noarch libvirt-python.x86_64 \ libiscsi-1.7.0-5.el6.x86_64 dbus-devel virt-clone tunctl \ virt-manager libvirt libvirt-python python-virtinst
-
由于要用virt-manager图形化安装虚拟机,所以还需要安装X-window(这个在前面部署VNC环境里就已经安装了)
yum groupinstall "X Window System"
-
安装中文字符,解决界面乱码问题
yum install -y dejavu-lgc-sans-fonts yum groupinstall -y "Fonts"
-
启用libvirt
systemctl enable libvirtd systemctl start libvirtd
3. 安装虚拟机
-
建立目录
$ mkdir /data/{iso,kvmdisk} -p
-
创建虚拟机
$ virt-install \ --name=test_rhel7 \ --memory=256,maxmemory=1024 \ --vcpus=2,maxvcpus=4 \ --os-type=linux \ --os-variant=rhel7 \ --location=/data/iso/CentOS-7-x86_64-Minimal-1511.iso \ --disk path=/data/kvmdisk/test.img,size=10 \ --bridge=br0 \ --graphics=none \ --console=pty,target_type=serial \ --extra-args="console=tty0 console=ttyS0"
-
命令解释:
命令 说明 –name 虚拟机名称 –memory 分配给虚拟机的内存大小 maxmemory 可调节的内存大小,kvm支持热调整 –vcpus 指定分配给虚拟机的CPU核心数量 maxvcpus 指定可调节的最大CPU核心数量 –os-type 虚拟机安装的操作系统类型 –os-variant 指定系统的发行版本 –location ISO镜像文件所在的路径,支持使用网络资源路径,也就是说可以使用URL –disk path 虚拟硬盘所存放的路径及名称,size 则是指定该硬盘的可用大小,单位是G –bridge 使用哪一个桥接网卡,也就是说使用桥接的网络模式 –graphics 指定是否开启图形 –console 定义终端的属性,target_type 则是定义终端的类型 –extra-args 定义终端额外的参数 –vnclisten 定义vnc监听地址 –vncport 定义vnc监听端口 -
执行创建虚拟机后 进入如下界面
Starting installer, one moment... anaconda 21.48.22.56-1 for CentOS 7 started. * installation log files are stored in /tmp during the installation * shell is available on TTY2 * when reporting a bug add logs from /tmp as separate text/plain attachments 09:20:29 Not asking for VNC because we don't have a network ================================================================================ ================================================================================ Installation 1) [x] Language settings 2) [!] Timezone settings (English (United States)) (Timezone is not set.) 3) [!] Installation source 4) [!] Software selection (Processing...) (Processing...) 5) [!] Installation Destination 6) [x] Kdump (No disks selected) (Kdump is enabled) 7) [ ] Network configuration 8) [!] Root password (Not connected) (Password is not set.) 9) [!] User creation (No user will be created) Please make your choice from above ['q' to quit | 'b' to begin installation | 'r' to refresh]:
选项说明:
1 语言设置
2 时区设置
3 安装源
4 软件选择 5 选择硬盘
6 支持kdump
7 网络设置
8 设置root密码
9 创建用户修改好相关选项(
!
标记为需要修改)后,按b
进行自动安装,安装完成后按Ctrl + ]
切出到宿主机到此 虚拟机安装完成