KVM虛擬機使用virsh命令創建帶操作系統image

KVM虛擬機使用virsh命令創建帶操作系統image

說明:以下整個過程均實測可行,如配完不能正常啓動鏡像操作系統,覈查虛擬機配置xml文件是否存在問題,網絡配置是否存在問題。

1、檢測CPU是否支持虛擬化

vmx爲Intel系列虛擬化,採用Intel-VT技術,svm爲AMD系列,採用AMD-V技術

注意:請務必開啓以下虛擬化選項,否則無法加載kvm

--WindowsBIOS需要開啓 virtualization technology enabled

--虛擬機需要開啓:虛擬機-->設置-->硬件-->處理器-->選擇 虛擬化xxx VT-X/AMD-v  -->重啓 

root@fieldbut02:~# egrep -o "(vmx|svm)" /proc/cpuinfo

vmx

vmx

vmx

vmx

#如開啓後仍不行,重啓機器。

2、安裝KVM並啓用KVM內核模塊

1)安裝

root@fieldbut02:~# apt-get install qemu-kvm ubuntu-vm-builder bridge-utils

2)啓用KVM內核模塊

root@fieldbut02:~# modprobe kvm

root@fieldbut02:~# modprobe kvm_intel

root@fieldbut02:~# modprobe kvm_amd

3)檢測

root@fieldbut02:~# kvm-ok

INFO: /dev/kvm exists

KVM acceleration can be used

4)添加用戶root到kvm

root@fieldbut02:~# adduser root kvm

正在添加用戶"root"到"kvm"組...

Adding user root to group kvm

完成。

3、安裝libvirt

建議直接apt-get 安裝,源碼安裝需要解決一系列依賴關係和配置問題,如不能安裝,先 apt-get update

1)、安裝 libvirt-bin qemu virt-manager

root@fieldbut02:~# apt-get  install libvirt-bin qemu virt-manager

2)、啓動服務並確認

root@fieldbut02:~# service libvirtd restart

root@fieldbut02:~# ps -ef|grep libvirt

libvirt+  1743     1  0 14:40 ?        00:00:00 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/lib/libvirt/libvirt_leaseshelper

root      1744  1743  0 14:40 ?        00:00:00 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/lib/libvirt/libvirt_leaseshelper

root      5284     1  2 14:47 ?        00:00:00 /usr/sbin/libvirtd

root      5355  1910  0 14:47 pts/0    00:00:00 grep --color=auto libvirt

root@fieldbut02:~# virsh list --all

 Id    名稱                         狀態

----------------------------------------------------

3)、virt-manager 進入管理界面

注意:需要先 ssh –X 否則無法進入

fieldyang@fieldbut02:~$  ssh -X localhost

The authenticity of host 'localhost (::1)' can't be established.

ECDSA key fingerprint is SHA256:24GN5wsSd6oXuBIjpltZJV6F17qmuxhlDQKvyM8GSMI.

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts.

fieldyang@localhost's password:

Welcome to Ubuntu 16.04.6 LTS (GNU/Linux 4.4.0-142-generic i686)

Last login: Sun Mar 15 15:45:38 2020 from 192.115.8.101

fieldyang@fieldbut02:~$

fieldyang@fieldbut02:~$ virt-manager

fieldyang@fieldbut02:~$

4、配置虛擬網絡:以下分別爲配置靜態ip和靜態ip網橋

1)查看網關

root@fieldbut02:/etc/network# ip route

default via 192.115.8.1 dev ens33

192.115.8.0/24 dev ens33  proto kernel  scope link  src 192.115.8.108

192.115.122.0/24 dev virbr0  proto kernel  scope link  src 192.115.122.1 linkdown

2)、配置靜態ip

root@fieldbut02:/etc/network# cp interfaces interfaces.bak0315

root@fieldbut02:/etc/network# cat interfaces

# This file describes the network interfaces available on your system

# and how to activate them. For more information, see interfaces(5).

source /etc/network/interfaces.d/*

# The primary network interface

150131-116060-999358

auto ens33

iface ens33 inet static

address 192.115.8.112 

#配置沒有被使用的ip地址

netmask 255.255.255.0

#寫入網關地址ip route 查看

gateway 192.115.8.1

#寫dns解析地址

dns-nameservers 1.1.1.1

root@fieldbut02:/etc/network#

root@fieldbut02:~# /etc/init.d/networking restart

[ ok ] Restarting networking (via systemctl): networking.service.

root@fieldbut02:~# ip a

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1

    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

    inet 127.0.0.1/8 scope host lo

       valid_lft forever preferred_lft forever

    inet6 ::1/128 scope host

       valid_lft forever preferred_lft forever

2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 1000

    link/ether 00:0c:29:b3:83:2e brd ff:ff:ff:ff:ff:ff

    inet 192.115.8.112/24 brd 192.115.8.255 scope global ens33

       valid_lft forever preferred_lft forever

    inet6 fe80::20c:29ff:feb3:832e/64 scope link

       valid_lft forever preferred_lft forever

3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000

    link/ether 52:54:00:a6:65:81 brd ff:ff:ff:ff:ff:ff

    inet 192.115.122.1/24 brd 192.168.115.255 scope global virbr0

       valid_lft forever preferred_lft forever

4: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN group default qlen 1000

    link/ether 52:54:00:a6:65:81 brd ff:ff:ff:ff:ff:ff

3)、配置網橋

按道理修改下網關等相關信息,重啓網絡即可,因虛擬機等問題如不能通,可能還要重啓下主機

root@fieldbut02:~# cd /etc/network/

root@fieldbut02:/etc/network# cat interfaces

auto lo

iface lo inet loopback

auto ens33

iface ens33 inet static

address 192.115.8.112 

#配置沒有被使用的ip地址

netmask 255.255.255.0

broadcast 192.115.8.125

#寫入網關地址ip route 查看

gateway 192.115.8.1

#寫dns解析地址

dns-nameservers 1.1.1.1

#dns-nameservers 8.8.8.8

auto brdg33

iface brdg33 inet static

address 192.115.8.112

#network 192.115.800.0

netmask 255.255.255.0

broadcast 192.115.8.125

gateway 192.115.8.1

dns-nameservers 8.8.8.8

bridge_ports ens33

bridge_stp off

bridge_fd 0

bridge_maxwait 0

#bridge_maxage 12          

root@fieldbut02:/etc/network#

fieldyang@fieldbut02:~$  ifconfig brdg33

brdg33    Link encap:以太網  硬件地址 00:0c:29:b3:83:2e 

          inet 地址:192.115.8.112  廣播:192.115.8.125  掩碼:255.255.255.0

          inet6 地址: fe80::20c:29ff:feb3:832e/64 Scope:Link

          UP BROADCAST RUNNING MULTICAST  MTU:1500  躍點數:1

          接收數據包:12723 錯誤:0 丟棄:0 過載:0 幀數:0

          發送數據包:6777 錯誤:0 丟棄:0 過載:0 載波:0

          碰撞:0 發送隊列長度:1000

          接收字節:3665385 (3.6 MB)  發送字節:3661879 (3.6 MB)

fieldyang@fieldbut02:~$

root@fieldbut02:/etc/network# ping www.baidu.com

PING www.a.shifen.com (163.177.151.109) 56(84) bytes of data.

64 bytes from 163.177.151.109: icmp_seq=1 ttl=56 time=6.30 ms

64 bytes from 163.177.151.109: icmp_seq=2 ttl=56 time=6.19 ms

64 bytes from 163.177.151.109: icmp_seq=3 ttl=56 time=6.26 ms

^C

--- www.a.shifen.com ping statistics ---

3 packets transmitted, 3 received, 0% packet loss, time 2017ms

rtt min/avg/max/mdev = 6.198/6.256/6.304/0.101 ms

root@fieldbut02:/etc/network#

5、virsh命令創建image

特別說明:筆者主機性能較差,選用ubuntu-12.10不加載任何模塊安裝,性能較優主機可以自行選擇其他系統,命令並無區別。

1)、定義虛擬機片配置文件模板

模板見文末

root@fieldbut02:/image#cp template.xml ubuntu-12.10.xml

2)、上傳安裝包到安裝路徑

root@fieldbut02:/image# ls   ubuntu-12.10-server-i386.iso

ubuntu-12.10-server-i386.iso

3)、定義UUID

root@fieldbut02:/image# UUID=`uuidgen`

root@fieldbut02:/image# sed -i "s,%UUID%,$UUID,g" ubuntu-12.10.xml

root@fieldbut02:/image# grep uuid ubuntu-12.10.xml

  <uuid>973e2bbc-3f94-4bbc-8448-05cff5e8c947</uuid>

4)、使用qemu-img 創建一個raw格式的image,並用絕對路徑替換模板中路徑

root@fieldbut02:/image# qemu-img create -f raw ubuntu-12.10.raw 10G

Formatting 'ubuntu-12.10.raw', fmt=raw size=10737418240

root@fieldbut02:/image# sed -i "s,%IMAGE_PATH%,/image/ubuntu-12.10.raw,g" ubuntu-12.10.xml

root@fieldbut02:/image# grep '/image/ubuntu-12.10.raw' ubuntu-12.10.xml

      <source file='/image/ubuntu-12.10.raw'/>

4)、替換模板中安裝系統的虛擬光盤的絕對路徑

root@fieldbut02:/image# sed -i "s,%ISO_PATH%,/image/ubuntu-12.10-server-i386.iso,g" ubuntu-12.10.xml

root@fieldbut02:/image# grep 'ubuntu-12.10-server-i386.' ubuntu-12.10.xml

      <source file='/image/ubuntu-12.10-server-i386.iso'/>

5)、配置虛擬網卡,需要保證網橋brdg33已啓用,使用如下命令生成並替換模板文件

root@fieldbut02:/image# MAC="fa:95:$(dd if=/dev/urandom count=1 2>/dev/null|md5sum|sed 's/^\(..\)\(..\)\(..\)\(..\).*$/\1:\2:\3:\4/')"

root@fieldbut02:/image# sed -i "s,%MAC%,$MAC,g" ubuntu-12.10.xml

root@fieldbut02:/image# grep 'fa:95' ubuntu-12.10.xml

      <mac address='fa:95:c2:52:70:d8'/>

root@fieldbut02:/image# MAC2="52:54:$(dd if=/dev/urandom count=1 2>/dev/null|md5sum|sed 's/^\(..\)\(..\)\(..\)\(..\).*$/\1:\2:\3:\4/')"

root@fieldbut02:/image# sed -i "s,%MAC2%,$MAC2,g" ubuntu-12.10.xml

root@fieldbut02:/image# grep '52:54' ubuntu-12.10.xml

      <mac address='52:54:78:23:73:6d'/>

6)、啓動虛擬機

---定義虛擬機域,define命令作用在於,將虛擬機提交給libvirt管理。         

root@fieldbut02:/image# virsh define ubuntu-12.10.xml

定義域 ubuntu-12.10(從 ubuntu-12.10.xml)

---定義完成後,使用virsh list 命令查看虛擬機狀態

root@fieldbut02:/image# virsh list --all

 Id    名稱                         狀態

----------------------------------------------------

 -     ubuntu-12.10                       關閉

--開啓虛擬機,並確認狀態

root@fieldbut02:/image# virsh start ubuntu-12.10

域 ubuntu-12.10 已開始

fieldyang@fieldbut02:~$ virsh list --all

 Id    名稱                         狀態

----------------------------------------------------

 2     ubuntu-12.10                   running

fieldyang@fieldbut02:~$

7)、查看虛擬機vnc端口

root@fieldbut02:/image# virsh vncdisplay ubuntu-12.10

:0

8)、安裝vncviewer並連接虛擬機 

語法 vncviewer ip:port

root@fieldbut02:/image# apt-get install vncviewer

fieldyang@fieldbut02:~$ virsh list --all

 Id    名稱                         狀態

----------------------------------------------------

 2     ubuntu-12.10                   running

fieldyang@fieldbut02:~$

---此外,如果是通過VMware等虛擬機安裝的宿主機Ubuntu,原VMware宿主機Windows上還需要安裝Xmanager ,否則vncviewer 無法打開

fieldyang@fieldbut02:~$ vncviewer 192.115.8.112:0

Connected to RFB server, using protocol version 3.8

No authentication needed

Authentication successful

Desktop name "QEMU (ubuntu-12.10)"

VNC server default format:

  32 bits per pixel.

  Least significant byte first in each pixel.

  True colour: max red 255 green 255 blue 255, shift red 16 green 8 blue 0

Using default colormap which is TrueColor.  Pixel format:

  32 bits per pixel.

  Least significant byte first in each pixel.

  True colour: max red 255 green 255 blue 255, shift red 16 green 8 blue 0

Same machine: preferring raw encoding

--此處Xmanager 會彈出如下Ubuntu-12.10鏡像安裝界面,操作同系統安裝,不贅述。

安裝完成後,重新使用vncviewer 192.115.8.112:0會進入如下登錄界面。

一些建議:筆者使用 virt-manager CPU跑滿,直接安裝卡死在Xmanager安裝首頁,故CPU性能不足,不建議使用virt-manager。

9)、建議在Windows上安裝TightVNC Viewer,確保宿主機與Windows在同一網絡即可使用192.115.8.112:0直連後進入安裝頁面。

該方法安裝速度較快,建議使用該方法先生成image。

進入後界面同上

10)、TightVNC Viewer安裝完成後,即可使用VNC登錄主機

 

附:template.xml
<domain type='kvm'>
  <name>%VM_NAME%</name>
  <uuid>%UUID%</uuid>
  <memory>1048576</memory>
  <currentMemory>1048576</currentMemory>
  <vcpu>1</vcpu>
  <os>
    <type arch='i686' machine='pc-0.14'>hvm</type>
    <boot dev='hd'/>
    <bootmenu enable='yes'/>
  </os>
  <features><acpi/><apic/><pae/></features>
  <clock offset='localtime'/>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>restart</on_crash>
  <devices>
    <emulator>/usr/bin/kvm</emulator>
    <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2' cache='none'/>
      <source file='%IMAGE_PATH%'/>
      <target dev='vda' bus='virtio'/>
      <alias name='virtio-disk0'/>
    </disk>
    <disk type='file' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <source file='%ISO_PATH%'/>
      <target dev='hdb' bus='ide'/>
      <readonly/>
      <address type='drive' controller='0' bus='1' unit='0'/>
    </disk>   
    <controller type='ide' index='0'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
    </controller>
    <controller type='fdc' index='0'/>
    <interface type='bridge'>
      <mac address='%MAC%'/>
      <source bridge='brdg33'/>
      <target dev='vnet0'/>
      <alias name='net0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>
    <interface type='network'>
      <mac address='%MAC2%'/>
      <source network='default'/>
      <target dev='vnet7'/>
      <alias name='net1'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
    </interface>
    <serial type='pty'><target port='0'/></serial>
    <console type='pty'><target type='serial' port='0'/></console>
    <input type='tablet' bus='usb'/><input type='mouse' bus='ps2'/>
    <graphics type='vnc' port='5900' autoport='yes' listen='0.0.0.0' keymap='en-us'>
      <listen type='address' address='0.0.0.0'/>
    </graphics>
    <sound model='ich6'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
    </sound>
    <video>
      <model type='vga' vram='9216' heads='1'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
    </video>
    <memballoon model='virtio'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
    </memballoon>
  </devices>
</domain>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章