1. 程式人生 > >初識KVM之1——虛擬化介紹及創建KVM虛擬機

初識KVM之1——虛擬化介紹及創建KVM虛擬機

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. 安裝圖形界面和字體
    [root@node1 ~]# yum install dejavu-sans-fonts.noarch
    [root@node1 ~]# yum groupinstall "X Window System"
    技術分享圖片
  2. 確認CPU是否支持虛擬化
    [root@node1 ~]# grep vmx /proc/cpuinfo
    技術分享圖片
  3. 安裝並啟動服務
    [root@node1 ~]# yum install libvirt virt-manager virt-viewer qemu-kvm
    [root@node1 ~]# systemctl start libvirtd.service
  4. 創建橋接模式(要先關閉NetworkManager)
    [root@node1 ~]# systemctl stop NetworkManager
    [root@node1 ~]# systemctl disable NetworkManager
    [root@node1 ~]# virsh iface-bridge ens32 br0 --no-stp
    技術分享圖片
    [root@node1 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"

    [root@node1 network-scripts]# cat ifcfg-ens32

    DEVICE=ens32
    ONBOOT=yes
    BRIDGE="br0"
  5. 啟動圖形界面創建虛擬機
    [root@node1 ~]# virt-manager
    如果虛擬機鼠標鍵盤無法使用需要將Display改為VNC並添加一個Input設備,至此,操作完成
    技術分享圖片
    技術分享圖片

初識KVM之1——虛擬化介紹及創建KVM虛擬機