創建及管理KVM工具之virsh

一、什么是虛擬化

虛擬化是一個廣義的術語,在計算機方面通常是指計算元件在虛擬的基礎上而不是真實的基礎上運行。虛擬化技術可以擴大硬件的容量,簡化軟件的重新配置過程。

二、虛擬化能做什么

CPU的虛擬化技術可以單CPU模擬多CPU并行,允許一個平臺同時運行多個操作系統,并且應用程序都可以在相互獨立的空間內運行而互不影響,從而顯著提高計算機的工作效率。

三、虛擬化分類

虛擬化可分為兩類,完全虛擬化(full virtualization)和半虛擬化(paravirtualization)。

完全虛擬化(full virtualization):完全虛擬化是一種虛擬化技術用于提供一種虛擬機環境,即一個完整的底層硬件仿真。完全虛擬化要求每個硬件的顯著特征被映射到每一個虛擬機上。在虛擬機(VM)和硬件之間之間增加一個軟件層–Hypervisor,實現虛擬機管理。工作與完全虛擬化的虛擬機不知道有hypervisor的存在。

半虛擬化(paravirtualization):半虛擬化是一種虛擬化技術,提出了一種虛擬機軟件界面相似,但不完全相同的底層硬件。宿主計算機操作系統需要支持para-API,并通過virtual machine monitor (VMM)管理。也就是讓虛擬機明確知道自己工作在虛擬環境中。

其中,hypervisor 可以劃分為兩大類。

類型 1,這種 hypervisor 是直接運行在物理硬件之上的,例如:vmware vsphere, kvm等。

類型 2,這種 hypervisor 運行在另一個操作系統(運行在物理硬件之上)中,例如:VMware workstation, xen(hvm)等。

除此之外,還有以下虛擬化分類:

用戶空間虛擬化(容器)擁有獨立的文件樹和進程樹于獨立的名字空間中,容器間可通信??纱虬鏷ttpd, tomcat

服務于一個文件中,利于快速部署。

docker是容器的一種易于快速部署的方式,kvm+docker是流行的部署方式。

docker的其他實現方式:lxc, openvz, solaris containers, FreeBSD jails

庫虛擬化:

WINE,Cywin

應用程序虛擬化:

jvm, pvm

四、KVM的相關術語

KVM (名稱來自英語: Kernel-basedVirtual Machine 的縮寫,即基于內核的虛擬機),是一種用于Linux內核中

的虛擬化基礎設施,可以將Linux內核轉化為一個hypervisor。KVM在2007年2月被導入Linux 2.6.20核心中,以

加載核心模塊的方式被移植到FreeBSD及illumos上。 

KVM必須在在具備硬件支持的Intel VT或AMD-V功能的平臺上運行。

KVM安裝后,宿主機(HOST)的kernel變為hypervisor。原有操作系統變為domain 0,提供控制臺和I/O管理。KVM虛擬機可直接通過原kernel的kvm模塊調用宿主機的cpu和

內存,I/O部分則需要先到domain0,再到宿主硬件設備。

運行模式如下:

內核模式:GuestOS執行I/O類操作;

用戶模式:代表GuestOS請求I/O類操作;

來賓模式:GuestOS的非I/O類操作;

kvm hypervisor:安裝過KVM的kernel;

兩類組件:
/dev/kvm:字符設備文件,
工作于hypervisor,主要用于創建VM、為VM分配內存、讀寫VCPU的寄存器、向VCPU注入中斷、運行VCPU等等;
qemu進程:工作于用戶空間,主要用于實現模擬PC機的IO設備;
QEMU主要提供以下功能:

五、安裝KVM
在正式安裝之前,我們先來看看這張kmv和各管理工具的關系圖。

kvm-libvert.jpg

QUME的主要功能:

   處理器模擬器

   仿真IO設備

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

   調試器

   與模擬器交互的用戶接口

qemu:kmv的文本管理工具,包括qemu-kvm、qemu-img

libvirt:是一套免費、開源的支持Linux下主流虛擬化工具的C函數庫,libvirtd是運行的守護進程的名稱。包括GUI: virt-manager, virt-viewer,CLI: virt-install, virsh

安裝步驟:

(1) 確保CPU支持HVM

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

(2) 裝載模塊

# modprobe kvm

# lsmod | grep kvm

(3)驗證

ls -l /dev/kvm

(4)安裝libvirt

yum install libvirt -y

(5)安裝其他管理組件

yum install -y virt-manager virt-viewer virt-install

# yum install -y qemu-kvm

(6)啟動libvirtd守護進程

systemctl start libvirtd

驗證:ifconfig多了virbr0虛擬網橋(只能是nat模式)

[root@localhost ~]# ifconfig

virbr0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500

        inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255

        ether 52:54:00:57:1a:76  txqueuelen 0  (Ethernet)

        RX packets 0  bytes 0 (0.0 B)

        RX errors 0  dropped 0  overruns 0  frame 0

        TX packets 0  bytes 0 (0.0 B)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

(7)啟動virt tui

# virt-manager

ps aux

root      14996 13.9  8.7 1197240 87980 ?       Ssl  23:41   0:01 /usr/bin/python2 /usr/share/virt-manager/virt-manager


使用virsh測試各命令及創建虛擬機

1. 獲取各命令幫助

virsh help KEYWORD

#virsh help list

2. 查看域,–all選項可查看關機的虛擬機域,域id每次開關機后可能不一樣

root@localhost ~]# virsh list –all

 Id    Name                           State

—————————————————-

 –     debian8                        shut off

3. 查看虛擬機配置文件

注意為xml格式,可以到處到某處查看或以此為模板創建其他虛擬機

虛擬機以域(domain)為單位創建

# virsh dumpxml debian8 > /tmp/mytemplate.xml

4. 創建域

create 

virsh create <file> [–console] [–paused] [–autodestroy] [–pass-fds <string>] [–validate]

    [–file] <string>  file containing an XML domain description

    –console        attach to console after creation

    –paused         leave the guest paused after creation

    –autodestroy    automatically destroy the guest when virsh disconnects

    –pass-fds <string>  pass file descriptors N,M,… to the guest

    –validate       validate the XML against the schema

5. 獲取域id

[root@localhost ~]# virsh domid debian8

3

6. 獲取域uuid

[root@localhost ~]# virsh domuuid debian8

9332c5a4-4abc-4e7f-bec0-faf394950a55

7. 獲取域信息

[root@localhost ~]# virsh dominfo debian8

Id:             3

Name:           debian8

UUID:           9332c5a4-4abc-4e7f-bec0-faf394950a55

OS Type:        hvm

State:          running

CPU(s):         2

CPU time:       428.6s

Max memory:     1047552 KiB

Used memory:    1047552 KiB

Persistent:     yes

Autostart:      disable

Managed save:   no

Security model: selinux

Security DOI:   0

Security label: system_u:system_r:svirt_t:s0:c327,c602 (enforcing)

8. 登錄虛擬機控制臺

[root@localhost ~]# virsh console debian8

Connected to domain debian8

Escape character is ^]

使用ctrl+],退出console

9. 開啟域

[root@localhost ~]# virsh start debian8

Domain debian8 started

10. 重啟域

reboot

11. 關閉域 

destory

shutdown

12. 刪除域

undefine

13. 暫停域并保存域狀態至某文件中

# virsh save debian8 /tmp/debian_save1 –running

–running 下次恢復,直接啟動

14. 從保存文件中恢復域

# virsh restore /tmp/debian_save1

管理域的命令:

15. 改變內存大小

不能超出預設值,只能調小,可以當前生效,也可以下次生效

# virsh setmem debian8 786m –current

[root@localhost ~]# virsh dominfo debian8

Id:             5

Name:           debian8

UUID:           9332c5a4-4abc-4e7f-bec0-faf394950a55

OS Type:        hvm

State:          running

CPU(s):         2

CPU time:       1471.5s

Max memory:     1047552 KiB

Used memory:    804864 KiB  #此處為改過的值

Persistent:     yes

Autostart:      disable

Managed save:   no

Security model: selinux

Security DOI:   0

Security label: system_u:system_r:svirt_t:s0:c470,c985 (enforcing)

[root@localhost ~]# free -mh

                     total        used        free      shared  buff/cache   available

Mem:           977M        741M         73M        4.2M        162M         64M

Swap:          1.9G        1.1G        827M

16. 設定內存最大內存

運行中的域不能修改最大內存值

[root@localhost ~]# virsh setmaxmem debian8 900m –config 

下次啟動有效

17. 設定vcpu數量

# virsh setvcpus debian8 1 –config

不能實時改,下次啟動有效

18. 獲取vcpu信息

[root@localhost ~]# virsh vcpuinfo debian8

VCPU:           0   #vcpu

CPU:            0    #在宿主機cpu位置

State:          running

CPU time:       675.5s

CPU Affinity:   yyyy

VCPU:           1

CPU:            1

State:          running

CPU time:       694.2s

CPU Affinity:   yyyy

19. 獲取域網絡接口信息

[root@localhost ~]# virsh domiflist debian8

Interface  Type       Source     Model       MAC

——————————————————-

vnet0      network    default    virtio      52:54:00:82:53:a2

20. 獲取域的接口統計信息

[root@localhost ~]# virsh domifstat debian8 vnet0

vnet0 rx_bytes 197810

vnet0 rx_packets 3755

vnet0 rx_errs 0

vnet0 rx_drop 0

vnet0 tx_bytes 13400

vnet0 tx_packets 111

vnet0 tx_errs 0

vnet0 tx_drop 0

21. 獲取域塊設備信息

[root@localhost ~]# virsh domblklist debian8

Target     Source

————————————————

vda        /var/lib/libvirt/images/debian8.qcow2

hda        –

22. 獲取域塊設備(存儲)統計信息

[root@localhost ~]# virsh domblkstat debian8

 rd_req 21908

 rd_bytes 670065746

 wr_req 1105

 wr_bytes 29772800

 flush_operations 229

 rd_total_times 97947369758

 wr_total_times 60546346501

 flush_total_times 1534616225

創建及管理磁盤:

23. 創建磁盤

[root@localhost ~]# qemu-img create -f qcow2 -o preallocation=metadata /tmp/test.qcow2 120G 稀疏格式

Formatting '/tmp/test.qcow2', fmt=qcow2 size=128849018880 encryption=off cluster_size=65536 preallocation='metadata' lazy_refcounts=off 

[root@localhost ~]# du -lh /tmp/test.qcow2 

19M /tmp/test.qcow2

[root@localhost ~]# ll -lh /tmp/test.qcow2 

-rw-r–r–. 1 root root 121G Jan 12 13:53 /tmp/test.qcow2

24. 增加磁盤大小

[root@localhost ~]# qemu-img resize /tmp/test.qcow2 150G

Image resized.

[root@localhost ~]# ll -h /tmp/test.qcow2 

-rw-r–r–. 1 root root 121G Jan 12 13:57 /tmp/test.qcow2

[root@localhost ~]# du -lh /tmp/test.qcow2 

19M /tmp/test.qcow2

25. 附加磁盤到域

# qemu-img create -f qcow2 -o preallocation=metadata /tmp/mytest.img 20G

[root@localhost ~]# virsh attach-disk debian8 /tmp/mytest.img vdb

Disk attached successfully

26. 拆除磁盤

[root@localhost ~]# virsh detach-disk debian8 vdb

Disk detached successfully

網卡管理

網橋查看命令

[root@localhost ~]# brctl show

bridge name bridge id                  STP enabled interfaces

br0 8000.000000000000          no

virbr0 8000.525400571a76  yes virbr0-nic

                        vnet0

27.添加域網卡到宿主機橋上

[root@localhost ~]# virsh attach-interface debian8 bridge virbr0 為宿主機nat網橋

Interface attached successfully

[root@localhost ~]# virsh domiflist debian8

Interface  Type       Source     Model       MAC

——————————————————-

vnet0      network    default    virtio      52:54:00:82:53:a2

vnet1      bridge     virbr0     rtl8139     52:54:00:ca:04:d3

vnet2      bridge     br0        rtl8139     52:54:00:89:3b:1d

28. 刪除域網卡

[root@localhost ~]# virsh detach-interface debian8 bridge –mac 52:54:00:89:3b:1d

Interface detached successfully


使用qemu命令手動創建虛擬機

qemu-kvm為創建工具

原創文章,作者:allen,如若轉載,請注明出處:http://www.www58058.com/66897

(4)
allenallen
上一篇 2017-01-19
下一篇 2017-01-20

相關推薦

  • 第十周-Centos啟動流程及Shell腳本編程

    一、CentOS啟動流程 POST –> Boot Sequence(BIOS) –> Boot Loader (MBR) –> Kernel(ramdisk) –> rootfs –> switchroot –> /sbin/init –…

    2017-10-14
  • 馬哥面授班20期-第一周(計算機基礎,linux入門)

    一.計算機發展歷史及硬件組成部分     計算機發展歷史:第一代:(1946-1957)電子管時代,第二代:(1958-1964)晶體管時代,              第三代:(1965-1970)集成電路時…

    Linux干貨 2016-07-26
  • 記錄Linux入門3天,每天的點點滴滴記錄

        Linux 文件系統的特性:      1、文件名嚴格區分字符大小寫      2、文件名可以使用除了 /  意外任意的字符,但不建議使用特殊字符      3、文件名長度不能超過255個字符     &nbsp…

    Linux干貨 2017-05-21
  • 虛擬化網絡之OpenvSwitch(一)

    一、OpenvSwitch介紹  OpenvSwitch簡稱OVS,正如其官網(http://openvswitch.org/)所述,OVS是一個高質量、多層的虛擬交換軟件,即虛擬交換機。它的目的是通過編程擴展支持大規模網絡自動化,同時還支持標準的管理接口和協議(例如:NetFlow,sFlow,IPFIX,RSPAN, CLI, LAC…

    Linux干貨 2016-03-27
  • 文本編輯器:vim 基礎篇

       VI:Visual Interface,是一種文本編輯器,還是全屏編輯器。   VIM:Vi IMproved,vi的增強版,vim是模式化的編輯。 VIM的三種模式:        編輯模式(命令模式,默認模式)       插入?!?/p>

    Linux干貨 2016-08-18
  • linux系統啟動流程及內核編譯

    Linux系統啟動流程 initialization [??n???la?'ze??n] 初始化 內核參數: /usr/share/doc/kernel-doc-VERSION/Documentation 系統初始化流程(內核級別): POST –> BootSequence(BIOS) –> BootLoade…

    Linux干貨 2016-09-19
欧美性久久久久