CentOS 7 KVM 总结(一) 环境搭建

2018/03/19 kvm

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

  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核心。

1.2. KVM 主要特点

  1. 要求cpu 必须支持虚拟化。
  2. 性能:作为服务器很好,可是图形能力十分的差。即使放电影,图像也是像刷油漆一样,一层一层的。
  3. cpu使用率控制很好。
  4. 控制上比较简洁,功能比较丰富:比如使用“无敌功能”所有更改指向内存,你的镜像永远保持干净。“母镜像”功能让你拥有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. 环境检查

  1. 检查宿主机是否支持 虚拟化

     egrep 'vmx|svm' /proc/cpuinfo
    

    注:

    如果flags: 里有vmx 或者svm就说明支持VT;如果没有任何的输出,说明你的cpu不支持,将无法成功安装KVM虚拟机。

  2. 确保BIOS开启VT

     Intel(R) Virtualization Tech [Enabled]
    

    如有必要,还需在BIOS中开启VT-d

  3. 确保内核版本较新,支持KVM

    用uname -r查看内核版本,如果在2.6.20以下的linux版本,需升级内核。

    查看是否有kvm模块

     $ lsmod|grep kvm
     kvm_intel             183705  0 
     kvm                   615914  1 kvm_intel
    
  4. 关闭 防火墙、SELinux等

     $ systemctl stop firewalld
     $systemctl stop iptables
     $systemctl disable firewalld
     $ systemctl disable iptables
     $ getenforce 
     Disabled
    

2.2. 开始安装

2.2.1 配置网卡

  1. 安装bridge-utils工具

     yum -y install bridge-utils
    
  2. 增加桥接网卡

     $ 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需要软件

  1. 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
    
  2. 由于要用virt-manager图形化安装虚拟机,所以还需要安装X-window(这个在前面部署VNC环境里就已经安装了)

     yum groupinstall "X Window System"
    
  3. 安装中文字符,解决界面乱码问题

     yum install -y dejavu-lgc-sans-fonts 
     yum groupinstall -y "Fonts"
    
  4. 启用libvirt

     systemctl enable libvirtd
     systemctl start libvirtd
    

3. 安装虚拟机

  1. 建立目录

     $ mkdir /data/{iso,kvmdisk} -p
    
  2. 创建虚拟机

     $ 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"
    
  3. 命令解释:

    命令 说明
    –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监听端口
  4. 执行创建虚拟机后 进入如下界面

     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 + ]切出到宿主机

    到此 虚拟机安装完成

Search

    Table of Contents