初识KVM之1——虚拟化介绍及创建KVM虚拟机

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了初识KVM之1——虚拟化介绍及创建KVM虚拟机相关的知识,希望对你有一定的参考价值。

一、基础知识

  1. CPU的工作机制
    随着云计算的兴起,虚拟化作为云计算的组成部分也火了一把,但虚拟化并不是什么新技术,早在上世纪70年代虚拟化技术就已经出现。传统的CPU由4个环组成,分为:环0--环3,环0只与内核通信,执行特权指令,而环3工作在用户空间,环1、环2预留,每当用户空间发起特权请求时,会立即激活内核空间,此时用户与内核空间的切换称为软中断,用户空间的所有特权指令都必须通过系统调用的方式来完成
    技术分享图片
  2. 全虚拟化、半虚拟化和CPU辅助虚拟化
    虚拟化按照实现方式分为:全虚拟化、半虚拟化和CPU辅助的虚拟化,其特点如下:
    2.1 全虚拟化
    物理机的系统(以下简称OS)运行在环0,虚拟机系统(以下简称GuestOS)运行在环1,但它以为自己运行在环0,每当GuestOS要执行特权指令时由于内核拒绝与环0之外的CPU环交互,所以位于环0的OS需要捕获并翻译GuestOS的特权指令提交给内核,全虚拟化的代表产品为vmware workstation
    2.2 半虚拟化
    与全虚拟化GuestOS以为自己运行在环0不同,半虚拟化的GuestOS明确知道自己运行在环1,所以当它要运行特权指令时会将特权指令直接交由OS来进行处理,省掉了OS捕获的过程,但由于需要让GuestOS知道自己运行在环1,就需要修改内核,Windows系统由于是不开源的所以不支持半虚拟化,代表产品为KVM、Zen
    2.3 CPU辅助虚拟化
    Intel和AMD在硬件层面对CPU进行了对虚拟化的支持,相当于OS运行在环-1,GuestOS运行在环0,通过VMM(virtual machine manager)来对虚拟机进行管理,代表产品为vmware esxi

二、KVM、Zen及Docker的实现原理

  1. Docker介绍
    通过上文知道每一个虚拟机都有一个独立的GuestOS,这种方式的优点是保证了系统的隔离性,但每个虚拟机都需要有GuestOS,不仅产生了不必要的性能消耗,又因为所有GuestOS的特权指令都需要经过GuestOS用户空间-->GuestOS内核空间-->OS内核空间的2道转换,降低了效率,Docker就是给予上述基础产生的。
    Docker的实现是将用户空间隔离成一个个的容器,所有容器公用底层的内核空间而不再创建GuestOS,所以这种方式的响应速度不但快还降低了性能开销,缺点就是由于共用内核空间,如果一个容器内的程序损坏了内核则该宿主机上的其他Docker也会受牵连
  2. Zen介绍
    Zen是KVM出现前普遍被采用的一种虚拟化技术,但是由于其实现方式一直不被Linux的作者李纳斯接受,其实现方式实在原有的Linux系统上安装Zen后重启操作系统,安装的Zen相当于另一个内核,重启时以Zen的内核启动,原有的Linux内核成为了一个特权域(dm0),Zen上的每一个虚拟机称为一个domain,所有虚拟机的特权请求需要通过dm0来完成,Linux沦为小弟的实现方式李纳斯本人必然不会接受
    技术分享图片
  3. KVM介绍
    KVM也有domain的概念,不同于Zen喧兵夺主的方式,采用一种柔和的方式实现,它在Linux系统之上安装qemu后,原有的Linux系统就变成了可以实现虚拟化的系统,dm0则是原来root的用户空间,所有特权指令还是通过dm0来实现
    技术分享图片
    这种实现方式由于李纳斯本人的推广而兴起,但是qemu本身只能够实现CPU和内存的虚拟化,I/O的虚拟化则由libvirtd来实现,所以KVM本身只是虚拟化的加速器而非虚拟化本身
    技术分享图片

    三、实验说明

    本次实验系统版本为CentOS7.3,使用桥接的方式创建一台KVM虚拟机,关于桥接模式此处做一些说明:所谓桥接模式就是创建一个设备模拟原先物理网卡的IP地址,而原先物理机的网卡此时当成一个交换机,将其工作于混杂模式(接受所有Mac地址),将交换机与模拟出的网卡相关联
    技术分享图片

四、操作步骤

  1. 安装图形界面和字体
    [[email protected] ~]# yum install dejavu-sans-fonts.noarch
    [[email protected] ~]# yum groupinstall "X Window System"
    技术分享图片
  2. 确认CPU是否支持虚拟化
    [[email protected] ~]# grep vmx /proc/cpuinfo
    技术分享图片
  3. 安装并启动服务
    [[email protected] ~]# yum install libvirt virt-manager virt-viewer qemu-kvm
    [[email protected] ~]# systemctl start libvirtd.service
  4. 创建桥接模式(要先关闭NetworkManager)
    [[email protected] ~]# systemctl stop NetworkManager
    [[email protected] ~]# systemctl disable NetworkManager
    [[email protected] ~]# virsh iface-bridge ens32 br0 --no-stp
    技术分享图片
    [[email protected] network-scripts]# cat ifcfg-br0
    DEVICE="br0"
    ONBOOT="yes"
    TYPE="Bridge"
    BOOTPROTO="none"
    IPADDR="172.16.10.10"
    NETMASK="255.255.255.0"
    GATEWAY="172.16.10.1"
    STP="off"

    [[email protected] network-scripts]# cat ifcfg-ens32

    DEVICE=ens32
    ONBOOT=yes
    BRIDGE="br0"
  5. 启动图形界面创建虚拟机
    [[email protected] ~]# virt-manager
    如果虚拟机鼠标键盘无法使用需要将Display改为VNC并添加一个Input设备,至此,操作完成
    技术分享图片
    技术分享图片

以上是关于初识KVM之1——虚拟化介绍及创建KVM虚拟机的主要内容,如果未能解决你的问题,请参考以下文章

kvm介绍安装及创建虚拟机

KVM之文本模式创建虚拟机及使用VNC连接控制虚拟机(非console)

kvm安装及虚拟机创建

KVM之实现批量创建KVM虚拟机

KVM虚拟机的创建和常用功能及命令

跳过那些坑!太好用啦!虚拟化技术之kvm基础用法及排错