二、libvirt建立虛擬機並設置網絡

一:介紹

libvirt是基於xen、kvm等虛擬化技術之上的進一步操做封裝,經過他能夠快速調用kvm、xen命令快速建立、管理虛擬機。好比libvirt經過xml配置文件的方式記錄kvm建立虛擬機須要的參數,而後每次啓動虛擬機就只須要讀取這個xml的配置信息便可,不須要每次都輸入那麼多命令和參數。 他們的關係以下: centos

二:建立虛擬機

  • 一、一樣先判斷機器是否支持虛擬化,而後加載內核模塊。api

  • 二、安裝 qemu-kvm 、 libvirt(會自動安裝bridge-utils)網絡

    yum install -y qemu-kvm libvirt
  • 三、啓動libvritd守護進程dom

    service libvirtd start
  • 四、使用virsh有兩種方式ide

    • 直接使用:virsh list --allrest

    • virsh 【回車】 進入交互界面code

      virsh# list --allxml

  • 五、編寫配置文件blog

    注意:進程

    一、裏面的磁盤鏡像和光盤鏡像千萬不要放在root下,要放在/目錄下

    二、<os></os>這一行cdrom和hd沒有順序問題

    三、vnc端口若是開啓自動獲取,設置爲yes和-1,若是想指定端口,就設置爲no和具體590X

    其實libvirt它是藉助於qemu-kvm的功能,在她的基礎之上在進行操做封裝。同時,它把虛擬機的參數都記錄在一個配置文件中,複用這個配置配置文件。

    <domain type="kvm">
          <!--虛擬機名稱-->
          <name>kvm1</name>
          <!--最大內存,mb-->
          <memory unit="MiB">1024</memory>
          <!--可用內存,k-->
          <currentMemory unit="MiB">1024</currentMemory>
          <!--虛擬cpu個數-->
          <vcpu>2</vcpu>
          <!--啓動順序沒有關係-->
          <os>
              <type arch="x86_64">hvm</type>
              <!-- 硬盤啓動 -->
              <boot dev="hd" />
              <!--光盤啓動-->
              <boot dev="cdrom" />
          </os>
    
          <features>
              <acpi />
              <apic />
              <pae />
          </features>
    
          <clock offset="localtime" />
          <on_poweroff>destroy</on_poweroff>
          <on_reboot>restart</on_reboot>
          <on_crash>destroy</on_crash>
    
          <!--配置磁盤鏡像和光盤鏡像,使用virtio模式,加快讀取速度-->
          <devices>
              <emulator>/usr/libexec/qemu-kvm</emulator>
              <disk type="file" device="disk">
                  <driver name="qemu" type="qcow2" />
                  <!--目的鏡像>路徑-->
                  <source file="/cloud/centos.qcow2" /> 
                  <target dev="vda" bus="virtio" />
              </disk>
              <disk type="file" device="cdrom">
                  <!--光盤鏡像路徑 -->
                  <source file="/cloud/CentOS-6.6-x86_64-minimal.iso" />
                  <target dev="hdb" bus="ide" />
              </disk>
    
              <!--虛擬機網絡配置,綁定到什麼網橋上,就是什麼網絡,注意:同一網段,網卡不能同樣-->
              <!--綁定到virbr0,是nat。 這是第一塊網卡,對應eth0-->
              <interface type="bridge">
                  <!--指定虛擬機網卡mac地址,能夠不設置,自動分配-->
                  <!-- <mac address='06:64:12:00:00:52'/>     -->
                  <!--當前主機網橋的名稱-->
                  <source bridge="virbr0" />
                  <model type='virtio'/>
              </interface>
    
              <!--綁定到br0,是bridge。 這是第二塊網卡,對應eth1-->
              <interface type="bridge">
                  <!--指定虛擬機網卡mac地址,能夠不設置,自動分配-->
                  <!-- <mac address='06:64:12:00:00:52'/>     -->
                  <!--當前主機網橋的名稱-->
                  <source bridge="br0" />
                  <model type='virtio'/>
              </interface>
    
              <!--鼠標輸入設備-->
              <input type="mouse" bus="ps2" />
    
              <!--vnc端口號自動分配,能夠經過virsh vncdisplay來查詢-->
              <graphics type="vnc" port="5901" autoport="no" listen="0.0.0.0" keymap="en-us" passwd='abcd'/>
    
              <!--vnc端口號自動分配,手動指定分配-->
              <!-- <graphics type="vnc" port="5901" autoport="no" listen="0.0.0.0" keymap="en-us" passwd='abcd'/> -->
          </devices>
      </domain>

virsh操做虛擬機命令

  • 一、定義虛擬機(指定配置文件,配置文件會被拷貝到libvirt的一個指定文件夾中)

    virsh define /cloud/centos-base.xml
  • 二、virsh 進行管理虛擬機

    virsh list --all  # 顯示全部虛擬機 --all顯示所有
  • 三、啓動虛擬機

    virsh start centos
  • 四、關閉虛擬機

    virsh shutdown centos
  • 五、強制關機

    virsh destroy centos
  • 六、移除虛擬機

    virsh undefine centos
  • 七、顯示vnc端口

    virsh vncdisplay centos
  • 八、動態查詢kvm使用資源

    top -d 1 | grep kvm
  • 九、查詢kvm進程

    ps -aux | grep kvm
  • 十、開機自動啓動虛擬機

    virsh autostart centos
  • 十一、導出虛擬機centos的硬件配置信息爲/cloud/centos.bak.xml

    virsh dumpxml centos > /cloud/centos.bak.xml
  • 十二、編輯虛擬機配置(配置的是libvirt中的配置文件,而不是咱們編寫的那個)

    virsh edit centos
  • 1三、克隆KVM虛擬機

    virt-clone -o Winxp -n winxpclong -f /home/kvm/winxpclong.img
      (-o  原始客體的名稱-n新客戶端的名稱-f做爲新客戶端磁盤映像的新文件)

三:配置網絡

  • 一、 再也不須要brctl和tunctl來手動建立網橋、tap類型的網卡而後再關聯等等步驟,如今只須要使用virsh提供的iface-bridge、iface-unbridge等便可自動建立網橋、網卡,而且綁定到網橋上。最主要的是它會直接ifcfg-eth0和建立一個ifcfg-br0文件,這樣機器重啓後,仍是有效的。

  • 二、一樣分紅三種網絡模式bridge、nat、hosts-only

    bridge和nat模式

    nat:virsh啓動就會建立一個nat類型的網橋virbr0,這個網橋的配置信息在 cat /var/lib/libvirt/network/default.xml這裏定義。若是定義nat類型的網絡,直接關聯這個網橋便可

    bridge:須要利用iface-bridge eth0 br0建立一個網橋並綁定eth0。

  • 三、建立網橋,而且將eth0關聯到網橋上的操做(自動建立網橋br0、並綁定eth0)會修改ifcfg-eth0和建立一個ifcfg-br0的配置文件

    virsh iface-bridge eth0 br0

  • 四、編輯虛擬機配置文件,綁定到網橋上(會自動建立一個tap類型的網卡vnet0並綁定到網橋上)

    <!--虛擬機網絡配置,綁定到什麼網橋上,就是什麼網絡,注意:同一網段,網卡不能同樣-->
      <!--綁定到virbr0,是nat。 這是第一塊網卡,對應eth0-->
      <interface type="bridge">
          <!--指定虛擬機網卡mac地址,能夠不設置,自動分配-->
          <!-- <mac address='06:64:12:00:00:52'/>     -->
          <!--當前主機網橋的名稱-->
          <source bridge="virbr0" />
          <model type='virtio'/>
      </interface>
    
      <!--綁定到br0,是bridge。 這是第二塊網卡,對應eth1-->
      <interface type="bridge">
          <!--指定虛擬機網卡mac地址,能夠不設置,自動分配-->
          <!-- <mac address='06:64:12:00:00:52'/>     -->
          <!--當前主機網橋的名稱-->
          <source bridge="br0" />
          <model type='virtio'/>
      </interface>
  • 五、和上面同樣定義和啓動虛擬機便可。

    啓動虛擬機後,ifconfig會出現一個vnet0的tap類型網卡,是由於上面橋接到br0,自動生成的,它的網卡mac也是自動生成的。br0上面綁定了兩個網卡eth0和vnet0

    若是再啓動一個虛擬機綁定到virtbr0上,那麼又會自動建立一個tap類型網卡(vnet1),並綁定到virtbr0上。

四:總結

  • 一、virsh 會自動建立網橋,並綁定eth0到上面,同時修改ifcfg-eth0和建立ifcfg-br0爲了下次開機重啓時還能生效。區別於手動brctl操做

  • 二、啓動虛擬機時,連接到那個網橋上,哪一個網橋就會自動建立一個tap類型的網卡,名稱從vnet0遞增,關閉虛擬機後,會自動刪除這個vnet0

  • 三、xml配置文件定義網卡的時候能夠不指定網卡mac,會自動分配,若是手動指定,那麼就必須保證同一個網橋上,mac不能重複

  • 四、若是xml中配置多個網卡,那麼須要記住順序,第一個是eth0、第二個是eth1。。。。。。,由於綁定到那個網橋上,就須要配置對應網段的ip地址,不然無法上網

五:virsh的網絡操做

iface-begin     iface-commit    iface-destroy   iface-edit      iface-mac       iface-rollback  
iface-unbridge  iface-bridge    iface-define    iface-dumpxml   iface-list      iface-name     
iface-start     iface-undefine
相關文章
相關標籤/搜索