1. 程式人生 > >使用libvirt工具棧管理kvm虛擬機

使用libvirt工具棧管理kvm虛擬機

安裝介質 暫停 設備模型 xtra network eth 必須 CI 一個

libvirt介紹

Libvirt是一個軟件集合,便於使用者管理虛擬機和其他虛擬化功能,比如存儲和網絡接口管理等等。Libvirt概括起來包括一個API庫、一個 daemon(libvirtd)和一個命令行工具(virsh)。
支持的虛擬化技術:KVM, XEN, VMWARE, Qemu, LXC, OpenVZ等
libvirt中的術語:

  • node:指物理節點
  • hypervisor:
  • domain: vm instances 虛擬機實例
    Libvirt的主要目標是:提供一種單一的方式管理多種不同的虛擬化提供方式和 hypervisor。

Libvirt的主要功能如下:

    (1)虛擬機管理
         包括不同的領域生命周期操作,比如:啟動、停止、暫停、保存、恢復和遷移。
         支持多種設備類型的熱插拔操作,包括:磁盤、網卡、內存和CPU。
    (2)遠程機器支持
         只要機器上運行了libvirt daemon,包括遠程機器,所有的libvirt功能就都可以訪問和使用。
         支持多種網絡遠程傳輸,使用最簡單的SSH,不需要額外配置工作。比如:example.com運行了libvirt,
         而且允許SSH訪問,下面的命令行就可以在遠程的主機上使用virsh命令行。
          virsh --connect qemu+ssh://[email protected]/system
    (3)存儲管理
       任何運行了libvirt daemon的主機都可以用來管理不同類型的存儲:創建不同格式的文件映像(qcow2、vmdk、raw等)、掛接NFS共享、列出現有的LVM卷組、創建新的LVM卷組和邏輯卷、對未處理過的磁盤設備分區、掛接iSCSI共享,等等等等。因為libvirt可以遠程工作,所有這些都可以通過遠程主機使用。
    (4)網絡接口管理
       任何運行了libvirt daemon的主機都可以用來管理物理和邏輯的網絡接口。可以列出現有的接口卡,配置、創建接口,以及橋接、vlan和關聯設備等,通過netcf都可以支持。
    (5)虛擬NAT和基於路由的網絡
       任何運行了libvirt daemon的主機都可以用來管理和創建虛擬網絡。Libvirt虛擬網絡使用防火墻規則作為路由器,讓虛擬機可以透明訪問主機的網絡

Libvirt的安裝和配置

安裝:

   在CentOS 6上:
                 yum install libvirt libvirt-client python-virtinst virt-manager libvirt-python
         在CentOS 7上:
                 yum install libvirt libvirt-client virt-install virt-manager libvirt-python

配置:

   libvirt和libvirtd的配置文件:
          libvirt配置文件: /etc/libvirt/libvirt.conf
          守護進程配置文件: /etc/libvirt/libvirtd.conf
                        域配置文件: xml格式
                 <vcpu placement=‘static‘>2</vcpu>
                 <features>
                                     ......
                 </features>
                 <domain>
                                     ......
                 </domain>

Hypervisor的訪問路徑:

    本地URL:
        driver[+transport]:///[path][?extral-param]
            driver:  驅動名稱,例如qemu, xen, lxc
            transport: 傳輸方式

    遠程URL:
        driver[+transport]://[user@][host][:port]/[path][?extral-param]
        例如: qemu://172.16.100.6/system
                    qemu+ssh://[email protected]/system
                    qemu+tcp://172.16.100.6/system

使用virt-install創建虛擬機並安裝GuestOS

virt-install是一個命令行工具,它能夠為KVM、 Xen或其他支持libvirt API的hypervisor創建虛擬機並完成GuestOS安裝;此外,它能夠基於串行控制臺、VNC、或SDL支持文本或圖形安裝界面。安裝過程可以使用本地的安裝介質如CDROM,也可以通過網絡方式如NFS、HTTP或FTP服務實現。對於通過網絡安裝的方式,virt-install可以自動加載必要的文件以啟動安裝過程而無須額外提供引導工具。當然,virt-install也支持PXE方式的安裝過程,也能夠直接使用現有的磁盤映像直接啟動安裝過程。

virt-install命令有許多選項,這些選項大體可分為下面幾大類,同時對每類中的常用選型也做出簡單說明:

一般選項:指定虛擬機的名稱、內存大小、VCPU個數及特性等
    -n NAME, --name=NAME:虛擬機名稱,需全局唯一
    -r MEMORY, --ram=MEMORY:虛擬機內存大小,單位為MB
    --vcpus=VCPUS[,maxvcpus=MAX][,sockets=#][,cores=#][,threads=#]:VCPU個數及相關配置
    --cpu=CPU:CPU模式及特性,如coreduo等;可以使用qemu-kvm -cpu ?來獲取支持的CPU模式

安裝方法:指定安裝方法、GuestOS類型等
    -c CDROM, --cdrom=CDROM:光盤安裝介質
    -l LOCATION, --location=LOCATION:安裝源URL,支持FTP、HTTP及NFS等,如ftp://172.16.0.1/pub
    --pxe:基於PXE完成安裝
    --livecd:把光盤當做LiveCD
    --os-type=DISTRO_TYPE:操作系統類型,如Linux、Unix或Windows等
    --os-variant=DISTRO_VARIANT:某類型操作系統的變體,如rhel5、fedora8等
    -x EXTRA, --extra-args=EXTRA:根據--location指定的方式安裝GuestOS時,用於傳遞給內核的額外選項,例如指定kickstart文件的位置,--extra-args "ks=http://172.16.0.1/class.cfg"
    --boot=BOOTOPTS:指定安裝過程完成後的配置選項,如指定引導設備次序、使用指定的而非安裝的kernel/initrd來引導系統啟動等,例如:
         --boot cdrom,hd,network:指定引導次序
         --boot kernel=KERNEL,initrd=INITRD,kernel_args="console=/dev/ttyS0":指定啟動系統的內核及initrd文件

存儲配置:指定存儲類型、位置及屬性等
    --disk=DISKOPTS:指定存儲設備及其屬性:格式為--disk /some/storage/path,opt1=val1,opt2=val2等;常見的選項有:
          device:設備類型,如cdrom、disk或floppy等,默認為disk;
          bus:磁盤總線類型,其值可以為ide,scsi, usb, virtio或xen;
          perms:訪問權限,如rw, ro或sh(共享的可讀寫),默認為rw;
          size:新建磁盤映像的大小,單位為GB;
          cache:緩存模型,其值有none、writethrough(緩存讀)及writeback(緩存讀寫);
          format:磁盤映像格式,如raw、qcow2、vmdk等;
          sparse:磁盤映像使用稀疏格式,即不立即分配指定大小的空間;
    --nodisks:不適用本地磁盤,在LiveCD模式中常用

網絡配置:指定網絡接口的網絡類型及接口屬性如MAC地址、驅動模式等;
    -w NETWORK, --network=NETWORK,opt1=val1,opt2=val2:將虛擬機連入宿主機的網絡中,其中NETWORK可以為:
          bridge=BRIDGE:連接至名為"BRIDGE"的橋設備
          network=NAME:連接至名為"NAME"的網絡
          其他常用的選項還有:
              model:GuestOS中看到的網絡設備型號,如e1000、 rtl8139或virtio等
              mac:固定的MAC地址;省略此選項時將使用隨機地址,但無論何種方式,對於KVM來說,其前三段必須為52:54:00:
    --nonetworks:虛擬機不使用網絡功能

圖形配置:定義虛擬機顯示功能相關的配置,如VNC相關配置
    --graphics TYPE,opt1=val1,opt2=val2:指定圖形顯示相關的配置,此選項不會配置任何顯示硬件(如顯卡),而是僅指定虛擬機啟動後對其進行訪問的接口
          TYPE:指定顯示類型,可以為vnc, sdl, spice或none等,默認為vnc
          port:TYPE為vnc或spice時其監聽的端口
          listen:TYPE為vnc或spice時所監聽的IP地址,默認為127.0.0.1,可以通過修改/etc/libvirt/qemu.conf定義新的默認值
          password:TYPE為vnc或spice時,為遠程訪問監聽的服務進行指定認證密碼
    --noautoconsole:禁止自動連接至虛擬機的控制臺

設備選項:指定文本控制臺、聲音設備、串行接口、並行接口、顯示接口等
    --serial=CHAROPTS:附加一個串行設備至當前虛擬機,根據設備類型的不同,可以使用不同的選項,格式為"--serial type,opt1=val1,opt2=val2,...", 例如: 
          --serial pty:創建偽終端
          --serial dev,path=HOSTPATH:附加主機設備至此虛擬機
          --video=VIDEO:指定顯卡設備模型,可以取值為cirrus、vga、qxl或vmvga

虛擬化平臺:虛擬化模型(hvm或paravirt)、模擬的CPU平臺類型、模擬的主機類型、hypervisor類型(如kvm、xen或qemu等)以及當前虛擬機的UUID等
    -v, --hvm:當物理機同時支持完全虛擬化和半虛擬化時,指定使用完全虛擬化
    -p, --paravirt:指定使用半虛擬化
    --virt-type:使用的hypervisor,如kvm、qemu、xen等,所有可用值可以使用"virsh capabilities"命令獲取

其他:
    --autostart:指定虛擬機是否在物理啟動後自動啟動
    --print-xml:如果虛擬機不需要安裝過程(--import、--boot),則顯示生成的xml而不是創建此虛擬機;默認情況下,此選項仍會創建磁盤映像
    --force:禁止命令進入交互式模式,如果有需要回答yes或no選項,則自動回答為yes
    --dry-run:執行創建虛擬機的整個過程,但不真正創建虛擬機、改變主機上的設備配置信息及將其創建的需求通知給libvirt
    -d, --debug:顯示debug信息

盡管virt-install命令有著類似上述的眾多選項,但實際使用中,其必須提供的選項僅包括--name、--ram、--disk(也可以是--nodisks)及安裝過程相關的選項。此外,有時還需要使用括--connect=CONNECT選項來指定連接至一個非默認的hypervisor.

使用virt-install創建虛擬機實例:
(1) 創建一個名為centos6的虛擬機實例,它有2個cpu,內存為512M,磁盤空間為120G的映像文件/images/kvm/centos6.img,使用網絡安裝方式,指定了cobbler的鏈接和kickstart的配置文件,網絡使用橋接模式,使用半虛擬化virtio網卡

virt-install                        -n "centos6"                         -r 512                         --vcpus=2                         -l http://172.16.0.1/cobbler/ks_mirror/CentOS-6.6-x86_64/                          -x "ks=http://172.16.0.1/centos6.x86_64.cfg"                          --disk path=/images/kvm/centos6.img,size=120,sparse                         --force                         -w bridge=br100,model=virtio

(2)下面這個示例創建一個名為rhel5的虛擬機,其hypervisor為kvm,內存大小為512MB,磁盤為8G的映像文件/var/lib/libvirt/images/rhel5.8.img,通過boot.iso光盤鏡像來引導啟動安裝過程

virt-install --connect qemu:///system             --virt-type kvm             --name rhel5             --ram 512             --disk path=/var/lib/libvirt/images/rhel5.img,size=8             --graphics vnc             --cdrom /tmp/boot.iso             --os-variant rhel5

(3)下面的示例將創建一個名為rhel6的虛擬機,其有兩個虛擬CPU,安裝方法為FTP,並指定了ks文件的位置,磁盤映像文件為稀疏格式,連接至物理主機上的名為brnet0的橋接網絡

virt-install                 --connect qemu:///system                 --virt-type kvm                 --name rhel6                 --ram 1024                 --vcpus 2                 --network bridge=brnet0                 --disk path=/VMs/images/rhel6.img,size=120,sparse                 --location ftp://172.16.0.1/rhel6/dvd                 --extra_args "ks=http://172.16.0.1/rhel6.cfg"                 --os-variant rhel6                 --force

(4)下面的示例將創建一個名為rhel5.8的虛擬機,磁盤映像文件為稀疏模式的格式為qcow2且總線類型為virtio,安裝過程不啟動圖形界面(--nographics),但會啟動一個串行終端將安裝過程以字符形式顯示在當前文本模式下,虛擬機顯卡類型為cirrus.

virt-install                 --connect qemu:///system                 --virt-type kvm                 --name rhel5.8                 --vcpus 2,maxvcpus=4                 --ram 512                 --disk path=/VMs/images/rhel5.8.img,size=120,format=qcow2,bus=virtio,sparse                 --network bridge=brnet0,model=virtio                 --nographics                 --location ftp://172.16.0.1/pub                 --extra-args "ks=http://172.16.0.1/class.cfg console=ttyS0 serial"                 --os-variant rhel5                 --force                 --video=cirrus

(5)下面的示例則利用已經存在的磁盤映像文件(已經有安裝好的系統)創建一個名為rhel5.8的虛擬機:

virt-install                 --name rhel5.8                 --ram 512                 --disk /VMs/rhel5.8.img                 --import 

(6) 下面的示例利用已經存在的磁盤映像文件創建一個名為cirros的虛擬機,它的內存為128M,cpu默認為1個,cpu最大為4個,使用橋接網卡,模式為virtio,開啟一個偽終端,不使用圖形界面

virt-install                             -n cirros                              -r 128                              --vcpus=1,maxvcpus=4                              --disk /images/cirros/cirros-no_cloud-0.3.0-i386-disk.img                              --network bridge=br0,model=virtio                              --import                              --serial=pty                              --console=pty                              --nographics  

註意:每個虛擬機創建後,其配置信息保存在/etc/libvirt/qemu目錄中,文件名與虛擬機相同,格式為XML。

使用libvirt工具棧管理kvm虛擬機