KVM使用介紹

1.1 前言

1.1.1 什麼是虛擬化?

在計算機技術中,虛擬化(技術)或虛擬技術(英語:Virtualization)是一種資源管理技術,是將計算機的各類實體資源(CPU、內存、磁盤空間、網絡適配器等),予以抽象、轉換後呈現出來並可供分區、組合爲一個或多個電腦配置環境。html

 

 

圖 - 虛擬化示意圖linux

由此,打破實體結構間的不可切割的障礙,使用戶能夠比本來的配置更好的方式來應用這些電腦硬件資源。這些資源的新虛擬部分是不受現有資源的架設方式,地域或物理配置所限制。ubuntu

通常所指的虛擬化資源包括計算能力和數據存儲。windows

因爲目前信息技術領域的不少企業都曾在宣傳中將該企業的某種技術稱爲虛擬化技術,這些技術涵蓋的範圍能夠從Java虛擬機技術到系統管理軟件,這就使得準確的界定虛擬技術變得困難。所以各類相關學術論文在談到虛擬技術時經常提到的即是如前面所提到的那個不嚴格的定義。centos

1.1.2 爲何要用虛擬化

  🏆同一臺物理機運行多個不一樣版本應用軟件瀏覽器

  🏆硬件依賴性較低和便於數據遷移安全

 

 

圖 - 虛擬化先後對比bash

   詳情參考<1.1.3 虛擬化技術的優點>。服務器

1.1.3 虛擬化技術的優點

  1.下降運營成本網絡

  服務器虛擬化下降了IT基礎設施的運營成本,令系統管理員擺脫了繁重的物理服務器、OS、中間件及兼容性的管理工做,減小人工干預頻率,使管理更增強大、便捷。

  2.提升應用兼容性

  服務器虛擬化提供的封裝性和隔離性使大量應用獨立運行於各類環境中,管理人員不需頻繁根據底層環境調整應用,只需構建一個應用版本並將其發佈到虛擬化後的不一樣類型平臺上便可。

  3.加速應用部署

  採用服務器虛擬化技術只需輸入激活配置參數、拷貝虛擬機、啓動虛擬機、激活虛擬機便可完成部署,大大縮短了部署時間,免除人工干預,下降了部署成本。

  4.提升服務可用性

  用戶能夠方便地備份虛擬機,在進行虛擬機動態遷移後,能夠方便的恢復備份,或者在其餘物理機上運行備份,大大提升了服務的可用性。

  5.提高資源利用率

  經過服務器虛擬化的整合,提升了CPU、內存、存儲、網絡等設備的利用率,同時保證原有服務的可用性,使其安全性及性能不受影響。

  6.動態調度資源

  在服務器虛擬化技術中,數據中心從傳統的單一服務器變成了統一的資源池,用戶能夠即時地調整虛擬機資源,同時數據中心管理程序和數據中心管理員能夠靈活根據虛擬機內部資源使用狀況靈活分配調整給虛擬機的資源。

  7.下降能源消耗

  經過減小運行的物理服務器數量,減小CPU之外各單元的耗電量,達到節能減排的目的。

1.1.4 KVM簡介

 

 

  KVM,基於內核的虛擬機(英語:Kernel-based Virtual Machine,縮寫爲 KVM),是一種用於Linux內核中的虛擬化基礎設施,能夠將Linux內核轉化爲一個hypervisor。KVM在2007年2月被導入Linux 2.6.20核心中,以可加載核心模塊的方式被移植到FreeBSD及illumos上。

  KVM在具有Intel VT或AMD-V功能的x86平臺上運行。它也被移植到S/390,PowerPC與IA-64平臺上。在Linux內核3.9版中,加入ARM架構的支持。

  KVM目前由Red Hat等廠商開發,對CentOS/Fedora/RHEL等Red Hat系發行版支持極佳。

1.1.5 關於KVM

  1. KVM是開源軟件,全稱是kernel-based virtual machine(基於內核的虛擬機)。
  2. 是x86架構且硬件支持虛擬化技術(如 intel VT 或 AMD-V)的Linux全虛擬化解決方案。
  3. 它包含一個爲處理器提供底層虛擬化 可加載的核心模塊kvm.ko(kvm-intel.ko或kvm-AMD.ko)。
  4. KVM還須要一個通過修改的QEMU軟件(qemu-kvm),做爲虛擬機上層控制和界面。
  5. KVM能在不改變linux或windows鏡像的狀況下同時運行多個虛擬機,(它的意思是多個虛擬機使用同一鏡像)併爲每個虛擬機配置個性化硬件環境(網卡、磁盤、圖形適配器……)同時KVM還可以使用ksm技術幫助宿主服務器節約內存。
  6. 在主流的Linux內核,如2.6.20以上的內核均已包含了KVM核心。

1.1.6 關於Virtual Machine Manager

  在電腦運算中,紅帽公司的Virtual Machine Manager是一個虛擬機管理員,可讓用戶管理多個虛擬機。

  基於內核的虛擬機libvirt與Virtual Machine Manager。 

Virtual Machine Manager可讓用戶

  🎃 建立、編輯、引導或中止虛擬機。

  🎃 查看並控制每一個虛擬機的控制檯。

  🎃 查看每部虛擬機的性能以及使用率。

  🎃 查看每部正在運行中的虛擬機以及主控端的即時性能及使用率信息。

  🎃 不管是在本機或遠程,皆可以使用KVM、Xen、QEMU。

 

 

圖 -  libvirt服務

1.1.7 其餘虛擬化軟件

🍪 Xen

  Xen是一個開放源代碼虛擬機監視器,由XenProject開發。它打算在單個計算機上運行多達128個有徹底功能的操做系統。

  在舊(無虛擬硬件)的處理器上執行Xen,操做系統必須進行顯式地修改(「移植」)以在Xen上運行(可是提供對用戶應用的兼容性)。這使得Xen無需特殊硬件支持,就能達到高性能的虛擬化。

🍪 QEMU

  QEMU是一套由Fabrice Bellard所編寫的模擬處理器的自由軟件。它與Bochs,PearPC近似,但其具備某些後二者所不具有的特性,如高速度及跨平臺的特性。經由KVM(早期爲kqemu加速器,如今kqemu已被KVM取代)這個開源的加速器,QEMU能模擬至接近真實電腦的速度。QEMU有兩種主要運做模式:

  User mode模擬模式,亦便是用戶模式。

  QEMU能引導那些爲不一樣中央處理器編譯的Linux程序。而Wine及Dosemu是其主要目標。

  System mode模擬模式,亦便是系統模式。

  QEMU能模擬整個電腦系統,包括中央處理器及其餘周邊設備。它使得爲系統源代碼進行測試及除錯工做變得容易。其亦能用來在一部主機上模擬數部不一樣虛擬電腦。

1.2 KVM部署與使用

系統環境說明

[root@kvm ~]# cat /etc/redhat-release 
CentOS Linux release 7.4.1708 (Core) 
[root@kvm ~]# uname -r
3.10.0-693.el7.x86_64
[root@kvm ~]# sestatus 
SELinux status:                 disabled
[root@kvm ~]# systemctl status firewalld.service 
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
   Active: inactive (dead)
     Docs: man:firewalld(1)
[root@kvm ~]# hostname -I
172.16.1.240 10.0.0.240
# kvm主機內存不能低於4GB

1.2.1 安裝KVM虛擬化軟件

安裝依賴包(可使用本地yum源)

yum install libvirt* virt-* qemu-kvm* -y

安裝軟件說明內容:

libvirt    # 虛擬機管理
virt       # 虛擬機安裝克隆
qemu-kvm   # 管理虛擬機磁盤

啓動服務

[root@kvm ~]# systemctl start libvirtd.service
[root@kvm ~]# systemctl status libvirtd.servic

安裝VNC軟件:

  下載vnc軟件方法,tightvnc官網:http://www.tightvnc.com

  VNC軟件,用於VNC(Virtual Network Computing),爲一種使用RFB協議的顯示屏畫面分享及遠程操做軟件。此軟件藉由網絡,可發送鍵盤與鼠標的動做及即時的顯示屏畫面。

  VNC與操做系統無關,所以可跨平臺使用,例如可用Windows鏈接到某Linux的電腦,反之亦同。甚至在沒有安裝客戶端程序的電腦中,只要有支持JAVA的瀏覽器,也可以使用。

  安裝VNC時,使用默認安裝便可,無需安裝server端。

 

 

圖 - vnc軟件

1.2.2 配置第一臺KVM虛擬機

使用命令

[root@kvm ~]# virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name centos7 --memory 1024 --vcpus 1 --disk /data/clsn.raw,format=raw,size=10 --cdrom /data/CentOS-7-x86_64-DVD-1511.iso --network network=default --graphics vnc,listen=0.0.0.0,port=5900 --noautoconsole

  注意:須要先將鏡像文件拷貝到 /data/CentOS-7-x86_64-DVD-1511.iso 。

使用參數說明:

 

參數

參數說明

--virt-type HV_TYPE

要使用的管理程序名稱 (kvm, qemu, xen, ...)

--os-type

系統類型

--os-variant DISTRO_VARIANT

在客戶機上安裝的操做系統,例如:'fedora18'、'rhel6'、'winxp' 等。

-n NAME, --name NAME

客戶機實例名稱

--memory MEMORY

配置客戶機虛擬內存大小

--vcpus VCPUS

配置客戶機虛擬 CPU(vcpu) 數量。

--disk DISK

指定存儲的各類選項。

-cdrom CDROM   

光驅安裝介質

-w NETWORK, --network NETWORK

配置客戶機網絡接口。

--graphics GRAPHICS

配置客戶機顯示設置。

虛擬化平臺選項:

-v, --hvm         

這個客戶機應該是一個全虛擬化客戶機

-p, --paravirt    

這個客戶機應該是一個半虛擬化客戶機

--container       

這個客戶機應該是一個容器客戶機

--virt-type HV_TYPE

要使用的管理程序名稱 (kvm, qemu, xen, ...)

--arch ARCH       

模擬 CPU 架構

--machine MACHINE

機器類型爲仿真類型

其它選項:

--noautoconsole

不要自動嘗試鏈接到客戶端控制檯

--autostart

主機啓動時自動啓動域。

--noreboot 

安裝完成後不啓動客戶機。

以上信息經過 " virt-install --help " 得到。

   在啓動的同時使用vnc鏈接

 

 

   下面就進入到安裝系統的操做,關於系統安裝的方法參考:http://www.cnblogs.com/clsn/p/7489784.html

1.2.3 KVM虛擬機管理操做

  virsh命令經常使用參數總結

 

參數

參數說明

基礎操做

list

查看虛擬機列表,列出域

start

啓動虛擬機,開始一個(之前定義的)非活躍的域

shutdown

關閉虛擬機,關閉一個域

destroy(危險)

強制關閉虛擬機,銷燬(中止)域

vncdisplay

查詢虛擬機vnc端口號

配置管理操做

dumpxml

導出主機配置信息

undefine

刪除主機

define

導入主機配置

domrename

對虛擬機進行重命名

掛起與恢復

suspend

掛起虛擬機

resume

恢復虛擬機

自啓動管理

autostart

虛擬機開機啓動

autostart --disable

取消虛擬機開機啓動

以上參數經過  「virsh  --help」 得到。

操做過程:

KVM虛擬機配置文件位置

[root@kvm ~]# ll /etc/libvirt/qemu/centos7.xml

修改KVM虛擬機配置的方法

[root@kvm ~]# virsh edit centos7

   使用該命令修改能夠對文件進行語法校驗。

備份與恢復

備份虛擬機配置(關機時備份):

[root@kvm ~]# virsh dumpxml centos7  > centos7.xml

刪除虛擬機配置

# 查看
[root@kvm ~]# virsh list --all 
 Id    名稱                         狀態
----------------------------------------------------
 -     centos7                        關閉
 # 刪除
[root@kvm ~]# virsh undefine centos7 
域 centos7 已經被取消定義
[root@kvm ~]# virsh list --all 
 Id    名稱                         狀態
----------------------------------------------------

導入虛擬機

# 導入
[root@kvm ~]# virsh define centos7-off.xml 
定義域 centos7(從 centos7-off.xml)
# 查看
[root@kvm ~]# virsh list --all 
 Id    名稱                         狀態
----------------------------------------------------
 -     centos7                        關閉

修改虛擬機名稱

# 重命名
[root@kvm ~]# virsh domrename centos7 clsn7
Domain successfully renamed
# 查看
[root@kvm ~]# virsh list
 Id    名稱                         狀態
----------------------------------------------------
 9     clsn7                          關閉

虛擬機掛起與恢復

# 掛起虛擬機
[root@kvm ~]# virsh suspend clsn7
域 clsn7 被掛起
# 查看狀態
[root@kvm ~]# virsh list --all
 Id    名稱                         狀態
----------------------------------------------------
 9     clsn7                          暫停

恢復虛擬機

[root@kvm ~]# virsh resume clsn7 
域 clsn7 被從新恢復

查詢虛擬機vnc端口

[root@kvm ~]# virsh vncdisplay clsn7 
:0  
# :0 即 爲 5900 端口,以此類推 :1爲5901 。

開機自啓動設置

# 設置 libvirtd 服務開機自啓動。
[root@kvm ~]# systemctl is-enabled libvirtd.service 
enabled

   設置宿主機開機虛擬機在其餘

[root@kvm ~]# virsh autostart clsn7 
域 clsn7標記爲自動開始
# 實質爲建立軟鏈接
[root@kvm ~]# ll /etc/libvirt/qemu/autostart/clsn7.xml 
lrwxrwxrwx 1 root root 27 1月  22 12:17 /etc/libvirt/qemu/autostart/clsn7.xml -> /etc/libvirt/qemu/clsn7.xml

取消開機自啓動

[root@kvm ~]# virsh autostart --disable clsn7 
域 clsn7取消標記爲自動開始

1.3 kvm虛擬機console登陸

1.3.1 CentOS 7.X 版本console登陸

配置console登陸

在clsn7虛擬機內操做(該操做僅限centos7):

[root@kvm ~]# grubby --update-kernel=ALL --args="console=ttyS0,115200n8"
[root@kvm ~]# reboot
# 115200n8:能顯示虛擬機的啓動過程

重啓完成後,使用virsh console 鏈接虛擬機。

[root@kvm ~]# virsh console clsn7 
鏈接到域 clsn7
換碼符爲 ^]
CentOS Linux 7 (Core)
Kernel 3.10.0-327.el7.x86_64 on an x86_64

clsn7 login: root
Password: 
Last login: Mon Jan 22 12:24:48 from 192.168.122.1
[root@clsn7 ~]# w
 12:26:11 up 0 min,  1 user,  load average: 0.09, 0.03, 0.01
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     ttyS0                     12:26    3.00s  0.02s  0.01s w

1.3.2 CentOS 6.X 版本console登陸

使用virsh console鏈接CentOS 6虛擬主機方法:

  安裝一臺centos6的kvm虛擬機

virt-install --virt-type kvm --os-type=linux --os-variant rhel6 \
--name clsn6 --memory 1124 --vcpus 1 \
--disk /data/clsn6/clsn-6.raw,format=raw,size=10 \
--cdrom /data/CentOS-6.9-x86_64-bin-DVD1.iso \
--network network=default --graphics vnc,listen=0.0.0.0,port=5901 \
--noautoconsole

  新安裝一臺虛擬機後,是沒法經過virsh console 命令連入虛擬機中的,這時咱們須要開啓虛擬機的console功能。

  如下操做都在虛擬機中進行

一、添加ttyS0的許可,容許root登錄

[root@clsn6 ~]# echo "ttyS0" >> /etc/securetty 

二、編輯/etc/grub.conf中加入console=ttyS0

   在該文件的第16行。kernel選項後添加

[root@clsn6 ~]# sed -i '/\tkernel/s#.*#& console=ttyS0#g' /etc/grub.conf
[root@clsn6 ~]# sync  # 同步配置到 /boot/grub/grub.conf
[root@clsn6 ~]# cat -n  /etc/grub.conf 
     1    # grub.conf generated by anaconda
     2    #
     3    # Note that you do not have to rerun grub after making changes to this file
     4    # NOTICE:  You have a /boot partition.  This means that
     5    #          all kernel and initrd paths are relative to /boot/, eg.
     6    #          root (hd0,0)
     7    #          kernel /vmlinuz-version ro root=/dev/vda3
     8    #          initrd /initrd-[generic-]version.img
     9    #boot=/dev/vda
    10    default=0
    11    timeout=5
    12    splashimage=(hd0,0)/grub/splash.xpm.gz
    13    hiddenmenu
    14    title CentOS 6 (2.6.32-696.el6.x86_64)
    15        root (hd0,0)
    16        kernel /vmlinuz-2.6.32-696.el6.x86_64 ro root=UUID=48532582-c271-4c0a-b55f-395fe16cd8aa rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet console=ttyS0
    17        initrd /initramfs-2.6.32-696.el6.x86_64.img

三、編輯/etc/inittab

  在最後一行加入內容 S0:12345:respawn:/sbin/agetty ttyS0 115200

[root@clsn6 ~]# echo 'S0:12345:respawn:/sbin/agetty ttyS0 115200' >>/etc/inittab

四、以上操做都完成後,重啓虛擬機

[root@clsn6 ~]# reboot

  如下操做在kvm宿主機上執行

一、檢查虛擬機的狀態

[root@kvm ~]# virsh list --all
 Id    名稱                         狀態
----------------------------------------------------
 11    clsn7                          running
 21    clsn6                          running

二、進行鏈接測試

[root@kvm ~]# virsh console clsn6 
鏈接到域 clsn6
換碼符爲 ^]  # 注:退出virsh console鏈接的方法,使用組合鍵Ctrl+]便可

CentOS release 6.9 (Final)
Kernel 2.6.32-696.el6.x86_64 on an x86_64

clsn6 login: root
Password: 
Last login: Mon Jan 22 05:44:25 on ttyS0
[root@clsn6 ~]# who
root     ttyS0        2018-01-22 05:50
# 登錄成功,查看登錄接口爲以前設置的ttyS0

1.4 KVM虛擬機磁盤、快照與克隆

1.4.1 磁盤管理

  KVM qcow二、raw、vmdk等鏡像格式說明:http://blog.csdn.net/zhengmx100/article/details/53887162

# 建立一塊qcow2的虛擬硬盤(僅測試使用,無實際意義)
[root@kvm data]# qemu-img create -f qcow2 clsn.qcow2 2G
[root@kvm data]# ls -l

查看當前虛擬機硬盤信息

[root@kvm ~]# qemu-img info /data/clsn.raw 
image: /data/clsn.raw
file format: raw
virtual size: 10G (10737418240 bytes)
disk size: 1.1G

raw轉qcow2格式:

# 參數說明
[root@kvm data]# qemu-img  --help |grep convert 
qemu-img convert [-f fmt] [-O output_fmt] filename  output_filename

轉換原有磁盤格式

[root@kvm data]# qemu-img convert -f raw -O qcow2 clsn.raw clsn.qcow2

修改clsn7 虛擬機配置文件

[root@kvm data]# virsh edit clsn7 
修改前:
    <disk type='file' device='disk'>
      <driver name='qemu' type='raw'/>
      <source file='/data/clsn.raw'/>
      <target dev='vda' bus='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
    </disk>
修改後:
    <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2'/>
      <source file='/data/clsn.qcow2'/>
      <target dev='vda' bus='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
    </disk>

刪除原磁盤文件

[root@kvm data]# \rm clsn.raw

啓動虛擬機

[root@kvm data]# virsh start clsn7 

[root@kvm data]# virsh list --all 
 Id    名稱                         狀態
----------------------------------------------------
 22    clsn7                          running

1.4.2 KVM虛擬機添加硬盤

進入硬盤存放目錄

[root@kvm ~]# cd /data

建立一塊新的硬盤

[root@kvm data]# qemu-img create -f qcow2 clsn7-add01.qcow2 5G 
Formatting 'clsn7-add01.qcow2', fmt=qcow2 size=5368709120 encryption=off cluster_size=65536 lazy_refcounts=off 

查看建立的硬盤信息

[root@kvm data]# qemu-img info clsn7-add01.qcow2 
image: clsn7-add01.qcow2
file format: qcow2
virtual size: 5.0G (5368709120 bytes)
disk size: 196K
cluster_size: 65536
Format specific information:
    compat: 1.1
    lazy refcounts: false

爲虛擬機添加硬盤

[root@kvm data]# virsh attach-disk clsn7 /data/clsn7-add01.qcow2 vdb --live --cache=none --subdriver=qcow2
# 成功附加磁盤

參數說明:

 

 

參數

參數說明

vdb

第二塊硬盤

--live

熱添加

--subdriver

驅動類型

調整已添加硬盤的大小

[root@kvm data]# virsh --help |grep disk 
    attach-disk                    #附加磁盤設備
    detach-disk                    #分離磁盤設備

將已掛載的磁盤卸載下來

[root@kvm data]# virsh detach-disk clsn7  vdb 
成功分離磁盤

調整磁盤大小

# 使用參數
[root@kvm data]# qemu-img --help |grep resize
  resize [-q] filename [+ | -]size

   增長1G容量

[root@kvm data]# qemu-img resize clsn7-add01.qcow2 +1G
Image resized.
[root@kvm data]# qemu-img info clsn7-add01.qcow2 
image: clsn7-add01.qcow2
file format: qcow2
virtual size: 6.0G (6442450944 bytes)
disk size: 260K
cluster_size: 65536
Format specific information:
    compat: 1.1
    lazy refcounts: false

從新講磁盤添加到虛擬機

[root@kvm data]# virsh attach-disk clsn7 /data/clsn7-add01.qcow2 vdb --live --cache=none --subdriver=qcow2

  如下在虛擬機中操做

格式化磁盤

[root@clsn7 ~]# mkfs.xfs /dev/vdb 

掛載磁盤

[root@clsn7 ~]# df -h |grep /dev/vdb
/dev/vdb        6.0G   33M  6.0G   1% /opt    

使用 xfs_growfs 刷新磁盤的信息

[root@clsn7 ~]# xfs_growfs --help 
xfs_growfs: invalid option -- '-'
Usage: xfs_growfs [options] mountpoint

1.4.3 快照管理

  注意:raw格式的磁盤沒法建立快照

建立快照

[root@kvm data]# virsh snapshot-create clsn7 
已生成域快照 1516607756

查看主機快照列表

[root@kvm data]# virsh snapshot-list  clsn7
 名稱               生成時間              狀態
------------------------------------------------------------
 1516607756           2018-01-22 15:55:56 +0800 running
# 注:該名稱爲unix時間戳(格林威治時間)

查看快照信息

[root@kvm data]# virsh snapshot-info  clsn7 --snapshotname 1516607756

登錄虛擬機,進行刪除操做

[root@clsn7 /]# ls -1|egrep -v 'proc|sys|run' |rm -rf

還原快照

[root@kvm data]# virsh snapshot-revert clsn7 --snapshotname 1516607756

刪除快照

[root@kvm data]# virsh snapshot-delete  clsn7 --snapshotname 1516607756

快照配置文件位置

[root@kvm data]# cd  /var/lib/libvirt/qemu/snapshot/
[root@kvm snapshot]# tree
.
└── clsn7
    └── 1516607756.xml

1.4.4 kvm虛擬機克隆

  複製一個虛擬機,需修改如 MAC 地址,名稱等全部主機端惟一的配置。

  虛擬機的內容並無改變:virt-clone 不修改任何客戶機系統內部的配置,它只複製磁盤和主機端的修改。因此像修改密碼,修改靜態 IP 地址等操做都在本工具複製範圍內。如何修改此類型的配置,請參考 virt-sysprep。

  克隆經常使用命令:

[root@kvm ~]# virt-clone --auto-clone -o clsn7 
WARNING  設置圖形設備端口爲自動端口,以免相互衝突。
正在分配 ‘clsn-clone.ra 4% [-                 ] 1.5 MB/s | 464 MB  01:50:18 ETA

參數說明:

 

 

參數

參數說明

--auto-clone  

從原始客戶機配置中自動生成克隆名稱和存儲路徑。

-o ORIGINAL_GUEST,

--original ORIGINAL_GUEST

原始客戶機名稱;必須爲關閉或者暫停狀態。

1.5 kvm虛擬機網絡管理

1.5.1 橋接網絡配置

一、設置橋接網絡

[root@kvm ~]# virsh iface-bridge eth0 br0
使用附加設備 br0 生成橋接 eth0 失敗
已啓動橋接接口 br0

   查看網卡配置文件

# 查看 eth0 配置文件
[root@kvm ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
BRIDGE="br0"
# 查看 br0 配置文件
[root@kvm ~]# cat /etc/sysconfig/network-scripts/ifcfg-br0 
DEVICE="br0"
ONBOOT="yes"
TYPE="Bridge"
BOOTPROTO="none"
IPADDR="10.0.0.240"
NETMASK="255.255.255.0"
GATEWAY="10.0.0.254"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
DHCPV6C="no"
STP="on"
DELAY="0"

二、修改虛擬機網絡配置

[root@kvm ~]# virsh edit clsn7 
修改前:
    <interface type='network'>
      <mac address='52:54:00:42:bf:bc'/>
      <source network='default'/>
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>
修改後:
    <interface type='bridge'>
      <mac address='52:54:00:42:bf:bc'/>
      <source bridge='br0'/>
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>

   查看宿主機網橋

[root@kvm ~]# brctl show 
bridge name    bridge id        STP enabled    interfaces
br0        8000.000c294d551b    yes        eth0
virbr0     8000.5254006aaa40    yes        virbr0-nic
                                vnet0
                                vnet1

   查看防火牆規則:

    [root@kvm ~]# iptables -t nat  -nvL
    Chain PREROUTING (policy ACCEPT 195 packets, 24665 bytes)
     pkts bytes target     prot opt in     out     source               destination         

    Chain INPUT (policy ACCEPT 131 packets, 16209 bytes)
     pkts bytes target     prot opt in     out     source               destination         

    Chain OUTPUT (policy ACCEPT 272 packets, 24045 bytes)
     pkts bytes target     prot opt in     out     source               destination         

    Chain POSTROUTING (policy ACCEPT 272 packets, 24045 bytes)
     pkts bytes target     prot opt in     out     source               destination         
        0     0 RETURN     all  --  *      *       192.168.122.0/24     224.0.0.0/24        
        1   328 RETURN     all  --  *      *       192.168.122.0/24     255.255.255.255     
       29  1740 MASQUERADE  tcp  --  *      *       192.168.122.0/24    !192.168.122.0/24     masq ports: 1024-65535
        0     0 MASQUERADE  udp  --  *      *       192.168.122.0/24    !192.168.122.0/24     masq ports: 1024-65535
        3   252 MASQUERADE  all  --  *      *       192.168.122.0/24    !192.168.122.0/24 

三、修改kvm虛擬機網卡配置文件

[root@clsn7 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0 
TYPE=Ethernet
BOOTPROTO=static
NAME=eth0
DEVICE=eth0
ONBOOT=yes
IPADDR=10.0.0.110
NETMASK=255.255.255.0
GATEWAY=10.0.0.254
DNS1=223.5.5.5

測試網絡連通性

[root@clsn7 ~]# ping 223.5.5.5 -c1 
PING 223.5.5.5 (223.5.5.5) 56(84) bytes of data.
64 bytes from 223.5.5.5: icmp_seq=1 ttl=128 time=94.4 ms

1.6 KVM虛擬機冷/熱遷移

  在進行遷移以前須要準備一臺與KVM配置相同的機器(KVM02),部署好kvm環境。

1.6.1 虛擬機冷遷移

  在kvm02中安裝kvm組件

[root@kvm02 ~]# yum install libvirt* virt-* qemu-kvm* -y

  配置橋接網絡

[root@kvm02 ~]# virsh iface-bridge eth0 br0
[root@kvm02 ~]# mkdir -p /data

  將虛擬機關機,導出配置文件

[root@kvm data]# virsh dumpxml clsn7 >clsn7.xml

  將虛擬機文件傳輸到kvm02上

[root@kvm data]# scp -rp  clsn7.xml clsn.qcow2  10.0.0.201:/data

  導入配置文件

[root@kvm02 ~]# virsh define clsn7.xml

  啓動虛擬機

[root@kvm02 ~]# virsh start clsn7

  查看虛擬機狀態

[root@kvm02 ~]# virsh list --all 
 Id    名稱                         狀態
----------------------------------------------------
 5     clsn7                          running

    至此,一次KVM冷遷移就完成了

1.6.2 virt-manager和kvm虛擬機熱遷移(準備)

  實現kvm虛擬機熱遷移核心:共享存儲。在這裏使用的時NFS共享存儲,關於nfs的詳情參考:http://www.cnblogs.com/clsn/p/7694456.html

一、安裝virt-manager所需桌面及vnc-server

[root@kvm ~]# yum groupinstall "GNOME Desktop" -y
# vnc-server端
[root@kvm ~]# yum install tigervnc-server -y
# virt-manager須要軟件
[root@kvm ~]# yum install openssh-askpass -y

二、配置vnc服務

複製vnc配置文件

[root@kvm ~]# vi /usr/lib/systemd/system/vncserver@.services
[root@kvm ~]# \cp /usr/lib/systemd/system/vncserver@.service  /usr/lib/systemd/system/vncserver@\:1.service

修改配置文件,主要修改<USER>參數。

[root@kvm ~]# egrep -v "^#|^$" /usr/lib/systemd/system/vncserver@\:1.service
[Unit]
Description=Remote desktop service (VNC)
After=syslog.target network.target
[Service]
Type=forking
User=root
ExecStartPre=-/usr/bin/vncserver -kill %i
ExecStart=/usr/bin/vncserver %i
PIDFile=/root/.vnc/%H%i.pid
ExecStop=-/usr/bin/vncserver -kill %i
[Install]
WantedBy=multi-user.target
# 用戶爲root,家目錄爲root

官方提供修改方法

# Quick HowTo:
# 1. Copy this file to /etc/systemd/system/vncserver@.service
# 2. Replace <USER> with the actual user name and edit vncserver
#    parameters appropriately
#   ("User=<USER>" and "/home/<USER>/.vnc/%H%i.pid")
# 3. Run `systemctl daemon-reload`
# 4. Run `systemctl enable vncserver@:<display>.service`

設置vnc鏈接時的密碼,

[root@kvm ~]# vncpasswd 
Password:
Verify:
Would you like to enter a view-only password (y/n)? n  
# y爲建立只讀用戶,n爲非只讀用戶。

啓動vnc服務,設置開機自啓動

[root@kvm ~]# systemctl start vncserver@\:1.services
[root@kvm ~]# systemctl enable vncserver@\:1.services

查看密碼文件及其餘配置文件位置

[root@kvm ~]# ll ~/.vnc/

三、配置NFS存儲

安裝軟件

[root@kvm ~]# yum install nfs-utils rpcbind -y

修改配置文件

[root@kvm ~]# cat /etc/exports
/data   172.16.1.0/24(rw,sync,all_squash,anonuid=0,anongid=0)

啓動nfs程序

[root@kvm ~]# systemctl restart rpcbind 
[root@kvm ~]# systemctl restart nfs
# 設置開機自啓動
[root@kvm ~]# systemctl enable rpcbind 
[root@kvm ~]# systemctl enable nfs

在kvm02上安裝nfs

[root@kvm02 ~]#  yum install nfs-utils rpcbind -y

   查看共享信息

[root@kvm02 ~]# showmount -e 172.16.1.240
Export list for 172.16.1.240:
/data 172.16.1.0/24

   掛載目錄

[root@kvm02 ~]# mount.nfs 172.16.1.240:/data /data
# 加入開機自啓動
[root@kvm02 ~]# echo  'mount.nfs 172.16.1.240:/data /data' >>/etc/rc.local
[root@kvm02 ~]# chmod +x /etc/rc.d/rc.local

1.6.3 KVM虛擬機熱遷移(實現)

vnc鏈接KVM宿主機:

 

 

圖 - 鏈接地址

 

 

圖 - 輸入vnc密碼

 

 

圖 - 使用vmm 虛擬系統管理器

添加KVM02宿主機

 

 

圖 - 添加新鏈接

注:鏈接上KVM02機器便可

 

 

圖 - 添加上kvm02主機

 

 

圖 - 主機添加完成

主機熱遷移

 

 

圖 - 遷移1

 

 

圖 - 遷移2,選擇要遷移到目的主機

 

 

圖 - 遷移過程

 

 

圖 - 遷移完成

在kvm02上查看虛擬機狀態

[root@kvm02 ~]# virsh list --all 
 Id    名稱                         狀態
----------------------------------------------------
 7     clsn7                          running

虛擬機配置查看方法:

 

 

圖 - clsn7 虛擬機配置信息

說明:在熱遷移的過程當中可能會參數丟包的狀況,通常不會超過1個包。

[C:\~]$ ping 10.0.0.110 -t
來自 10.0.0.110 的回覆: 字節=32 時間=1ms TTL=64
來自 10.0.0.110 的回覆: 字節=32 時間=13ms TTL=64
來自 10.0.0.110 的回覆: 字節=32 時間=11ms TTL=64
請求超時。
來自 10.0.0.110 的回覆: 字節=32 時間=4ms TTL=64
來自 10.0.0.110 的回覆: 字節=32 時間<1ms TTL=64
來自 10.0.0.110 的回覆: 字節=32 時間<1ms TTL=64

  至此,一次熱遷移就完成了

1.7 KVM連接克隆

連接克隆腳本

#!/bin/bash
# kvm link clone scripts  
# user clsn 
# blog: https://www.nmtui.com
# 2018-02-06
###

# init
if [ $# -ne 2 ]
  then 
    echo "Usage: $0 OLD_VMNAME NEW_VMNAME"
    exit 2
fi
LOG=/var/log/messages
old_vm=$1
new_vm=$2
new_xml="/tmp/${new_vm}.xml"
. /etc/init.d/functions

# dump old xmlfile 
virsh dumpxml $old_vm >$new_xml
old_disk=`awk -F "'" '/source file/{print $2}'  $new_xml`
tmp_dir=`dirname $old_disk`
new_disk=${tmp_dir}/${new_vm}.qcow2

# make link disk 
qemu-img create -f qcow2 -b $old_disk $new_disk &>> $LOG

# make over xml info 
sed -i '/uuid/d' $new_xml
sed -i '/mac address/d' $new_xml
sed -i '2s#'$old_vm'#'$new_vm'#' $new_xml
sed -i "s#$old_disk#$new_disk#g" $new_xml
sed -i '/source mode/d' $new_xml

# import new xml file
virsh define $new_xml &>> $LOG

# start new vm 
virsh start $new_vm &>> $LOG
if [ $? -eq 0 ]
  then 
   action "vmhost $new_vm start"  /bin/true 
else 
   action "vmhost $new_vm start"  /bin/false
   echo "log info : $LOG"
fi

# END
\rm $new_xml

說明:

1.7.1 手動克隆

第一步:複製虛擬磁盤文件
第二步:修改xml配置文件
  1)name
  2)uuid
  3)虛擬磁盤存儲路徑
  4)mac地址

1.7.2腳本實現思路

1) 備份old_vm的配置文件,並重定向生成一個新的虛擬機配置文件
2)取出old_vm的磁盤路徑
3)建立新的連接磁盤文件
4) 修改xml配置文件
5) 導入新虛擬機
6)啓動測試

1.8 參考文獻

[1]  https://zh.wikipedia.org/wiki/

[2]  http://virtual.51cto.com/art/201303/386133.htm

[3]  https://virt-manager.org

[4]  https://zh.wikipedia.org/wiki/基於內核的虛擬機

[5]  https://libvirt.org

[6]  [ kvm ] 四種簡單的網絡模型 http://www.javashuo.com/article/p-fmmyaulg-en.html

[7]  http://www.javashuo.com/article/p-eahmcwen-eu.html

[8]  http://wiki.ubuntu.org.cn/Kvm教程

做者:慘綠少年 
出處:http://clsn.io
相關文章
相關標籤/搜索