KVM虛擬化技術(一)

KVM虛擬化技術(一)node

===============================================================================python

概述:linux


===============================================================================shell

虛擬化技術基礎

1.介紹
centos

cpu虛擬化:api

模擬:emulationbash

虛擬:virtulization服務器

  • 徹底虛擬化(full-virtulization)網絡

       BT: 二進制翻譯 (軟件)架構

       HVM:硬件輔助的虛擬化 (硬件)

  • 半虛擬化(para-virtulization)

Memory虛擬化

image.png

I/O虛擬化

image.png

2.實現方式

兩種實現方式

Type-I:

  • hypervisor --> vm

  • xen, vmware ESX/ESXi

            xen:hypervisor, Dom0(實現I/O操做)

Type-II:

  • host(宿主機) --> vmm(虛擬機監控器) --> vm

  • kvm, vmware workstation, virtualbox

3.Inter硬件輔助的虛擬化

image.png


QEMU,virtio

1.虛擬化技術的分類

模擬

  • 著名的模擬器,PearPC, Bochs, QEMU

徹底虛擬化:也稱爲native virtulization

兩種加速方式:

  • BT

  • HVM

應用的技術:

  • VMware Workstation, VMware Server, Parallels Desktop, KVM, Xen(HVM)

半虛擬化:para-virtualization

  • 解決方案:xen, uml(user-mode linux)

OS級別的虛擬化:

將用戶空間分隔爲多個,彼此間互相隔離;

容器級虛擬化

  • OpenVZ, lxc

  • Solaris Containers     

  • FreeBSD jails

庫虛擬化:

  • wine

應用程序虛擬化:

  • jvm

2.虛擬化網絡

虛擬化網絡:

  • nat mode:NAT模型

  • bridge mode:橋接模型

  • routed mode:路由模型

  • isolation mode:隔離模型

TUN與TAP

在計算機網絡中,TUN與TAP是操做系統內核中的虛擬網絡設備。不一樣於普通靠硬件網路板卡實現的設備,這些虛擬的網絡設備所有用軟件實現,並向運行於操做系統上的軟件提供與硬件的網絡設備徹底相同的功能。

  • TAP等同於一個以太網設備,它操做第二層數據包如以太網數據幀。TUN模擬了網絡層設備,操做第三層數據包好比IP數據封包。

  • 操做系統經過TUN/TAP設備向綁定該設備的用戶空間的程序發送數據,反之,用戶空間的程序也能夠像操做硬件網絡設備那樣,經過TUN/TAP設備發送數據。在後種狀況下,TUN/TAP設備向操做系統的網絡棧投遞(或「注入」)數據包,從而模擬從外部接受數據的過程。

KVM

1.介紹

KVM: Kernel-based Virtual Machine, Qumranet公司

依賴於HVM(要求cpu必須支持硬件虛擬化)

  • Intel:VT-x(表現爲vmx)

  • ADM: ADM-V (表現爲svm)

內核模塊(總體表現爲一個內核模塊):

  • kvm:核心模塊

  • kvm-intel(專用於intel的模塊);kvm-amd(專用於amd的模塊)

KVM模塊載入後的系統的運行模式:

  • 內核模式:GuestOS(虛擬機操做系統)執行I/O類操做,或其它的特殊指令的操做;稱做「來賓-內核」模式;

  • 用戶模式:表明GuestOS請求I/O類操做;

  • 來賓模式:GuestOS的非I/O類操做;事實上,它被稱做「來賓-用戶」模式;

  • kvm hypervisor:host上的內核

2.kvm組件

兩類組件

/dev/kvm:

  • 工做於hypervisor,在用戶空間可經過ioctl()系統調用來完成VM建立、啓動等管理功能;它是一個字符設備

  • 功能:建立VM、爲VM分配內存、讀寫VCPU的寄存器、向VCPU注入中斷、運行VCPU等等;

qemu進程:

  • 工做於用戶空間,主要用於實現模擬PC機的IO設備;

3.kvm特性

特性

內存管理:

  • 將分配給VM的內存交換至SWAP;

  • 支持使用Huge Page(大內存頁); 

  • 支持使用Intel EPT或AMD RVI技術完成內存地址映射;(GVA-->GPA-->HPA 過渡到 GVA->HPA)

  • 支持KSM (Kernel Same-page Merging) 內核相同頁面合併技術

硬件支持:

  • 取決於Linux內核;

存儲:

  • 本地存儲

  • 網絡附加存儲:

  • 存儲區域網絡:

  • 分佈式存儲:例如GlustFS

實時遷移:

支持的GuestOS(x86系統的服務器):

  • Linux, Windows, OpenBSD, FreeBSD, OpenSolaris;

設備驅動:

  • IO設備的徹底虛擬化:模擬硬件

  • IO設備的半虛擬化:在GuestOS中安裝驅動;virtio

          virtio-blk, virtio-net, virtio-pci, virtio-console, virtio-ballon

4.kvm侷限性

通常侷限性

  • CPU overcommit

  • 時間記錄難以精確,依賴於時間同步機制

MAC地址:

  • VM量特別大時,存在衝突的可能性;

  • 實時遷移:

  • 性能侷限性:

5.kvm工具棧

qemu:

  • qemu-kvm:主要做用是實現進程管理

  • qemu-img:用來管理磁盤映像文件

libvirt(cs架構)

kvm hypervisor:

  • 運行libvirtd守護進程

客戶端工具管理接口

  • GUI:virt-manager, virt-viewer

  • CLI:virt-install, virsh

QEMU主要提供瞭如下幾個部分:

  • 處理器模擬器

  • 仿真IO設備

  • 關聯模擬的設備至真實設備;

  • 調試器

  • 與模擬器交互的用戶接口

KVM安裝及使用

1.安裝前提

(1)確保CPU支持HVM

  • # grep -E --color=auto "(vmx|svm)" /proc/cpuinfo

(2)查看內核編譯是否提供了kvm模塊

  • # modinfo kvm

(3)裝載模塊

  • # modprobe kvm

  • # modprobe kvm-intel

(4)驗正:

  • /dev/kvm 或者 lsmod |grep kvm

演示:

[root@centos7 ~]# grep -E --color=auto "(vmx|svm)" /proc/cpuinfo
flags		: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts mmx fxsr sse sse2 ss syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts nopl xtopology tsc_reliable nonstop_tsc aperfmperf pni pclmulqdq vmx ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer xsave avx hypervisor lahf_lm arat epb pln pts dtherm tpr_shadow vnmi ept vpid tsc_adjust
flags		: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts mmx fxsr sse sse2 ss syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts nopl xtopology tsc_reliable nonstop_tsc aperfmperf pni pclmulqdq vmx ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer xsave avx hypervisor lahf_lm arat epb pln pts dtherm tpr_shadow vnmi ept vpid tsc_adjust
flags		: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts mmx fxsr sse sse2 ss syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts nopl xtopology tsc_reliable nonstop_tsc aperfmperf pni pclmulqdq vmx ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer xsave avx hypervisor lahf_lm arat epb pln pts dtherm tpr_shadow vnmi ept vpid tsc_adjust

[root@centos7 ~]# modinfo kvm
filename:       /lib/modules/3.18.41-1.0-Taolinux/kernel/arch/x86/kvm/kvm.ko
license:        GPL
author:         Qumranet
srcversion:     2C2D9EC3889CB033C504EAE
depends:        
intree:         Y
vermagic:       3.18.41-1.0-Taolinux SMP mod_unload modversions 
signer:         Magrathea: Glacier signing key
sig_key:        13:F4:F1:CE:0F:1F:64:52:F0:D6:39:73:5A:ED:94:84:A4:DB:4B:20
sig_hashalgo:   sha256
parm:           ignore_msrs:bool
parm:           min_timer_period_us:uint
parm:           tsc_tolerance_ppm:uint
[root@centos7 ~]# 
[root@centos7 ~]# modprobe kvm
[root@centos7 ~]# lsmod |grep kvm
kvm_intel             148404  0 
kvm                   466442  1 kvm_intel

[root@centos7 ~]# ll /dev |grep kvm
crw------- 1 root root     10, 232 Mar 21 21:53 kvm


2.爲KVM虛擬機配置橋接網絡

方法一:

  • 直接在/etc/sysconfig/network-scripts 目錄中建立橋接接口 ifcfg-br0

方法二:

  • 經過 virsh iface-bridge  命令建立橋接接口

virsh:

image.png


注意:

建立物理橋須要關閉NetworkManager服務,使用network服務來管理網絡;

  • systemctl stop NatworkManager

  • systemctl disable NatworkManager

演示一:

1.編輯/etc/sysconfig/network-scripts 建立ifcfg-br0,而後修改相關配置以下:

[root@centos7 network-scripts]# cp ifcfg-eno16777736 ifcfg-br0

#修改原來的網卡 eno16777736 做爲交換機使用
# Generated by parse-kickstart
IPV6INIT=yes
IPV6_AUTOCONF=yes
BOOTPROTO=none
DEVICE=eno16777736
ONBOOT=yes
UUID=71d191d3-7396-4336-879d-a5c3deab705f
TYPE=Ethernet
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
NAME="System eno16777736"
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
BRIDGE=br0  # 添加項

# 修改ifcfg-br0做爲網卡使用
# Generated by parse-kickstart
IPV6INIT=yes
IPV6_AUTOCONF=yes
BOOTPROTO=none
DEVICE=br0   # 設備爲br0
ONBOOT=yes
TYPE=Bridge  # 網卡類型爲 Bridge
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
DNS1=192.168.1.1
DNS2=114.114.114.114
IPADDR=192.168.1.112
PREFIX=24
GATEWAY=192.168.1.1
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes

2.重啓網絡,ifconfig查看以下

[root@centos7 ~]# ifconfig
br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.112  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 fe80::20c:29ff:fe21:c943  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:21:c9:43  txqueuelen 0  (Ethernet)
        RX packets 31  bytes 3591 (3.5 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 39  bytes 6221 (6.0 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        ether 00:0c:29:21:c9:43  txqueuelen 1000  (Ethernet)
        RX packets 1816  bytes 143756 (140.3 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 799  bytes 109966 (107.3 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

演示2:使用virsh 配置網絡

[root@centos7 network-scripts]# virsh iface-list   # 查看當前網卡
 Name                 State      MAC Address
---------------------------------------------------
 eno16777736          active     00:0c:29:21:c9:43
 lo                   active     00:00:00:00:00:00

[root@centos7 network-scripts]# virsh iface-bridge eno16777736 br0 #建立物理橋eno16777736爲br0
Created bridge br0 with attached device eno16777736

[root@centos7 ~]# ifconfig
br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.112  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 fe80::20c:29ff:fe21:c943  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:21:c9:43  txqueuelen 0  (Ethernet)
        RX packets 66  bytes 7319 (7.1 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 66  bytes 11370 (11.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::20c:29ff:fe21:c943  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:21:c9:43  txqueuelen 1000  (Ethernet)
        RX packets 3954  bytes 335609 (327.7 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 2648  bytes 417462 (407.6 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        
[root@centos7 ~]# virsh iface-list
 Name                 State      MAC Address
---------------------------------------------------
 br0                  active     00:0c:29:21:c9:43
 lo                   active     00:00:00:00:00:00


3.管理工具棧

# yum grouplist | grep -i "virtualization"

Virtualization:

  • qemu-kvm

Virtualization Client:

  • python-virtinst, virt-manager, virt-viewer

Virtualization Platform:

  • libvirt, libvirt-client

Virtualization Tools

  • libguestfs

libvirt工具棧

libvirt

  • 支持的虛擬化技術:KVM, XEN, VMWARE, Qemu,LXC, OpenVZ; 

libvirt中的術語:

  • node: 指物理節點

  • hypervisor:支持虛擬機的運行環境

  • domain: 虛擬機

        dom0:特權域

        domU:非特權域

以下圖:

timg (1).jpgtimg.jpg

安裝並啓動 libvirtd.service

  • # yum install libvirt libvirt-client python-virtinst virt-manager

  • centos 7: # yum install libvirt libvirt-client virt-install virt-manager virt-viewer

啓動守護進程:

  • ~]# systemctl start libvirtd.service

libvirt和libvirtd的配置文件:

  • libvirt配置文件:/etc/libvirt/libvirt.conf

  • 守護進程配置文件:/etc/libvirt/libvirtd.conf

Hypervisor的訪問路徑:

本地URL:

  • driver[+transport]:///[path][?extral-param]

       driver: 驅動名稱,例如 qemu, xen, lxc

       transport:傳輸方式

  • kvm使用qemu驅動,使用格式qemu:///system, 例如qemu:///system

遠程URL:

  • driver[+transport]://[user@][host][:port]/[path][?extral-param]

例如:

  • qemu://172.16.100.6/system

  • qemu+ssh://root@172.16.100.6/system

  • qemu+tcp://172.16.100.6/system

演示:virt-manager建立虛擬機

1.安裝及啓動守護進程 libvirtd.service

#安裝
[root@centos7 ~]# yum install libvirt libvirt-client virt-install virt-manager virt-viewer

#啓動守護進程libvirtd.service
[root@centos7 ~]# systemctl start libvirtd.service

2.執行 virt-manager啓動圖形化管理界面,此操做能夠經過vnc或者xhell的xmanager實現,以下:

image.png

安裝qemu-kvm(yum install qemu-kvm -y)並重啓libvirtd.service(systemctl restart libvirtd.service)服務,再次執行virt-manager能夠看到以下界面:

image.png

3.這裏選擇使用本地鏡像安裝

image.png

4.設置虛擬機的內存和cpu的核心數,這裏要注意內存要大於等於1024M,若是小於的話在安裝的時候會提示錯誤。

image.pngimage.png

5.設定磁盤大小

image.png

6.選擇安裝前自定義,而且選擇物理橋br0

image.png

7.確認是否連接到本地鏡像

image.png

選擇Display 爲VNC ,不然的話進入安裝界面鼠標和鍵盤都不能用(這裏針對xshell跳轉的xmanager說明),若是是使用的vnc遠程桌面,能夠不設置

image.png

選擇我 Device model 爲virtio

image.png

選擇引導分區爲CDROM

image.png

8.點擊 Begin Installation開始安裝,以下:image.png


如上,就是經過virt-manager圖形化工具安裝KVM虛擬機的整個過程!

相關文章
相關標籤/搜索