KVM虛擬平臺搭建使用

1、KVM虛擬化介紹

KVM 全稱 kernel-based virtual machine,由Qumranet公司發起,2008年被RedHat收購。
KVM實現主要基於Intel-V或者AMD-V提供的虛擬化平臺,利用普通的Linux進程運行於虛擬態的指令集,模擬虛擬機監視器和CPU。KVM不提供硬件虛擬化操做,其IO操做等都藉助QEMU來完成。node

image_1apkng413147jg181jlq1j3kjhsm.png-16.4kB

KVM有以下特色:python

  • guest做爲一個普通進程運行於宿主機
  • guest的CPU(vCPU)做爲進程的線程存在,並受到宿主機內核的調度
  • guest繼承了宿主機內核的一些屬性,好比huge pages(大頁表)
  • guest的磁盤IO和網絡IO會受到宿主機的設置的影響
  • guest經過宿主機上的虛擬網橋與外部相連

KVM總體架構

image_1apknjokv7q91f5cif312h6jpu13.png-122.4kB

每個虛擬機(guest)在Host上都被模擬爲一個QEMU進程,即emulation進程。
咱們建立一個虛擬機後,用普通的ps 命令就能夠查看到。linux

➜  ~ virsh list --all Id Name State ---------------------------------------------------- 1 kvm-01 running ➜ ~ ps aux | grep qemu libvirt+ 20308 15.1 7.5 5023928 595884 ? Sl 17:29 0:10 /usr/bin/qemu-system-x86_64 -name kvm-01 -S -machine pc-i440fx-wily,accel=kvm,usb=off -m 2048 -realtime mlock=off -smp 2 qemu ....

能夠看到,此虛擬機就是一個普通的Linux進程,他有本身的pid。而且有四個線程,線程數量不是固定的,可是至少會有三個(vCPU,IO,Signal)。其中有兩個是vCPU線程,有一個IO線程還有一個信號處理線程。ios

➜  ~ pstree -p 20308 qemu-system-x86(20308)-+-{qemu-system-x86}(20353) |-{qemu-system-x86}(20408) |-{qemu-system-x86}(20409) |-{qemu-system-x86}(20412) 

虛擬CPU

guest的全部用戶級別(user)的指令集,都會直接由宿主機線程執行,此線程會調用KVM的ioctl方式提供的接口加載guest的指令並在特殊的CPU模式下運行,不須要通過CPU指令集的軟件模擬轉換,大大的減小了虛擬化成本,這也是KVM優於其餘虛擬化方式的點之一。centos

KVM向外提供了一個虛擬設備/dev/kvm,經過ioctl(IO設備帶外管理接口)來對KVM進行操做,包括虛擬機的初始化,分配內存,指令加載等等。緩存

虛擬IO設備

guest做爲一個進程存在,固然他的內核的全部驅動等都存在,只是硬件被QEMU所模擬(後面介紹virtio的時候特殊)。guest的全部硬件操做都會有QEMU來接管,QEMU負責與真實的宿主機硬件打交道。服務器

虛擬內存

guest的內存在host上由emulator提供,對emulator來講,guest訪問的內存就是他的虛擬地址空間,guest上須要通過一次虛擬地址到物理地址的轉換,轉換到guest的物理地址其實也就是emulator的虛擬地址,emulator再次通過一次轉換,轉換爲host的物理地址。後面會有介紹各類虛擬化的優化手段,這裏只是作一個overview。網絡

2、KVM安裝

1.安裝centos7服務器架構

點擊完成,後開始安裝less

2.虛機開啓虛擬化引擎配置

3.開啓網卡ONBOOT,並重啓網卡

4.查看CPU是否支持虛擬化

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

5.安裝KVM

virtualization             #提供虛擬機的環境,主要包含qemu-kvm

virtualization-client      #管理和安裝虛擬機實例的客戶端,主要有python-virtinst,virt-manager,virt-viewer

virtualization-platform    #提供訪問和控制虛擬客戶端的接口,主要有libvirt,libvirt-client

virtualization-tools       #管理離線虛擬機鏡像的工具,主要有libguestfs

gnome-desktop         #安裝圖形管理界面

yum -y group install gnome-desktop virtualization-tools virtualization-platform virtualization-client virtualization      #yum安裝包組

6.KVM遠程管理

[root@localhost ~]# which virsh      #查看虛擬機管理命令
/usr/bin/virsh
[root@localhost ~]# virsh list --all    #查看全部虛擬機
 Id    名稱                         狀態
----------------------------------------------------

7.使用qemu-kvm管理虛擬機

參數簡介

CPU、Memory、SMP、NUMA

-cpu cpu     #select CPU (-cpu ? for list)
-smp n[,maxcpus=cpus][,cores=cores][,threads=threads][,sockets=sockets]
-m megs      #set vRAM size to megs MB [default=128]
-numa node[,mem=size][,cpus=cpu][,nodeid=node]

Storage Device

-drive option[,option[,option[,...]]]    #定義一個存儲設備
子選項介紹:
 id=name                         #定義硬盤設備名稱
 file=/path/to/somefile                #硬件映像文件路徑
 if=interface_type                  #指定硬盤設備所鏈接的接口類型(控制器類型), 如ide, scsi, virio等
 index=i                         #設定同一種控制器類型中不一樣設備的索引號
 media=disk|cdrom                   #定義介質類型爲硬盤(disk)仍是光盤(cdrom)
 snapshot=on|off                    #指定當前硬盤設備是否支持快照功能
 cache=writethrough|writeback|none|unsafe    #定義如何使用物理機緩存來訪問塊數據
 format=format                    #指定映像文件的格式, 具體格式可參見qemu-img命令

Display options  #顯示選項用於定義虛擬機啓動後的顯示接口相關類型及屬性等

-nographic                     #默認狀況下, qemu使用SDL來顯示VGA輸出; 而此選項用於禁止圖形接口, 此時, qemu相似一個簡單的命令行程序, 其仿真串口被將被重定向到控制檯
-curses                        #禁止圖形接口, 並使用curses/ncurses做爲交互接口
-alt-grab                      #使用Ctrl+Alt+shift組合鍵釋放鼠標
-ctrl-grab                     #使用右Ctrl鍵釋放鼠標
-sdl                          #啓用SDL
-spice option[,option[,...]]           #啓用spice遠程桌面協議, 具體請參照qemu-kvm幫助手冊
-vga [std|cirrus|vmware|qxl|xenfb|none]     #指定要仿真的VGA接口類型
-vnc display                  #默認狀況下, qemu使用SDL顯示VGA輸出; 使用該選項, 可讓qemu監聽在VNC上, 並將VGA輸出重定向至VNC會話; 使用此選項, 必須使用-k選項指定鍵盤佈局類型

Network options  #簡單介紹幾種,更多可參考官方手冊

NIC
-net nic[,vlan=n][,macaddr=mac][,model=type][,name=str][,addr=str][,vectors=v]
# 建立一個新的網卡設備並鏈接至vlan n中;
# pc架構上默認的nic爲e1000, macaddr用於爲其指定MAC地址
# 使用"qemu-kvm -net nic,model=?"來獲取當前平臺支持的類型
# name用於指定一個在監控時顯示的網卡設備名稱


TAP
-net tap[,vlan=n][,name=name][,fd=h][,ifname=name][,script=file][downscript=dfile]
#經過物理機的tap網絡接口鏈接至vlan n中, 
#使用script=file指定腳本(默認爲/etc/qemu-ifup)來配置當前網絡接口
#使用downscript=dfile指定腳本(默認爲/etc/qemu-ifdown)來撤銷接口配置
#使用script=no和downscript=no可分別用來禁止執行腳本


USER
-net user[,option][,option][,...]    #在用戶模式配置網絡棧, 其不依賴於管理權限
子選項介紹:
 vlan=n                   #鏈接之vlan n, 默認n=0
 name=str                  #指定接口的顯示名稱, 經常使用於監控模式中
 net=addr[/mask]               #設定GuestOS可見的IP網絡, 默認爲192.168.1.0/24
 host=addr                  #指定GuestOS中看到的Host的IP地址, 默認爲指定網絡中的第二個, 即x.x.x.x
 dhcpstart=addr              #指定DHCP服務器地址池中16個地址的起始IP, 默認爲第16個至第31個, 即x.x.x.x ~ x.x.x.x
 dns=addr                   #指定GuestOS可見的dns服務器地址, 默認爲GuestOS網絡中第三個地址, 即x.x.x.x

 

7.1 安裝qemu-kvm

yum -y install qemu-kvm

7.2 查看文件位置

rpm -ql qemu-kvm | grep qemu-kvm | head -2

7.3 建立軟鏈接到/usr/bin目錄下

ln -s /usr/libexec/qemu-kvm /usr/bin

 7.4 安裝centos6.10虛機

qemu-kvm -m 128 -smp 1 -name "test" -hda /kvm/images/CentOS-6.10.iso            #內存128M  CPU 1塊 

若此步報錯,應該是主機未開啓虛擬化,在bios中配置虛擬化便可

7.5 安裝VNC客戶端

yum -y install tigervnc

7.6 切換圖形管理界面鏈接VNC

startx &
#打開終端命令臺
vncviewer :5900

8.virt-install建立虛擬機並安裝

8.1 建立磁盤

qemu-img create -f qcow2 /kvm/images/CentOS-6.10.qcow2 5G   #建一個格式爲qcow2的磁盤

8.2 安裝系統

virt-install \
--name=centos6 \
--disk path=/kvm/images/CentOS-6.10.qcow2 \
--vcpus=1 --ram=1024 \
--cdrom=/kvm/images/CentOS-6.10.iso \
--network network=default \
--graphics vnc,listen=0.0.0.0 \
--os-type=linux \
--os-variant=rhel6

切換至圖形界面可看到以下圖

相關文章
相關標籤/搜索