應用 OpenNebula 3.8.3 管理 KVM 建置 IaaS Private Cloud 於 F102@ILT

2013/08/16 更新新版本安裝文;因為這篇是純筆記寫的很亂

======= 2013/04/25 =======
個人意見補充 ... OpenNEbula 適用於要提供 Iaas 服務給使用者隨選隨用 ...
如果只是要虛擬化叢集,基本上只要裝 kvm 還有 libvirt 就可以囉 !
======= 2013/04/08 =======
如何在 DRBL 的 Client 端做 Bridge 以便外部直接 ssh 到 client 端產生的 VM 請參考:
DRBL Client 上的 OpenNEbula (KVM) 如何做 Bridge
=======2013/03/30 =======
更新整合 DRBL成功

本文以安裝 OpenNEbula 及其 Sun-Stone 為主,安裝完後因為映像檔建置問題,所以採用libvirt來安裝作業系統,再將其當做ONE的映像檔使用;最後再整合至 DRBL;建議一定要先整個看完理解,再依自己需求來建置調整。
 
首先是我建置的系統環境及硬體配備 (Server)
Pentium(R) Dual-Core  CPU      E6500  @ 2.93GHz
MemTotal:        8059088 kB
Linux twman.org 2.6.32-358.2.1.el6.x86_64 #1 SMP Wed Mar 13 00:26:49 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
OpenNEbula-3.8.3
QEMU PC emulator version 0.12.1 (qemu-kvm-0.12.1.2), Copyright (c) 2003-2008 Fabrice Bellard
ruby 1.8.7 (2011-06-30 patchlevel 352) [x86_64-linux]
java version "1.6.0_24"
OpenJDK Runtime Environment (IcedTea6 1.11.9) (rhel-1.57.1.11.9.el6_4-x86_64)
OpenJDK 64-Bit Server VM (build 20.0-b12, mixed mode)
Python 2.6.6
CentOS release 6.4 (Final)

接著簡要說明一下 ONE 是什麼 ....
OpenNebula (ONE) 是一個 Open Source,可以動態佈署虛擬機器在一群實體資源上,將一群實體叢集轉換成彈性的虛擬基礎設備,且可動態調適工作量的改變;可以建構任何類型的 IaaS 雲,包括: 私有雲、公開雲和混合雲;支援 KVM、Xen 和VMWare (有VirtualBox的外掛)。

那麼 IaaS 可以幹麼呢 ?
提供基礎設施(如作業系統、資料庫等)服務,像旅館一樣,分隔成不同的房間供企業租用;提供使用者底層,接近於直接操作硬體的服務介面,以獲得設施的運算能力或儲存能力。 如Amazon EC2/VPC(Virtual Private Cloud), IBM Cloud 等

那為啥我需要弄這個呢 ? 很簡單 ... 除了可以用在我的 MiT
還可做出虛擬教室給系上修課學生使用哩 !



官方網站: http://opennebula.org

其實我同時也在裝 Open Stack ,無奈裝到一半失敗了
而且光是裝的過程就頗複雜,只好改玩 OpenNebula ... 囧

想再多瞭解可以看看這篇介紹


好啦 ~ 不囉唆 ~ 馬上開始吧 ! ... 


首先要做的是先更新 !
記得檢查 CPU 支不支援 (出現 vmx 是 intel 或 svm 是 AMD 就支援) ! 然後安裝 EPEL

# yum update -y
# egrep '^flags.*(vmx|svm)' /proc/cpuinfo


# wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
# rpm -Uvh epel-release-6-8.noarch.rpm

接著要裝 KVM 相關套件

# yum install kvm kmod-kvm qemu-kvm qemu-kvm-tools uml_utilities opennebula-node-kvm -y
# modprobe kvm-intel


檢查一下 ~ 醬就算是把 KVM 給裝好了 !

# lsmod | grep kvm

kvm_intel 52762 0
kvm 312405 1 kvm_intel
# modprobe -l | grep kvm
kernel/arch/x86/kvm/kvm.ko
kernel/arch/x86/kvm/kvm-intel.ko
kernel/arch/x86/kvm/kvm-amd.ko

接著是要安裝 CentOS-testing repository 來使用

# cd /etc/yum.repos.d/
# curl -O http://dev.centos.org/centos/6/opennebula/opennebula-testing.repo
# yum repolist


Server 端請繼續往下安裝操作 ( Client 端則只需要到這邊 )



接著就是到官網填資料看你的環境下載軟體,並且解壓縮
我用的是 " CentOS-6.3-opennebula-3.8.3.tar.gz "

http://downloads.opennebula.org


安裝 OpenNEbula 套件

# tar -zxf CentOS-6.3-opennebula-3.8.3.tar.gz
# cd opennebula-3.8.3/
# yum --nogpgcheck localinstall opennebula-3.8.3-1.x86_64.rpm -y
# yum --nogpgcheck localinstall opennebula-java-3.8.3-1.x86_64.rpm -y
# yum --nogpgcheck localinstall opennebula-sunstone-3.8.3-1.x86_64.rpm -y


# yum install opennebula-node-kvm -y

安裝 novnc 套件 

# cd /usr/share/one 
# ./install_novnc.sh


編輯修改 SElinux 設定為 disabled (關閉) #vi /etc/sysconfig/selinux

記得在 root 底下用 visudo 把下面這行註解掉,如果沒改會不能 ssh 登入遠端
#Defaults requiretty

# chkconfig opennebula-sunstone on
# chkconfig opennebula on

基本上,到這邊已經重新啟動後就算安裝完成了 ! 您說有沒有超簡單的啊 ?
但是為了避免等等可能是開不起這個網頁,請先注意一下您的 /etc/one/sunstone-server.conf,修改一下裡面的設定為您的對外 IP,順便補一下 iptables

# Server Configuration
#
:host: XXX.XXX.XXX.XXX
:port: 9869

接著把這兩個規則加到 /etc/rc.local
# iptables -I INPUT -p tcp --dport 9869 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
# iptables -I INPUT -p tcp --dport 29876 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT



另外等會網頁登入的帳號 oneadmin 是 OpenNEbula 自己生出來的 ... 所以密碼是啥啊 ? ( 這個密碼不是 CentOS 上的 oneadmin 密碼 !);需注意的是請把 oneadmin 新增到一個新的 oneadmin 及 kvm 和 libvirtd 的群組

請直接把這個檔案的內容改成明碼的密碼 !

[oneadmin@PLUS ~]$ vi .one/one_auth
oneadmin:7062b6dc671a29c1c3524ddc74fed169

萬一你跟我一樣很急的用下面的方法改密碼結果碰上問題
[oneadmin@ONE ~]$ oneuser passwd oneadmin password

參考解決: http://comments.gmane.org/gmane.comp.distributed.opennebula.user/4626
這時候可以重開機,然後切換到 oneadmin 檢查一下吧 ...

# su - oneadmin

# onevm list


OpenNebula Sunstone
The Cloud Operations Center 3.2



如果可以登入且看到下面就算正常了 !


記得網頁介面先改中文啊 !


接著準備要開始嘗試建置後端主機叢集 ... 結果馬上又碰到這個問題 ...

[HostPoolInfo] User couldn't be authenticated, aborting call.


解法是要先把機器加入 pool 裡,這邊就不多加解釋 onehost 指令怎樣使用了 (其實是我也不太知道怎樣才正確操作 ~ xD ) ... 請自行想辦法;這邊我直接使用 SunStone 操作 ....

=== 2013/04/14補充 DRBL 上 monitor node 要怎做才對 ===

Sun Apr 14 01:49:28 2013 [InM][I]: Monitoring host ONE-111 (53)
Sun Apr 14 01:49:28 2013 [InM][I]: Command execution fail: 'if [ -x "/var/tmp/one/im/run_probes" ]; then /var/tmp/one/im/run_probes kvm 53 ONE-111; else exit 42; fi'
Sun Apr 14 01:49:28 2013 [InM][I]: Host key verification failed.
Sun Apr 14 01:49:28 2013 [InM][I]: ExitCode: 255
Sun Apr 14 01:49:28 2013 [InM][E]: Error monitoring host 53 : MONITOR FAILURE 53 -

剛把 node 加入 主機 頁要監控時都會發生如上的錯誤 ! 這時候請先

1. 先交換 oneadmin 的 ssh key;也就是把 server 上的 oneadmin 帳號的 id_rsa.pub 寫到 node 端的 authorized_keys,並且用 oneadmin 來 ssh 到該 node 端一次,讓 hostkey 可以寫入

直接在 server 上下 cat /var/lib/one/.ssh/id_rsa.pub >> /tftpboot/nodes/192.168.0.11/var/lib/one/.ssh/authorized_keys 就可以了

2. 這時候可能會發生 node 端狀態已經 on,但是其 cpu 跟 memory 等資訊卻為 0,以及如下的訊息。

Sun Apr 14 01:59:28 2013 [InM][I]: Monitoring host ONE-111 (53)
Sun Apr 14 01:59:28 2013 [InM][I]: /var/tmp/one/im/run_probes: line 19: /var/tmp/one/im/../scripts_common.sh: 沒有此一檔案或目錄
Sun Apr 14 01:59:28 2013 [InM][I]: ls: cannot access *: No such file or directory

這是因為少了兩個 script 的執行檔,把它們 cp 過去,然後在 server 端下 onehost sync 這樣就可以順利搞定了

cp /var/tmp/one/scripts_common.* /tftpboot/nodes/192.168.0.11/var/tmp/one/
chown -R oneadmin:oneadmin /tftpboot/nodes/192.168.0.11/var/tmp/one/
onehost sync

=== 2013/04/14補充 DRBL 上 monitor node 要怎做才對 ===


白話文說明:A 要 ssh 到 B 不用密碼,就把 A 的 公鑰 加到 B 的 authorized_keys,以這邊而言,就是要把 server 上的 oneadmin 用 ssh-keygen 所產生的 id_rsa.pub 放到 client 端的 /var/lib/one/.ssh/authorized_keys 裡

(先到 oneadmin 家目錄底下)
[oneadmin@ONE ~]$ ssh-keygen

(接著在root家目錄底下)
# ssh-keygen
# cp .ssh/id_rsa.pub .ssh/authorized_keys
# cat /var/lib/one/.ssh/id_rsa.pub >> .ssh/authorized_keys
# cp .ssh/authorized_keys /var/lib/one/.ssh/authorized_keys

這時候很可能還是 on 不起來,然後出現下面的問題,特別是粗體那邊

[InM][I]: Monitoring host ONE.TWMAN.ORG (3)
[InM][I]: Command execution fail: 'if [ -x "/var/tmp/one/im/run_probes" ]; then /var/tmp/one/im/run_probes kvm 3 ONE.TWMAN.ORG; else exit 42; fi'
[InM][I]: Host key verification failed.
[InM][E]: Error monitoring host 5 : MONITOR FAILURE 5 Could not update remotes
[InM][I]: ExitCode: 255
[InM][E]: Error monitoring host 3 : MONITOR FAILURE 3 -


======== 2013/03/29 更新 ========
這邊搭配整合 DRBL 時也會一樣有的問題:Host Key (或者說是公鑰)

首先把這個 CP 到每個 nodes 裡

# cp /var/tmp/one/im/run_probes /tftpboot/nodes/192.168.0.1/var/tmp/one/im/
# cp /var/tmp/one/im/run_probes /tftpboot/nodes/192.168.0.2/var/tmp/one/im/
# cp /var/tmp/one/im/run_probes /tftpboot/nodes/192.168.0.3/var/tmp/one/im/
# cp /var/tmp/one/im/run_probes /tftpboot/nodes/192.168.0.4/var/tmp/one/im/
# cp /var/tmp/one/im/run_probes /tftpboot/nodes/192.168.0.5/var/tmp/one/im/
# cp /var/tmp/one/im/run_probes /tftpboot/nodes/192.168.0.6/var/tmp/one/im/
# cp /var/tmp/one/im/run_probes /tftpboot/nodes/192.168.0.7/var/tmp/one/im/
# cp /var/tmp/one/im/run_probes /tftpboot/nodes/192.168.0.8/var/tmp/one/im/
# cp /var/tmp/one/im/run_probes /tftpboot/nodes/192.168.0.9/var/tmp/one/im/
# cp /var/tmp/one/im/run_probes /tftpboot/nodes/192.168.0.10/var/tmp/one/im/
# cp /var/tmp/one/im/run_probes /tftpboot/nodes/192.168.0.11/var/tmp/one/im/
# cp /var/tmp/one/im/run_probes /tftpboot/nodes/192.168.0.12/var/tmp/one/im/
# cp /var/tmp/one/im/run_probes /tftpboot/nodes/192.168.0.13/var/tmp/one/im/
# cp /var/tmp/one/im/run_probes /tftpboot/nodes/192.168.0.14/var/tmp/one/im/
# cp /var/tmp/one/im/run_probes /tftpboot/nodes/192.168.0.15/var/tmp/one/im/
# cp /var/tmp/one/im/run_probes /tftpboot/nodes/192.168.0.16/var/tmp/one/im/
# cp /var/tmp/one/im/run_probes /tftpboot/nodes/192.168.0.17/var/tmp/one/im/
# cp /var/tmp/one/im/run_probes /tftpboot/nodes/192.168.0.18/var/tmp/one/im/

# chown -R oneadmin:oneadmin /tftpboot/nodes/192.168.0.1/var/tmp/one/
# chown -R oneadmin:oneadmin /tftpboot/nodes/192.168.0.2/var/tmp/one/
# chown -R oneadmin:oneadmin /tftpboot/nodes/192.168.0.3/var/tmp/one/
# chown -R oneadmin:oneadmin /tftpboot/nodes/192.168.0.4/var/tmp/one/
# chown -R oneadmin:oneadmin /tftpboot/nodes/192.168.0.5/var/tmp/one/
# chown -R oneadmin:oneadmin /tftpboot/nodes/192.168.0.6/var/tmp/one/
# chown -R oneadmin:oneadmin /tftpboot/nodes/192.168.0.7/var/tmp/one/
# chown -R oneadmin:oneadmin /tftpboot/nodes/192.168.0.8/var/tmp/one/
# chown -R oneadmin:oneadmin /tftpboot/nodes/192.168.0.9/var/tmp/one/
# chown -R oneadmin:oneadmin /tftpboot/nodes/192.168.0.10/var/tmp/one/
# chown -R oneadmin:oneadmin /tftpboot/nodes/192.168.0.11/var/tmp/one/
# chown -R oneadmin:oneadmin /tftpboot/nodes/192.168.0.12/var/tmp/one/
# chown -R oneadmin:oneadmin /tftpboot/nodes/192.168.0.13/var/tmp/one/
# chown -R oneadmin:oneadmin /tftpboot/nodes/192.168.0.14/var/tmp/one/
# chown -R oneadmin:oneadmin /tftpboot/nodes/192.168.0.15/var/tmp/one/
# chown -R oneadmin:oneadmin /tftpboot/nodes/192.168.0.16/var/tmp/one/
# chown -R oneadmin:oneadmin /tftpboot/nodes/192.168.0.17/var/tmp/one/
# chown -R oneadmin:oneadmin /tftpboot/nodes/192.168.0.18/var/tmp/one/

接著登入到 client,分別用 root 及 oneadmin 生 ssh-key (依上面補充,root似乎不用?)

[root@ONE-107 ~]# /etc/init.d/libvirtd restart
[root@ONE-107 ~]# rm -rf .ssh/*
[root@ONE-107 ~]# ssh-keygen
[oneadmin@ONE-107 ~]$ rm -rf .ssh/*
[oneadmin@ONE-107 ~]$ ssh-keygen

接著一樣是 ssh key 每台client跟host的交換 ... 我想應該有更快的方法,只是我沒暫沒想到,基本上就是要把全部 client 跟 server 上 root 跟 oneadmin 的 key 都變成可以不用密碼就登入;一樣是每台都要做一次

# cat /tftpboot/nodes/192.168.0.1/root/.ssh/id_rsa.pub >> .ssh/authorized_keys
# cat /tftpboot/nodes/192.168.0.1/var/lib/one/.ssh/id_rsa.pub >> .ssh/authorized_keys
# cp .ssh/authorized_keys /tftpboot/nodes/192.168.0.1/var/lib/one/.ssh/
# cp .ssh/authorized_keys /tftpboot/nodes/192.168.0.1/root/.ssh/
# cp .ssh/authorized_keys /var/lib/one/.ssh/

做完後再分別由 host 端用 oneadmin 來 ssh 到 client 端的 oneadmin 以及從 client 端 用 oneadmin 來 ssh 到 host 端端的 oneadmin;如果都不用密碼就可以登入,這時候再到 Sun-Stone 裡新增該 Client 端便可以 on 了 !

接著就選擇基礎設施,然後建一個主機叢集,接著再建一個主機,記得使用 hostname 哦 .... 做好後要稍稍等一下,應該可以順利 on 起來。

Monitoring host one.twman.org (0)
Command execution fail: 'if [ -x "/var/tmp/one/im/run_probes" ]; then /var/tmp/one/im/run_probes kvm 0 one.twman.org; else exit 42; fi'
error: Failed to connect socket to '/var/run/libvirt/libvirt-sock': No such file or directory
error: failed to connect to the hypervisor
Error executing kvm.rb
ExitCode: 255
Error monitoring host 0 : MONITOR FAILURE 0 Error executing kvm.rb

萬一是像上面找不到 /var/run/libvirt/libvirt-sock 請再重開機一次或是重啟動 libvirtd

# ps -A -f | grep libvirt
nobody 2034 1 0 Mar14 ? 00:00:00 /usr/sbin/dnsmasq --strict-order --local=// --domain-needed --pid-file=/var/run/libvirt/network/default.pid --conf-file= --except-interface lo --bind-interfaces --listen-address 192.168.122.1 --dhcp-range 192.168.122.2,192.168.122.254 --dhcp-leasefile=/var/lib/libvirt/dnsmasq/default.leases --dhcp-lease-max=253 --dhcp-no-override --dhcp-hostsfile=/var/lib/libvirt/dnsmasq/default.hostsfile --addn-hosts=/var/lib/libvirt/dnsmasq/default.addnhosts
oneadmin 25660 1 0 12:33 ? 00:00:00 libvirtd --daemon
root 26268 24838 0 12:38 pts/0 00:00:00 grep libvirt
或者是檢查一下這邊的權限


[oneadmin@PLUS ~]$ mkdir -p /var/tmp/one
[oneadmin@PLUS ~]$ chown -R oneadmin:oneadmin /var/tmp/one
[oneadmin@PLUS ~]$ chown -R oneadmin:oneadmin /var/lib/one/


[oneadmin@ONE ~]$ onehost list
ID NAME CLUSTER RVM ALLOCATED_CPU ALLOCATED_MEM STAT
2 ONE.TWMAN.ORG F102 0 0 / 200 (0%) 0K / 7.7G (0%) on


弄到這邊應該要可以正常 on 才對 !
如果 DRBL也已經把Client 給 on 起來就會看到像下面這樣全部弄起來的狀況

準備建立映像檔準備當做 VM 使用;映像檔我是直接到 CentOS 網站 " ftp://ftp.twaren.net/Linux/CentOS/6.4/isos/x86_64/ " 下載安裝光碟,然後設定進 OpenNEbula,種類當然就是選 CD-ROM,然後會看到狀態是 Locked,大概要近 10分鐘才會變 READY ....


再來是建立範本 .... 因為是用安裝光碟所以記得注意處理器架構,還有開機啟動裝置要選 cdrom,網路介面則選剛剛新增的,圖形顯示介面則是 vmc,接聽ip則為 0.0.0.0


現在來到最後一關了 .... 建立虛擬機器


正確的log會像下面這樣 ....

New VM state is PENDING
New VM state is ACTIVE.
New VM state is PROLOG.
Virtual Machine has no context
ln: Linking /var/lib/one/datastores/1/4cc37b77263823e504abb0c85ce3ca51 in plus.twman.org:/var/lib/one//datastores/0/0/disk.0
ExitCode: 0
New VM state is BOOT
Generating deployment file: /var/lib/one/vms/0/deployment.2
ExitCode: 0
Successfully execute network driver operation: pre.

第一次虛擬機器一定會失敗,看 " /var/log/one/0.log " 尋找原因,
可以看到說找不到 QEMU,做個 ln -s 就可以搞定,

Command execution fail: cat << EOT | /var/tmp/one/vmm/kvm/deploy /var/lib/one//datastores/0/0/deployment.2 plus.twman.org 6 plus.twman.org
error: Failed to create domain from /var/lib/one//datastores/0/0/deployment.2
error: cannot open file '/var/lib/one//datastores/0/6/disk.0': No such file or directory
error: Cannot find QEMU binary /usr/bin/kvm: No such file or directory
Command execution fail: 'if [ -x "/var/tmp/one/im/run_probes" ]; then /var/tmp/one/im/run_probes kvm 0 plus.twman.org; else exit 42; fi'

因為 /etc/one/vmm_exec/vmm_exec_kvm.conf 裡設定是 /usr/libexec/qemu-kvm 而不是 /usr/bin/kvm

# ln -s /usr/libexec/qemu-kvm /usr/bin/kvm


順利的話應該可以看到下面的安裝畫面 ... 可惜 ...


======== 2013/03/30 更新 使用DRBL時Client要mount========
幫 host 上 的 /var/lib/one/datastores 用 NFS 掛載到 Client,在 DRBL 下可以直接用 drbl-doit 來操作或是手動下指令

drbl-doit echo 192.168.0.110:/var/lib/one/datastores /var/lib/one/datastores nfs rw,hard,intr 0 0 >> /etc/fstab

echo 192.168.0.110:/var/lib/one/datastores /var/lib/one/datastores nfs rw,hard,intr 0 0 >> /tftpboot/nodes/192.168.0.18/etc/fstab

還有不能忘記要在 host 端上的 /etc/exports 加上這段 /var/lib/one/datastores 192.168.0.18(rw,sync,no_root_squash,no_subtree_check)

以及打開 iptables
echo iptables -I INPUT -p tcp --dport 29876 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT >> /tftpboot/nodes/192.168.0.1/etc/rc.local


到這邊 ... VM 開機時都可能會碰上這樣的問題


Error deploying virtual machine: Could not create domain from /var/lib/one/datastores/0/2/deployment.4


查了一下 .... 記得檢查一下這三個檔案

/etc/polkit-1/localauthority/50-local.d/50-org.libvirt.unix.manage-opennebula.pkla
/etc/libvirt/libvirt.conf
/etc/polkit-1/localauthority.conf.d/50-localauthority.conf

# grep -vE '^($|#)' /etc/libvirt/qemu.conf user = "oneadmin" group = "oneadmin" dynamic_ownership = 0 # grep -vE '^($|#)' /etc/libvirt/libvirtd.conf listen_tls = 0 listen_tcp = 1 mdns_adv = 0 unix_sock_group = "oneadmin" unix_sock_rw_perms = "0777" auth_unix_ro = "none" auth_unix_rw = "none"

這裡有解釋: http://opennebula.org/documentation:archives:rel3.4:kvmg#kvm_configuration

檢查這三個檔案內容有沒有跟下面圖顯示的一樣
通常是要在 /etc/libvirt/libvirt.conf 裡最下方修改為
其中那個 group=oneadmin就是前面提到要新增的群組

uri_default = "qemu+ssh:///system"
unix_sock_group = "oneadmin"
unix_sock_rw_perms = "0777"
listen_tcp = 1
 

不知為啥因為找不到硬碟所以一直不能安裝 ... 我只好改下載下面這個 ... 然後 給它掛上去,就可以正常開機了耶 !

# wget https://marketplace.c12g.com/appliance/4fc76a938fb81d3517000002/download


殘念的是不知為啥搞不定 root 的密碼 ... 0rz ... 為啥大家都不寫出來到底是啥啊 ?


======== 2013/03/21 更新 ========
因為用 SunStone 來安裝 CentOS-6.3-x86_64-bin-DVD1.iso 一直找不到硬碟
只好改用 kvm 指令建一個 10 GB 大小的區塊
然後再安裝 CentOS-6.3-x86_64-bin-DVD1.iso

# kvm create -f raw centos.img 10G
# kvm -cdrom CentOS-6.3-x86_64-bin-DVD1.iso -hda centos.img -boot d -m 1024 -localtime

這邊要補充一下,因為我是裝 Basic Server 的
所以諸如下面這邊會用到的 vncserver 等都沒有,所以 .... 要多補一下動作

# yum groupinstall Desktop -y
# yum install tigervnc-server xorg-x11-fonts-Type1 vnc gcc kernel-devel build -y


最後再下這個指令 ... 以及 vncviewer 就可以登入進去囉 !

# kvm -hda centos.img -boot d -m 1024 -localtime
 


當然,最後也要 try 一下把這個映像檔弄到 SunStone 上面能不能正常啟動 ....
答案當然是可以啦 ! 嘿嘿嘿 ....


只是到了這邊還有個問題 .... 唉 ! 就是 KVM 上面的虛擬網路的設定 ... 0rz
看樣子,還需要點時間解決啊 !



這邊可以發現將 VM Guest 上的 eth0 設為自動取得
會變成 10.0.2.15 ... 正當想不透怎樣連線時發現 ....


預設的 KVM 網卡用 DHCP 取得 IP 會拿到 10.0.2.15 其 Gateway 是 10.0.2.2
這時候的設定應該是可以對外連線的
值得注意的是 ICMP 對外預設是關的 .... 所以對外 ping 都不會有反應啊 !
真的是囧爆了啊 !


只是為了整個深入理解 KVM 上的網路設定 ... 諸如 NAT 之類的
於是我決定自己好好理解一下 virt-manager (http://libvirt.org)這玩意

如何在 DRBL 的 Client 端做 Bridge 以便可以外部直接 ssh 到 client 端產生的 VM 請參考另外一篇文章:
DRBL Client 上的 OpenNEbula (KVM) 如何做 Bridge
http://blog.twman.org/2013/04/DRBL-Bridge-OpenNEbula.html

# yum install virt-manager -y

..... 題外話補充 .....
有個東西叫做簡單龍雲端服務,從 2/27 開始聯絡 ...生出公文去邀請 ...
3/4公文校內流程跑完 ... 3/11 對方內部公文流程完成批示許可 ...
可不能一直等 ! 只好硬著頭皮自己動手 ...

嘆 ~ 頓時讓我想起 ... 當初這種繁雜的手續就不知搞瘋我幾次了 !

不過其實是我也用不到說給使用者自己建 VM 的功能 ... 也用不到啥自動安裝 ...
至少現階段我需要的是一堆 Cent OS 給學生操作練習
下一步驟則是我需要自己建一些 WINDOWS VM 來中毒 ...


然後到本機端下指令啟用 virt-manager

# virt-manager


接著就是一步步自己做一個 VM 吧 !
 

一開始就是先挑你要用什麼安裝系統
 

可以看到選 ISO/CDROM 或是 FTP 跟 PXE 甚至直接套用現有的 映像檔


接著是設定你想要用多少 CPU 跟 記憶體
(跟ONE比較起來就是ONE可以設定只用 0.x個CPU)


最後則是設定硬碟空間大小


接著就是非常簡單的 Cent OS 6.3 系統安裝了 !
需要注意的是,這邊記得設定網路時,IP 設為 DHCP 哦


系統裝好後還要記得把 /etc/sysconfig/network-script/ifcfg-eth0 的 MAC 值給清掉
還有 清掉 /etc/udev/rules.d/70-persistent-net.rules 裡面的值
安裝完後才能當做範本


最後 Host 端要再補上下面的 iptables 設定

iptables -A INPUT -p tcp --dport 501 -j ACCEPT
iptables -t nat -A PREROUTING -d xxx.xxx.xxx.xxx -p tcp -m tcp --dport 501 -j DNAT --to-destination 192.168.122.3:22
iptables -t nat -A POSTROUTING -s 192.168.122.0/255.255.255.0 -d 192.168.122.3 -p tcp -m tcp --dport 22 -j SNAT --to-source 192.168.122.1

到這邊,用 libvirt: The virtualization API 來虛擬化算是搞定囉 ! 對外對內也都可以連線哩 !


這時,再回頭看看 ONE 上面的 Sun-Stone ... 選擇剛剛安裝完的 image 建立映像檔 ...
 

接著再設定為範本 ... 這邊要注意的是 IP 可能需要透過 noVNC手動進去調整一下 !



簡單講就是 VM 啟動後,去把 IP 改一下就對了,至少對我而言目前這樣就夠用了 !


在 ONE 上如果要一個 template 建多個 VM 出來用 ! 還要再多補這個動作

[oneadmin@plus ~]$ oneimage list
[oneadmin@plus ~]$ oneimage nonpersistent VM_ID



或者是直接在 Sun-Stone 上的映像檔處不要把存續性打勾
在 host 上的 virt-manager 是同時可以看到 ONE 上啟動的 VM 哩 !


到這邊,基本上就是已經大功告成可以打完收工了 ....
剩的就是把它整合到 DRBL 裡變成可以 Cluster,還有整合到我的 MiT 啦 !

最後來一個自己手殘硬是用 NAS 當做 datastores ... 每次 deploy 動不動就是一小時以上 Mon Apr 15 23:20:45 2013 [DiM][I]: New VM state is ACTIVE.
Mon Apr 15 23:20:45 2013 [LCM][I]: New VM state is PROLOG.
Mon Apr 15 23:20:45 2013 [VM][I]: Virtual Machine has no context
Tue Apr 16 00:58:58 2013 [TM][I]: clone: Cloning /var/lib/one/datastores/1/2f66abca85ca784a580529637034850e in ONE-118:/var/lib/one/datastores/0/28/disk.0
Tue Apr 16 00:58:58 2013 [TM][I]: ExitCode: 0
Tue Apr 16 00:58:59 2013 [LCM][I]: New VM state is BOOT
Tue Apr 16 00:58:59 2013 [VMM][I]: Generating deployment file: /var/lib/one/vms/28/deployment.0
Tue Apr 16 00:58:59 2013 [VMM][I]: ExitCode: 0
Tue Apr 16 00:58:59 2013 [VMM][I]: Successfully execute network driver operation: pre.
Tue Apr 16 00:59:00 2013 [VMM][I]: ExitCode: 0
Tue Apr 16 00:59:00 2013 [VMM][I]: Successfully execute virtualization driver operation: deploy.
Tue Apr 16 00:59:00 2013 [VMM][I]: ExitCode: 0
Tue Apr 16 00:59:00 2013 [VMM][I]: Successfully execute network driver operation: post.
Tue Apr 16 00:59:01 2013 [LCM][I]: New VM state is RUNNING
Tue Apr 16 01:00:01 2013 [VMM][I]: ExitCode: 0
Tue Apr 16 01:00:01 2013 [VMM][D]: Monitor Information:
CPU : 49
Memory: 2097152
Net_TX: 0
Net_RX: 5581

後來乖乖的用 Server上的硬碟 當做 datastores ... deploy 簡直是瞬間就好了啊 !
Wed Apr 17 01:29:37 2013 [DiM][I]: New VM state is PENDING

Wed Apr 17 01:30:03 2013 [DiM][I]: New VM state is ACTIVE.
Wed Apr 17 01:30:03 2013 [LCM][I]: New VM state is PROLOG.
Wed Apr 17 01:30:03 2013 [VM][I]: Virtual Machine has no context
Wed Apr 17 01:30:03 2013 [TM][I]: ln: Linking /var/lib/one/datastores/1/2f66abca85ca784a580529637034850e in ONE-119:/var/lib/one/datastores/0/29/disk.0
Wed Apr 17 01:30:03 2013 [TM][I]: ExitCode: 0
Wed Apr 17 01:30:04 2013 [LCM][I]: New VM state is BOOT
Wed Apr 17 01:30:04 2013 [VMM][I]: Generating deployment file: /var/lib/one/vms/29/deployment.1
Wed Apr 17 01:30:04 2013 [VMM][I]: ExitCode: 0
Wed Apr 17 01:30:04 2013 [VMM][I]: Successfully execute network driver operation: pre.
Wed Apr 17 01:30:04 2013 [VMM][I]: ExitCode: 0
Wed Apr 17 01:30:04 2013 [VMM][I]: Successfully execute virtualization driver operation: deploy.
Wed Apr 17 01:30:04 2013 [VMM][I]: ExitCode: 0
Wed Apr 17 01:30:04 2013 [VMM][I]: Successfully execute network driver operation: post.
Wed Apr 17 01:30:04 2013 [LCM][I]: New VM state is RUNNING

======= 2013/04/08 補充 =======
關於如何在 DRBL 的 Client 端做 Bridge 以便可以外部直接 ssh 到 client 端產生的 VM 請參考另外一篇文章:
DRBL Client 上的 OpenNEbula (KVM) 如何做 Bridge
http://blog.twman.org/2013/04/DRBL-Bridge-OpenNEbula.html



全部的安裝也可以參考CentOS Quick Start: 

KVM Driver 3.2

KVM Driver Guide 1.2

Contextualizing Virtual Machines 3.6

KVM + OpenNebula = Virtual Cluster Management


在 CentOS 上安装和配置 OpenNebula


雖然確實很傷腦筋 ... 但解決問題時的那種爽快 
才是 Open Source 的真締 啊 ...