KVM — 使用 qemu-kvm 原生工具棧實現創建管理虛擬機實例

KVM — 使用 qemu-kvm 原生工具棧實現創建管理虛擬機實例

爲了更好的理解虛擬機實例的創建和初始化過程,我們在此處使用提供了 CLI 接口的 qemu-kvm 工具來演示虛擬機實例管理的詳細過程。

應用準備

啓用硬件虛擬化支持功能,對於不同宿主機,啓用方式略有不同

如果虛擬機的宿主機爲Windows,假如使用VMware中的虛擬機作爲宿主機,需要在VMware選項中的”處理器”選項中啓用”虛擬化 Intel VT-x/EPT 或 AMD-V/RVI(V) ” 選項。

如果虛擬機的宿主機爲Linux,需要在BIOS處啓動 Intel VT-x/EPT 或 AMD-V/RVI(V) 虛擬化技術

驗證系統已經支持KVM並加載該模塊,使宿主機成爲hyperViso

  • 搜索cpu信息中是否有以下字段
grep -E -i "(svm|vmx|lm)" /proc/cpuinfo
  • 查看kvm模塊信息
modinfo kvm
  • 加載kvm模塊並查看結果
modprobe kvm

lsmod | grep kvm
kvm_intel             170181  0 
kvm                   554609  1 kvm_intel
irqbypass              13503  1 kvm
  • 查看kvm字符設備是否存在
ls -l /dev/kvm
crw-------. 1 root root 10, 232 Jul 27 03:58 /dev/kvm

qemu-kvm 程序包

  • 安裝程序包
yum install -y qemu-kvm
  • 爲了方便使用 qemu-kvm 命令,執行以下命令
rpm -ql qemu-kvm
/usr/libexec/qemu-kvm

ln -sv /usr/libexec/qemu-kvm /usr/bin/qemu-kvm
‘/usr/bin/qemu-kvm-> ‘/usr/libexec/qemu-kvm’

ll /usr/bin/qemu-kvm
lrwxrwxrwx. 1 root root 21 Jul 27 21:19 /usr/bin/qemu-kvm -> /usr/libexec/qemu-kvm

qemu-kvm 命令詳解

  • qemu-kvm 命令語法
qemu-kvm [options] [disk_image]
  • qemu-kvm選項有很多類別:

標準選項、塊設備相關選項、顯示選項、網絡選項、…

標準選項:

-machine [type=]name:-machine help來獲取列表,用於指定模擬的主機類型
-cpu cpu:-cpu help來獲取列表;用於指定要模擬的CPU型號
-smp n[,maxcpus=cpus][,cores=cores][,threads=threads][,sockets=sockets]:指明虛擬機上vcpu的數量及拓撲
-boot [order=drives][,once=drives][,menu=on|off] [,splash=sp_name][,splash-time=sp_time][,reboot-timeout=rb_time][,strict=on|off]
    order:各設備的引導次序:c表示第一塊硬盤,d表示第一個光驅設備;-boot order=dc,once=d
-m megs:虛擬機的內存大小
-name NAME:當前虛擬機的名稱,要惟一

塊設備相關的選項:

-hda/-hdb file:指明IDE總線類型的磁盤映射文件路徑;第0和第1個
-hdc/-hdd file:第2和第3個

-cdrom file:指定要使用光盤映像文件;

-drive [file=file][,if=type][,media=d][,index=i] [,cache=writethrough|writeback|none|directsync|unsafe][,format=f]:
    file=/PATH/TO/SOME_IMAGE_FILE:映像文件路徑
    if=TYPE:塊設備總線類型,ide, scsi, sd, floppy, virtio,...
    media=TYPE:介質類型,cdrom和disk
    index=i:設定同一類型設備多個設備的編號
    cache=writethrough|writeback|none|directsync|unsafe:緩存方式
    format=f:磁盤映像文件的格式

顯示選項:

-display type:顯示的類型,sdl, curses, none和vnc
-nographic:不使用圖形接口
-vga [std|cirrus|vmware|qxl|xenfb|none]:模擬出的顯卡的型號
-vnc display[,option[,option[,...]]]]:啓動一個vnc server來顯示虛擬機接口; 讓qemu進程監聽一個vnc接口
    display:
        (1) HOST:N
            在HOST主機的第N個桌面號輸出vnc
            5900+N
        (2) unix:/PATH/TO/SOCK_FILE
        (3) none

    options:
        password:連接此服務所需要的密碼

-monitor stdio:在標準輸出上顯示monitor界面
    Ctrl-a, c:在console和monitor之間切換
    Ctrl-a, h

網絡選項:

-net nic[,vlan=n][,macaddr=mac][,model=type][,name=str][,addr=str][,vectors=v]
    爲虛擬機創建一個網絡接口,並將其添加至指定的VLAN
model=type:指明模擬出的網卡的型號,ne2k_pci,i82551,i82557b,i82559er,rtl8139,e1000,pcnet,virtio;
    -net nic,model=?
macaddr=mac:指明mac地址;52:54:00:XX:XX:XX

-net tap[,vlan=n][,name=str][,fd=h][,fds=x:y:...:z][,ifname=name][,script=file][,downscript=dfile]:
    通過物理的TAP網絡接口連接至vlan n
    script=file:啓動虛擬機時要執行的腳本,默認爲/etc/qemu-ifup
    downscript=dfile:關閉虛擬機時要執行的腳本,/etc/qemu-ifdown
    ifname=NAME:自定義接口名稱

其它選項:
    -daemonize:以守護進程運行

腳本示例 :

/etc/qemu-ifup

#!/bin/bash
#

bridge=br0

if [ -n "$1" ];then
    p link set $1 up
    sleep 1
    brctl addif $bridge $1
    [ $? -eq 0 ] && exit 0 || exit 1
else
    echo "Error: no interface specified."
    exit 1
fi

使用 qemu-kvm 創建管理虛擬機實例的實驗具體步驟

  • 爲虛擬戶實例創建 .img 磁盤映像文件
qemu-img create -f qcow2 -o preallocation=metadata,size=80G /vms/centos/cts1.img
#顯示結果爲
Formatting '/vms/centos/cts1.img', fmt=qcow2 size=85899345920 encryption=off cluster_size=65536 preallocation='metadata' lazy_refcounts=off

查看創建的映像文件信息,實際佔據空間僅有16M

ls -lh /vms/centos/cts1.img 
-rw-r--r--. 1 root root 81G Jul 27 21:51 /vms/centos/cts1.img

du -sh /vms/centos/cts1.img 
16M /vms/centos/cts1.img
  • 使用 qemu-img 命令查看 .img 磁盤映像文件的信息
qemu-img info /vms/centos/cts1.img 
image: /vms/centos/cts1.img
file format: qcow2
virtual size: 80G (85899345920 bytes)
disk size: 15M
cluster_size: 65536
Format specific information:
    compat: 1.1
    lazy refcounts: false

 爲虛擬機安裝操作系統

準備一個操作系統,爲新創建的虛擬機安裝操作系統

#從虛擬光驅引導,安裝準備好的操作系統
qemu-kvm -name cts7 -m 512 -cpu host -smp 2,cores=2,sockets=1 -drive file=/vms/centos/cts1.img,if=virtio,media=disk,cache=writeback,format=qcow2 -drive file=/vms/ISOs/CentOS-7-x86_64-Minimal-1511.iso,media=cdrom -boot order=d -vnc :0

#查看端口
ss -tnlp | grep qemu-kvm
LISTEN     0      1     *:5900      *:*      users:(("qemu-kvm",pid=9026,fd=13))

注:如果 -vnc 後的選項是 “:1” ,則監聽5901端口

測試使用vnc遠程連接至創建的虛擬機實例

使用另一臺主機連接至虛擬機,該主機需要有vnc程序,並支持圖形界面

  • 安裝vnc程序並連接至創建的虛擬機實例
yum install -y vnc
vncviewer :0        #或者 vncviewer 172.16.50.18:5901

運行虛擬機的操作系統

#從磁盤引導操作系統
qemu-kvm -name cts7 -m 512 -cpu host -smp 2,cores=2,sockets=1 -drive file=/vms/centos/cts1.img,if=virtio,media=disk,cache=writeback,format=qcow2 -drive file=/vms/ISOs/CentOS-7-x86_64-Minimal-1511.iso,media=cdrom -boot order=-vnc :0

至此,虛擬機實例可以正常使用。

發佈了56 篇原創文章 · 獲贊 33 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章