3,229 瀏覽數

KVM -Virtual Machine Creation

現在要開始建立我們的 virtual Macine 了,方式可以透過 virt-manager 或是文字模式的 virt-install.這邊先針對 virt-manager 的使用來做說明, virt-install 的使用請參考 http://benjr.tw/8254

[root@benjr ~]# virt-manager

kvm01

在選單的最下方可以看到 "New" 這就是新增 Virtual Machine.主要新增 Virtual Machine 需要幾個步驟
1.name
2.Virtualization Method 
3.Installation Method 
4.virtual machine sotrage
5.Network
6.
Memory and CPU

create
1.name
第一步就是為你的 virtual machine 命個名稱,除了英文大小寫或是數字以及'_' , '.' 或是 '' 其他符號皆不可使用.
naming
在設定 Virtual Machine 前先來說明什麼是 Virtual Machine 和 Guest OS.虛擬機器 virtual machine.Host(主系統) 提供了一個虛擬化的環境給 Guest(客系統) 一個可以執行不同於 Host(主系統) 的作業系統環境,凡是提供虛擬化環境平台的系統稱為 Host(主系統)  虛擬出來的作業系統都稱為 Guest(客系統).通常 Host 與 Guest 為不相同的作業系統環境.

2.Virtualization Method
當我們在做 RHEL 5 update 4 KVM 的虛擬化時 Virtual machine 只能選擇 FV,如果你在建立 virtual machine 遇到不能建立 FV(Fully Virtualized),首先檢查系統的 CPU 是否有支援,目前有支援的 CPU 包括了 AMD-V Pacifica (Flag 是 svm) ,Intel VT (flag 是 vmx) ,再來檢查 BIOS 對於 CPU virtualization 是否有支援.
kvm05
CPU architecture 可以選擇 i686 或是 x86_64 可以依據你作業系統的版本來選擇,但是在 Hypervisor 選擇上除了 KVM 外還可以選擇 QEMU 試用的感覺上是 QEMU 的 User mode emulation 模式效能上很差就不建議來使用了.

3.Installation Method 
Virtual Machine 安裝媒體的選擇有三種 1.Local install media(ISO image or CD-ROM)  2.Network install tree (HTTP, FTP , or NFS) 3.Network boot (PXE)
kvm03
剛剛選擇的是 ISO image or CDROM 可以在選擇是由 ISO image 或是 CDROM 來安裝 Guest OS 了
fv2
最方便的方式就是由 ISO 來安裝 Guest OS,可以一次同時安裝多個作業系統不會受到系統上光碟機 (CD-ROM 或是 DVD-ROM) 的限制..不過在不同的作業系統有不同的方式可以進行光碟內容轉換成 ISO 檔的方式.

如果你 Host 系統本機上有 CD-ROM 或是 DVD 我們可以直接將作業系統的安裝光碟放在 Host 的光碟機供 Virtual Machine 來存取.

這一項是讓 FV-Virtual machine 由 PXE(Preboot eXecution Environment) 網路開機,如果我們要安裝的 Guest OS 為 Linux base 時網路環境必須搭配 PXE + DHCP Service(通常需要另外一台 Linux Server 來擔當這項工作) 就可以讓 FV-Virtual machine 由網路開機,Linux PXE 的設定請自行參考 http://benjr.tw/83
但是如果你要安裝的 Guest OS 為 windows base 時就需要使用一台 Windows 架一個 Microsoft® Windows®  Remote Installation Services(RIS) 或是 Deployment Services (WDS) 的服務.可以讓 FV-Virtual machine 由 PXE 開機.

ISO

  1. Linux System:
    1. Linux 系統下的 dd 就可以處理將光碟內容轉換成 ISO 檔不過光碟不能在掛載的情況下做轉換.使用指令 #mount 先確定一下光碟是否在掛載的情況下.如果是則用 #umount 指令將光碟移除掛載

    [root@benjr ~]# dd if=/dev/cdrom of=/path/cdimg_filename.iso
    

    if : 這邊指定的是光碟機裝置
    of : 這就是輸出的 ISO 名稱

  2. Windows  System:
    Windows 並沒有可以建立 ISO 檔的工具這邊提供一隻常用的 winimage 可以在官方網站下載 http://www.winimage.com/  WinImage 的選項 Disk ->Create CD-ROM ISO image… 選擇你要的檔名就會開始將光碟內容轉換成 ISO 檔.
    iso_windows
    得到的 ISO 就可以讓 Guest OS  安裝使用.

CD-ROM or DVD

Network install tree (HTTP, FTP , or NFS)

  • Install Media URL 
  • Kickstart URL
  • Kernel parameters

在 Installation Source 這一部分最主要的就是設定安裝媒體(Install Media URL)的來源以及 Kickstart URL 的檔案, 核心參數 Kernel parameters .
pv2
Install Media URL  通常可以透過三種不同的網路服務來安裝 nfs,http 或是 ftp 都可以.指定方法如下:
NFS: nfs://server:/path
HTTP: http://server/path
FTP: ftp://server/path

我們可以當然要安裝的 Guest OS 安裝光碟內容也必須存在 Server 上.我習慣是放在 /var/ftp 目錄下,這樣不管是 nfs,http 或是 ftp 都可以存取.
1.複製 OS 光碟所有的內容.
2.由 FTP 來安裝
請確定 ftp 的服務已經開啟

[root@benjr ~]# chkconfig vsftpd on
[root@benjr ~]# service vsftpd restart

3.由 NFS 來安裝
編輯 "/etc/exports" 並將 "/var/ftp/" 目錄分享(因為我們將把光碟內的檔案放在此目錄下,此為FTP預設的分享目錄)

[root@benjr ~]# vi /etc/exports
/var/ftp/    192.8.1.*(ro,all_squash)

並確定 NFS 的服務已經開啟

[root@benjr ~]# chkconfig nfs on
[root@benjr ~]# service nfs start

4.由 HTTP 來安裝
編輯 "/etc/httpd/conf/httpd.conf" 並將 Document 設為 /var/ftp(因為我們將把光碟內的檔案放在此目錄下,此為FTP預設的分享目錄)

[root@benjr ~]# vi /etc/httpd/conf/httpd.conf
Document Root "/var/ftp"

並確定 HTTP 的服務已經開啟

[root@benjr ~]# chkconfig httpd on
[root@benjr ~]# service httpd restart

Kickstart URL
kickstart 主要應用在當我們需要大量安裝伺服器時所採取的一種方式,其原理模式就是將安裝的選項寫在一個檔案內.通常我們安裝完 RHEL 時你會在 /root/ 目錄下面可以發現一個檔案 anaconda-ks.cfg,這個檔案內容紀錄了我們當時在安裝時所選的選項設定值,內容大至如下

# Kickstart file automatically generated by anaconda.
install

nfs –server=192.8.1.1 –dir=/var/ftp/rhel5-u3-64

key 49af-8941-4d14-7589

lang en_US.UTF-8

keyboard us

xconfig –startxonboot

network –device eth0 –bootproto dhcp

rootpw –iscrypted $1$LRtPcttF$wzXIrullYgP0rrNtOSzL81

..略…

不過不是很建議自己手動去編輯,RedHat 提供了一隻工具(#system-config-kickstart)可以讓我們透過勾選選單的方式來設定安裝時的設定值.
kickstart
和安裝媒體一樣你可以透過 nfs,http 或是 ftp 都可以.也可以指定

kernel parameters
通常我們從光碟或是 PXE 開機時會出現 Boot: 讓我們可以鍵入 Kernel parameters 核心參數但是在 Xen 的虛擬化 Guest OS 並不會有 Boot: 讓我們可以加入核心參數. 我們必須在這裡來加入. Kernel parameters 核心參數有哪些可以使用請參考: http://www.kernel.org/pub/linux/kernel/people/gregkh/lkn/lkn_pdf/ch09.pdf

Network PXE boot
以目前KVM  FV-Fully Virtualized 支援的 Guest OS 幾乎是包含了市面常用的作業系統.

  • Linux 有 Debian , Fedora , Red Hat Enterprise Linux 以及 Suse Linux Enterprise Server.
  • Windows 有個人電腦使用的 XP , Vista 以及伺服器用的版本有 2000 , 2003 , 2008
  • 其他像是 MS-DOS , Novell Netware ,Free BSD , Open BSD 以及 Sun Solaris

4.virtual machine sotrage 
在新增 virtual machine 時虛擬磁碟的選擇有三種.每個都有優缺點你可以依據需求來做不同的選擇.

  • virtual disk – disk partition
    每個磁區 partition 都可以當成一個虛擬磁碟,最大的好處是效能最佳.但缺點就是要佔用一個 partition.

    xen_disk01

  • virtual disk – nonsparse image
    不需要何外切割 partition ,以 檔案(images) 的方式來當成虛擬磁碟.但是相對的效能比不上 partition 的好.

    xen_disk02

  • virtual disk – sparse image

    優點是檔案(images) 的大小是動態成長,一開始不會佔用所要求的空間,有多少才會要求多少!但是它的效能卻是最差的.但要注意系統的空間是否足夠,
    當空間不足讓 sparse image 動態成長時, Guest 可能會損毀!

    xen_disk03

Linux 下提供一個工具 "lomount" 可以讓我們 mount Virtual machine images(並不是只能針對 image 的檔案,也可以應用在 partition 上面),方法很簡單如下:
先看看目前有 Virtual machine image 的 partition 分割.

[root@benjr ~]# lomount -diskimage /PATH/TO/Image.file
Please specify a partition number.  Table is:
Num      Start -        End  OS Bootable
 1:      32256 -  106928128: 83 80
 2:  106928640 – 10479006208: 8e 0

不過這個工具不是萬能的他有很多狀況下是無法使用的.
partition ID(83) – ext2/ext3 可以但是 refeies 不行. partition ID(8e) – LVM 也是一樣不行.所以以上的條件只有 partition 2 可以使用.接下來使用下面的指令指定 partition 就可以讀取 Virtual machine image 的 partition 分割區內的資料.

[root@benjr ~]# lomount -diskimage /PATH/TO/Image.file -partition n /mnt

在 Guest OS 要開機前不要忘記 umount.

[root@benjr ~]# umount /mnt

5.Network
在 RHEL5 update4 KVM 下設定 Virtual machine 時 Network 有兩種選項. 1.Virtual network 2.Shared physical device 但預設的只有 Virtual network.
kvm04

先來看看在 RHEL5 update 4 KVM 的環境預設會建立一個 bridge,由 QEMU 所提供出的 virbr0 預設安裝 Virtual machine 時網路卡的選擇也就是這種 Virtual network .

  • Virtual network – virbr0
    1.QEMU 會在你的 Linux 產生一個 bridge 虛擬裝置 "virbr0" .virbr0 不只是個單純的 NAT 而已,他是一個 NAT + DHCP 的架構,所有的 Virtual machine 都會透過 virbr0 來指派一個私人網域 (private IP).預設為 192.168.122.2 ~ 192.168.122.254 (在他的設定檔中可以定義其 DHCP 可指定的 IP 範圍).
    2.其預設的 default gateway 為 192.168.122.1/24 ,所有在這架構下的 Virtual Machine 虛擬機器的封包都必須透過這 NAT 去連結到其他的網路.
    3. 如同一般的 NAT 所有的 Virtual Machine 虛擬機器都是被隱藏在 private 私人網域,所以外部不能直接連接到 Virtual Machine 虛擬機器上.
    kvm06
    這一個是由 Qemu 所產生所以設定檔存放在 /etc/libvirt/qemu/networks/default.xm

    <network>
    
      <name>default</name>
    
      <uuid>49a0ceb-5662-4a61-8149-98ea750d393b</uuid>
    
      <bridge name="virbr0" />
    
      <forward/>
    
      <ip address="192.168.122.1" netmask="255.255.255.0">
    
        <dhcp>
    
          <range start="192.168.122.2" end="192.168.122.254" />
    
        </dhcp>
    
      </ip>
    
    </network>
    

    其中的 ip address 是 default gateway IP,range 則是DHCP clients 所能使用的範圍,都可以依據需求做改變.

  • Shared physical device
    如果要使用第二種 "Shared physical device" 時需要經過手動設定才能使用.此時所有的 Virtual machine 的網路裝置就會像是串接在一個 Hub 或是 Switch 上,只要是同區段的 IP 都可以互通. 在 Linux 下網路的模式有一個東西叫做 Bridge mode,有點像將多個 NIC Adapter ports 透過一個虛擬出來的 Bridge(Switch) 全部串在一起,再透過一個虛擬出來的網路裝置出去,這就像是把 Linux 當成一個 switch 來使用了.
    在一般的 Linux 環境下的方法也很簡單:我們也可以透過下面幾個簡單的指令來產生自己所需要的 Bridge 裝置出來.下面的圖示你可以很清楚的看出來虛擬 NIC 和實體 NIC 是如何透過 bridge 模式串接在一起.
    kvm07
    1.目標是用 eth0 來產生一個 bridge(bri0)

    [root@benjr ~]# ifconfig eth0 0.0.0.0
    [root@benjr ~]# brctl addbr bri0
    [root@benjr ~]# brctl addif bri0 eth0
    

    2.看這一些 eth 是在哪一個 bridge 上.

    [root@benjr ~]# brctl show
    bridge name     bridge id               STP enabled     interfaces
    bri0            8000.001517785dd6       no              eth0
    virbr0          8000.000000000000       yes
    

    3.設定一組 IP ,方便遠端管理使用.

    [root@benjr ~]# ifconfig bri0 192.8.1.3
    [root@benjr ~]# ifconfig bri0
    bri0      Link encap:Ethernet  HWaddr 00:15:17:78:5D:D6 
              inet addr:192.8.1.3  Bcast:192.8.1.255  Mask:255.255.255.0
              inet6 addr: fe80::215:17ff:fe78:5dd6/64 Scope:Link
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:14767 errors:0 dropped:0 overruns:0 frame:0
              TX packets:34 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:0
              RX bytes:679328 (663.4 KiB)  TX bytes:9626 (9.4 KiB)
    

    4.最後 Allow IP forwarding

    [root@benjr ~]# vi /etc/sysctl.conf
    net.ipv4.ip_forward = 1
    [root@benjr ~]# sysctl –p
    

    之後所有設定在 eth0(bri0) 的 Virtual Machine 都可以互通了!!可以將剛剛的步驟寫在 /etc/rc.local,讓他在開機時候就會生效.
    5.reload libvirt

    [root@benjr ~]# service libvirtd reload
    

    如果要讓 Virtual Machine 可以立即選擇 "Shared physical device" 需將 libvirtd 的服務重新載入設定.
    kvm05

  • Set fixed MAC address for your virtual system

    另外最後的一個選項是我們自己指派給虛擬網卡一個 MAC address ,要設定虛擬網路裝置的 mac 他是有一個規則性的. mac :XY:XX:XX:XX:XX:XX ,mac 使用16進制來顯示 X 可為任何的16進制(0~9,A,B,C,D,E,F), Y 則只能使用 2, 6, A 或 E.

6.Memory and CPU
這裡主要就是設定 Virtual machine 的 Memory 以及 CPU 的多寡.
vcpu_vmem
CPU:

CPU 的設定比較簡單除了你可以看到目前系統邏輯 CPU 的數量外另一個選項即是你要指派給,Virtual machine 幾個 CPU ,不過在這裡我們無法針對Virtual machine 的 vcpu 對應到哪一個實體 CPU 必須在安裝完成之後透過 "#xm" 指令才能再去指派.
Memory:
一開始系統就會告訴你目前有多少的記憶體 "Total memory on host machine",當系統記憶體不足時 Virtual machine 是無法開啟的.在虛擬記憶體的設定選項有兩種,VM Max Memory 以及 VM Startup Memory
1.VM Max Memory 
這裡設定 Virtual machine 的記憶體最大可以用到多少,但是一開始並不會真的佔用這麼多記憶體,一開始是要看 VM Startup Memory 大小.我們可以透過修改 VM Startup Memory 的大小來讓 Virtual machine 線上變大縮小記憶體,最大就是不能超過 VM Max Memory 的大小.當然 VM Max Memory 也不能大於實際記憶體大小.記憶體設定大小單位為 MBytes
不過所有使用 #xm mem-set / mem-max 都是暫時性的,需要修改 /etc/xen/ 設定檔.或是使用 virt-manager 的介面來修改,下次開機才會保留設定值.
2. VM Startup Memory 
設定 Virtual machine 記憶體目前容量大小,設定單位為 MBytes

網友的想法

  1. 自動參照通知: KVM – RHEL5 update4 | Benjr.tw

發表迴響