Lab 1: Virtual Technelogy: Kernel-based Virtual Machine (KVM)

實驗描述

本實驗示範如何運用 Kernel-based Virtual Machine (KVM) 建立虛擬叢集環境.

實驗環境

理學大樓 1002 教室
Cloud-A01 ~ Cloud-D12
CPU AMD Phenom™ II X6 1065T Processor
Memory 8G
Disk spaces 500G、500G
O.S. Debian Wheezy
理學大樓 821 機房
CSIE-Cloud01 ~ CSIE-Cloud06
CPU AMD Opteron™ Processor 6128 * 2
(total 16 cpu cores)
Memory 32G
Disk spaces 500G、500G、1T
O.S. Debian wheezy
CSIE-Cloud07、CSIE-Cloud08
CPU AMD Opteron™ Processor 6234 * 2
(total 24 cpu cores)
Memory 32G
Disk spaces 500G、500G、1T
O.S. Debian wheezy
虛擬機環境 (作業環境)
Virtual Machine
Location 821 機房伺服器
CPU vcpu*2
Memory 4G
Disk spaces 50G (QCOW2 Format)
O.S. Debian Wheezy

實習簡介

本實作內容以 step-by-step 方式寫作,盡可能地讓同學們以複製貼上方式完成指令輸入。

上機實習時使用教室電腦,另外讓同學練習用的機器是機房所提供的虛擬機器。

練習完本實作之後,同學們應可以學會基本建立與操作虛擬機器。

環境參數

為了避免輸入錯誤以及方便區分 IP 使用環境,我們使用下列幾個按鈕來快速取代各個不同 IP。

Username:

Server IP address:

Host IP address:

Guest IP address:

Random MAC address:


實習內容

安裝 KVM

確認機器是否支援硬體虛擬化技術 VMX/SVM

egrep '(vmx|svm)' --color=always /proc/cpuinfo
flags : fpu de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx lm nopl pni cx16 popcnt hypervisor lahf_lm cmp_legacy svm abm sse4a

安裝 KVM 主程式及相關套件

sudo aptitude update
sudo aptitude install qemu-kvm uml-utilities socat screen

檢查 kvm 使用之 kernel module 是否載入

lsmod | grep kvm
kvm_amd 47218 0 kvm 287662 1 kvm_amd

若沒有自動載入可以下列指令手動載入 (svm 對應到 kvm_amd, vmx 則是 kvm_intel)

sudo modprobe kvm_amd

將使用者帳號加入 kvm 群組中

sudo adduser [USERNAME] kvm
Adding user `[USERNAME]' to group `kvm' ... Adding user [USERNAME] to group kvm Done.

重新登入系統或重新開機

sudo init 6

建立存放 KVM 相關檔案目錄

sudo mkdir /src3/KVM
sudo chown [USERNAME]:[USERNAME] /src3/KVM
cd /src3/KVM

建立第一個虛擬機器

建立虛擬硬碟,大小為 5G。

mkdir img
cd img
qemu-img create vm001.img 5G
Formatting 'vm001.img', fmt=raw size=5368709120

下載安裝光碟,上課實習我們從 Server 複製光碟以免浪費頻寬。

wget http://mirror.cs.nchu.edu.tw/debian-7.1.0-amd64-netinst.iso

若在校外我們可以從 Debian 官方網站下載

wget http://cdimage.debian.org/debian-cd/7.1.0/amd64/iso-cd/debian-7.1.0-amd64-netinst.iso

安裝作業系統

kvm -m 1024M -cdrom debian-7.1.0-amd64-netinst.iso -hda vm001.img

安裝過程請參考以下各圖(圖文不相同時,以文字為主!)

01

安裝首頁,選擇 install

關閉虛擬機器
:接下來指令是下在虛擬機器當中!

su
init 0

建置虛擬網路環境

安裝 Open vSwitch

更改 sources.list 增加 deb-src 來源,以便抓取原始碼編譯。

sudo nano /etc/apt/sources.list
deb http://mirror.cs.nchu.edu.tw/debian/ wheezy main contrib non-free deb http://mirror.cs.nchu.edu.tw/debian/ wheezy-updates main contrib non-free deb http://mirror.cs.nchu.edu.tw/debian/ testing main contrib non-free deb-src http://mirror.cs.nchu.edu.tw/debian/ wheezy main
sudo aptitude update
sudo aptitude install build-essential module-assistant git
sudo apt-get build-dep openvswitch
git clone git://openvswitch.org/openvswitch

將 Open vSwitch 原始碼編譯成為 Debian 安裝檔格式 (*.deb)

cd openvswitch
dpkg-buildpackage -b
echo $?
0

安裝 Open vSwitch 及相依套件

cd ..
sudo aptitude install racoon ipsec-tools python-twisted-web dkms uuid-runtime
sudo dpkg -i openvswitch-switch_*_amd64.deb openvswitch-common_*_amd64.deb openvswitch-datapath-source_*.deb openvswitch-datapath-dkms_*_all.deb openvswitch-test_*_all.deb ovsdbmonitor_*_all.deb openvswitch-ipsec_*_amd64.deb python-openvswitch_*_all.deb openvswitch-controller_*_amd64.deb openvswitch-pki_*_all.deb

自動編譯安裝 module

sudo module-assistant auto-install openvswitch-datapath
lsmod | grep openvswitch
openvswitch 67196 0 gre 12652 1 openvswitch libcrc32c 12426 1 openvswitch

啟動 Open vSwitch 並設定 IP address

sudo ovs-vsctl add-br br0
sudo ovs-vsctl add-port br0 eth0; sudo ifconfig eth0 0.0.0.0; sudo ifconfig br0 [Host-IP]; sudo route add default gw [Gateway-IP (ServerIP)]
sudo ovs-vsctl show
cc1170c9-0f10-45db-87af-44cf82b714b2 Bridge "br0" Port "br0" Interface "br0" type: internal Port "eth0" Interface "eth0" ovs_version: "2.0.90"
ifconfig

建立虛擬網路卡與虛擬機器連接

sudo chmod 666 /dev/net/tun
sudo tunctl -u cloud -t tap0
sudo ifconfig tap0 up
sudo ovs-vsctl add-port br0 tap0

修改 KVM 開機參數,令其使用 Open vSwitch 連接網路

kvm -m 1024M -net nic,vlan=0,netdev=tap0,macaddr=[MAC-address],model=virtio -netdev tap,id=tap0,ifname=tap0,script=no -curses -hda vm001.img

註1:不要改變 terminal size,在安裝 linux-headers 之前無法處理 resize event!
註2:接下來指令是下在虛擬機器當中!

先使用 cloud 帳號登入虛擬機器,接著設定虛擬機器 IP address。

su
nano /etc/network/interfaces
# This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). # The loopback network interface auto lo iface lo inet loopback # The primary network interface auto eth0 iface eth0 inet static address [guest-IP] netmask 255.255.255.0 gateway [Gateway-IP]
nano /etc/resolv.conf
nameserver 140.120.13.1 nameserver 140.120.1.2 nameserver 8.8.8.8
init 6

再次使用 cloud 帳號登入虛擬機器,測試網路是否有通。接著安裝 linux-headers 解決視窗 resize 問題。

ping www.google.com
su
aptitude update
aptitude install linux-headers-amd64
init 6

重開機後試著調整視窗看看是否正常,確認正常之後我們將虛擬機器關閉。

su
init 0

恢復網路環境並與 Open vSwitch 斷開

關閉虛擬網卡

sudo ovs-vsctl del-port tap0
sudo ifconfig tap0 down
sudo tunctl -d tap0
Set 'tap0' nonpersistent

若系統中已無其他 VM 存在時,關閉 Open vSwitch 歸還系統資源。

sudo ovs-vsctl del-port br0 eth0; sudo ifconfig br0 down; sudo ovs-vsctl del-br br0; sudo ifconfig eth0 [Host-IP]; sudo route add default gw [Gateway-IP (ServerIP)]
sudo ovs-vsctl show

使用 Shell Script 來管理虛擬機器 (更新中)

做到這裡大家應該發現到,開關虛擬機器所需指令以及參數眾多,徒手下達指令開關機不僅沒有效率,也容易出錯。 因此,通常我們會使用 Shell Script 來管理虛擬機器。
:接下來的步驟必須完成先前內容才可正常執行!


Assignment#1

在分配的機器中建立虛擬機器,並且在其上架設網頁伺服器。網頁內容請註明學號姓名,並撰寫心得或對課程的建議 (不限字數)。


註:助教會不定時修改網頁注意事項,遇到問題不妨先重新整理網頁更新內容 ^.^
Chi-Sheng Su