vSphere ESXi shell clone vm instance without vCenter

由於使用的是免費版的 ESXi 在測試,所以沒有 VCenter 的簡便功能可以作很多事,所以要做一些比較複雜的操作就要靠自己了…

我灌的情況比較特別,其實是安裝 ESX  然後輸入 ESXi 的免費序號,不曉得到底是算啥…混合板…= =

有幾種方法可以擴充一些免費版無法做的操作

SDK

SDK 我自己也有抓下來在 windows 的環境跑,要把伺服器上的某個 crt 抓下來設定比較麻煩之外,用起來是蠻容易的,如果要自己整合一些簡單的介面就推薦這種方式囉。他裡面幾乎每個 api 好像都有些 sample 可以直接用。

Vsphere Shell

另外一種是如果 api 不支援,就要登進去灌 vsphere 的主機上,直接用命令對他做操作,大多都是 vm* 開頭的指令,如果是複製 vm 的話可以參考這個網站[1],教你用 Shell vmkfstools 指令去複製 VM,還說明了許多 vm 存放資料概念,

重要的概念是 vmdk 那個檔是存放很多參數,所以複製的時後記得透過 vmkfstools 才不會把內容的名字留下來。

只是複製完了呢?要如何讓 vm client 登入的時候看得到呢?

因為 vsphere 似乎沒辦法直接掃瞄硬碟就察覺有新的 vm 進入,我猜測是是透過內建的資料庫去存放這些資訊,所以除了單純複製資料夾外,就是要對 vsphere 資料庫進行註冊,這就要參考這篇[2]文章了~!,他其實是Scripting-VMware-Power-Tools-Infrastructure 這本書節錄下來的章節,他描述了整個流程,並且寫了幾個不同語言的 script 來做這些事。

  • 新增新的 vm 要存放的資料夾
  • 產生 *.vmx 內容
  • 用 vmkfstools 去複製 *.vmdk , *-flat.vmdk ; vmkfstools -i /vmfs/volumes/Storage1/2003/2003.vmdk -d thin /vmfs/volumes/Storage1/2003c/2003c.vmdk
  • 使用 vmware-cmd -s register *.vmx 去向 vsphere 註冊

而我在作到最後一步的時候發生了 fault.RestrictedVersion.summary 的錯誤,根據[3] 的內容大概推斷是新版本的 ESXi 免費版開始不支援你透過指令去寫 config。

但是由於 vsphere shell 內有很多指令可以用,就另外找到一個[4] 用 vim-cmd 的方式來操作註冊的動作結果就成功了,

[root@esx node] vim-cmd solo/registervm /vmfs/volumes/datastore1/node/node.vmx

但是開機時還是有一些問題,可能是我流程還沒跑完一次,是用複製檔案的方式做的吧~

但是他卡在 95% 時就問我問題…問我說是不是 copy 他的映像檔…進 console 就能回答= =我就回答 我 copy it …就開機了?

只是應該要注意共用實體的問題。

參考資源:

  1. 在ESX中把玩VM的虛擬硬碟 http://vaemon.com/article/910.html
  2. Cloning Virtual Machines Utilizing ESX Shell Scripts http://searchsystemschannel.techtarget.com/feature/Cloning-Virtual-Machines-Utilizing-ESX-Shell-Scripts
  3. http://vmetc.com/2009/03/31/esxi-u4-ends-free-version-read-and-write-access-from-the-rcli/
  4. http://www.virtuallyghetto.com/p/vmware-vimsh_9940.html

Build Hadoop Cluster using VMware vSphere

紀錄一下…想要建一個真實跟虛擬的主機都能連線的環境,且沒用很多IP,由於 IP 有限,要架設很多台的環境需要設定一下網路,所以要建立一個虛擬的區域網路,由一台 Master 負責 DHCP 與 NAT ,幫 Master 建立兩個虛擬網卡,與按下圖 2 處建立第二個 vSwitch,將 Node 與 Master 接在同個虛擬網路,然後 Master 第二個網卡對應到有真實網卡的虛擬網路,然後外部的 Node 們透過 VPN 與虛擬區網內的 Node 連線。

架設 pptpd[4] 伺服器,接著測試用 windows vpn 連入,linux 圖形化介面設定方式也類似,指令則比較麻煩…[5]

整理一下設定 pppd client 命令列的步驟:

  1. 安裝 ppp pptp http://pptpclient.sourceforge.net/yum/
  2. /etc/ppp/chap-secrets 設定帳號密碼
  3. /etc/ppp/peers/$tunnel 設定 tunnels 資訊
  4. 撥號 pppd call $tunnel
  5. 設定路由規則 route add -net 192.168.1.0 netmask 255.0.0.0 dev ppp0
  6. 但是在兩台centos 做同樣的事..都遇到類似的錯誤..一台莫名的突然可以..另一台就炸掉了~
  7. 無法連線排解 … http://pptpclient.sourceforge.net/howto-diagnosis.phtml#connect_refused 不了..
  8. 某種情況開著 pppd 讓他跑 再開另外一個連線 pppd call $tunnel 就連上了…
  9. 記得要裝 pptp 如果沒裝 pppd 還是能跑 只是 pptp is not running at the time pppd writes to the psuedo-tty

網路設定:

在這邊要注意 iptables 的設定跟 route 的設定, iptables 大都照著鳥哥[3]的設定就可以使用了,但是在 route 的地方處理的是封包要往哪走,如果是透過 ppp 連上虛擬區網的主機,就要設定一下將虛擬網路的封包都導向 ppp0 中,

route add -net 192.168.1.0 netmask 255.255.255.0 dev ppp0

route 增加 -net 網段 netmask 遮罩 dev 網路介面

在這邊就是指 192.168.1.0-254 的封包都要往 ppp0 (vpn) 送,才能連到虛擬網路,否則會走原本的實體IP就連不到東西了。

參考資源: