vmware nested ESXi

ESXi 5 開始支援在 vm 裡面跑 vm 只是在新增 vm 的時候 OS 沒有辦法選 ESXi,只能在修改的時候才改 OS type,這個選項會影響到 vm 內 cpu 的支援,一定要改成 ESXi 才能在裡面跑 vm。

1.
先要把 vSphere host 的此檔案增加一行
/etc/vmware/config
vhv.allow = “TRUE”
2.
CLUSTER 的 EVC 好像會有影響,不太確定為了避免先關閉
disable EVC
3.
HOST 重開機
4.
建立 VM,建立完以後再從設定把 OS 改成 ESXi,如下圖

5.
在 vm 內輸入 kvm-ok 說你現在是在正確的狀態,否則就是上述幾點有地方需要再確認,在 vm 內安裝作業系統例如 ubuntu,裝 qemu、kvm、libvirt-bin、virt-manager

6.
用 virt-manger 安裝 nested-vm ,這邊要注意的是放入光碟後可能不會很順利的進入安裝畫面,cpu 會滿載而且畫面一直黑掉沒反應,要一直持續亂按 enter 就會進去安裝畫面了…。會讓人以為壞掉的慘況如下~

7.
用 bridge 把 KVM 網路設好以後網路還是有問題,nested-vm 會沒辦法上網。現象是當 nested-vm 發出廣播,目標主機回應的封包沒辦法透過 vmware 進到 nested-vm 裡面,應該是 vmware vswitch 設計上沒有考量到這種現象,可能他不是單純的 learning swtich。所以把 vmware 的 vm 網卡所在的 port group 改成 promisc~就可以運作了~只是 host 的封包就會流竄到 vswitch 內了。

參考
http://www.vpsee.com/2012/02/how-to-run-kvm-nested-vms-on-vmware-esxi/ – how-to-run-kvm-nested-vms-on-vmware-esxi
http://communities.vmware.com/message/2021380 – ESXi 5 and nested VM’s
http://communities.vmware.com/community/vmtn/bestpractices/nested – 官方討論

cisco Nexus 1000v 4.2(1)SV1(4a) 於 vSphere 5.0 安裝筆記

概念:

這張圖是官方附的網路圖,每一台 vSphere 5 上面都要裝 1000 VEM 的套件,而 1000v 的管理伺服器 VSM 跟 vCenter 則是獨立在這些跑 1000 VEM 的 host 外,要注意透過這樣設置會比較安全,最好這些設備是直接接在同一個實體 switch 上,否則跨 switch 的 VLAN 又要額外設置。

VSM 有分成三個網路卡,Management、Control、Packet,Management 是讓你可以透過 telnet or web 登入 Management 的網卡,相對其他兩個是比較不重要,可以透過實體網路連的到就好。而 Control 跟 Packet 則相對比較重要,這是 VSM 跟 VEM 溝通的橋樑,要確保他們之間的網路可以在運作 Cisco Discovery Protocol 時是順利的,否則後續的操作都會有問題。

因此 VSM 才要獨立在 Host 之外獨立跑在受管理的 VEM 之外,這樣才不會受制於網卡數量,而讓 VSM 連接到 VEM 的連線沒辦法額外透過 vSwitch 建立,否則 Control 連線應該是沒辦法跑在 1000v 的 vSwitch 上,有點雞生蛋,蛋生雞的問題。

安裝步驟:

  1. 替需要跑 dvs 的 vSphere host 安裝 cisco 1000v update (VEM),如果安裝成功應該可以在 host 用 vem status 檢查狀態。
  2. 用 ovf 佈署一台 1000v VM(VSM)
  3. 透過 1000v VEM web-java 介面初始化設定,包含連接 vCenter
  4. 登入(telnet or ssh) 1000v 用指令管理 distributed vSwitch
    1. show modules (檢查連接上的 vem 如果成功應該會自動加入 VEM)
    2. install license (安裝授權)
    3. port-profile type ethernet my-uplink ( 設定 uplink portgroup )..
    4. port-profile type vethernet my-portgroup ( 設定 port group )..

安裝 VEM

$ esxcli software vib install -d /vmfs/volumes/4f9bd234-8fe1e3a2-2f1d-e41f131cf84a/VEM500-201204133102-BG-release.zip

實際在安裝的時候比較需要注意的是當 1000v 開起來以後,可以進去 show module 查看有多少 VEM 自動連上了,他好像是透過 cisco discovery protocol 去自動尋找同個 switch 上的主機,只要 control 連線有辦法連到 VEM 應該就可以在 show module 裡面看到東西了,否則在 VEM 上面怎麼設 port-group 都不會通才對。
而且在初始化的時候會要求你選擇三種連線對應的 port-group 與 vlan 這邊要非常小心~我初始化了很多次才把設定弄對~我的 VSM 裝在與要管理的 VEM 不同主機上,我 VSM 的網路要接到有設定特定 vlan 的 port-group 上,然後再把 1000v uplink 的 port-profile 設成相同的 vlan,這個設定完成以後才會抓到。

例如 control vlan 設定 100 的範例:

 # 用來連接 control 的 uplink 網卡接上去以後才可以從 show module 看到 VEM
 $ port-profile type ethernet uplink
 (config-port-profile) $ vmware port-group
 (config-port-profile) $ switchport mode trunk
 (config-port-profile) $ switchport trunk allowed vlan all
 (config-port-profile) $ no shutdown
 (config-port-profile) $ system vlan 100
 (config-port-profile) $ state enabled
 (config-port-profile) $ exit
 # 無 vlan 的 port-group 要設 vlan 應該是加上 system vlan x
 $ port-profile type vethernet portgroup
 (config-port-profile) $ vmware port-group
 (config-port-profile) $ switchport mode access
 (config-port-profile) $ switchport trunk allowed vlan all
 (config-port-profile) $ no shutdown
 (config-port-profile) $ state enabled
 (config-port-profile) $ exit

1000v 的設定都在 VEM 上做,在 vCenter 上面只能檢視一些相關的資料與設定 VM 與 port-group 的對應, 1000v 比較強項的地方應該是可以透過 cisco 的作業系統來管理虛擬網路,而且能對相同 host 內 vm 之間做網路管制,而且能讓管理網路跟管理系統的人分工不互相影響。

瀏覽與刪除 dVS 的範例

 # 檢視跟 vCenter 的連線資訊
 $ show svs connection
connection vcenter:
  ip address : 1.2.3.4
  remote port : 80
  protocol : vmware-vim https
  ...
 $ config
 VSM (config)# svs connection vcenter
 # 刪除 dvs
 VSM (config-svs-conn)# no vmware dvs
 # 中斷 svs 連線
 VSM (config-svs-conn)# no connect
 VSM (config-svs-conn)# exit
 # 移除跟 vCenter 的連線,可以重跑 web 的初始化精靈
 VSM (config)# no svs connection vcenter

 隔了許久在設一次
這次把 vlan 都設成 1,設定都如上,本來是設 100 怎麼樣都不通,不知道是有哪裡弄錯,後來把 port-profile uplink 的 system vlan 設成 1 以後突然就可以了…真囧,只是代表那 system vlan 很重要。

額外學到一點是 trouble 手冊裡面 VSM and VEM Modules 的章節有超多指令可以慢慢測試是什麼問題,從 vsm vem 的角度一步一步檢查,之前是連 uplink 都不通,這次是 uplink 偵測到了。

最重要的是在 vsm 上 show module 會看到 vem。或者是檢查 portgroup 裡面的 uplink 跟 vmkernl 的 port 是否有綠色,這次一開始是 uplink 綠色了,但是 vmkernel 不會通,vem 跟 vsm 接起來以後才會通,大概就是 control 跟 packet 這兩條路的問題。

port 的驚嘆號裡面也有一些資訊能看,如果是一般的 portgroup 通常就是 port 被 blocked 住(或許代表 packet 還沒通?),或是 uplink port 沒有 cisco discovery protocol 資訊的問題(control 沒通?)。

列出一些 vem 能看的指令正確的狀態


$ vem status

VEM modules are loaded

Switch Name Num Ports Used Ports Configured Ports MTU Uplinks
vSwitch0 128 4 128 1500 vmnic0
vSwitch1 128 1 128 1500
DVS Name Num Ports Used Ports Configured Ports MTU Uplinks
nexus 256 13 256 1500 vmnic1
VEM Agent (vemdpa) is running

$ vemcmd show port
 LTL VSM Port Admin Link State PC-LTL SGID Vem Port
 18 Eth3/2 UP UP FWD 0 vmnic1
49 Veth1 UP UP FWD 0 vmk1

$ vemcmd show card
Card UUID type 2: 22f0c278-f963-11df-a639-e41f131cd438
Card name: 1-2-3-4
Switch name: nexus
Switch alias: DvsPortset-0
Switch uuid: d7 b5 10 50 bc 8e 97 8a-0a f6 cd b9 7f 3b 87 16
Card domain: 1
Card slot: 3
VEM Tunnel Mode: L2 Mode
VEM Control (AIPC) MAC: 00:02:3d:10:01:02
VEM Packet (Inband) MAC: 00:02:3d:20:01:02
VEM Control Agent (DPA) MAC: 00:02:3d:40:01:02
VEM SPAN MAC: 00:02:3d:30:01:02
Primary VSM MAC : 00:50:56:90:29:4e
Primary VSM PKT MAC : 00:50:56:90:29:50
Primary VSM MGMT MAC : 00:50:56:90:29:4f
Standby VSM CTRL MAC : ff:ff:ff:ff:ff:ff
Management IPv4 address: 1.2.3.4
Management IPv6 address: 0000:0000:0000:0000:0000:0000:0000:0000
Secondary VSM MAC : 00:00:00:00:00:00
Secondary L3 Control IPv4 address: 0.0.0.0
Upgrade : Default
Max physical ports: 32
Max virtual ports: 216
Card control VLAN: 1
Card packet VLAN: 1
Card Headless Mode : No
 Processors: 16
 Processor Cores: 8
Processor Sockets: 2
 Kernel Memory: 20959704
Port link-up delay: 5s
Global UUFB: DISABLED
Heartbeat Set: True
PC LB Algo: source-mac
Datapath portset event in progress : no

# 可以檢查 control mac, packet mac ,這個通了不代表可以了,那如果不通就..
$ vem-health  check  00:02:3d:10:01:02
VSM Control MAC address: 00:02:3d:10:01:02
Control VLAN: 1
DPA MAC: 00:02:3d:40:01:02
The VEM-VSM connectivity seems to be fine.

刪除幽靈 dvs :

 如果沒有按照上述的刪除 dvs 步驟來 no vmware dvs,就把 VSM 砍掉就會產生一個無法修改的幽靈 dvs,超礙眼的,只是剛開始不懂的時候一定會不小心犯這個錯誤,目前已經累積兩名受害者。

後來找到這個 removing-orphaned-nexus-dvs 才知道關鍵字是 orphaned dvs,按照他的步驟我就順利的移除了這個失去控制的 dvs 囉!

小紀錄一下文章內的步驟

  1. 建立一個新的 VSM (借屍還魂用)
  2. 初始化他去建立一個新的 dvs 
  3. 用 no vmware dvs 刪除此 VSM 建立的 dvs,但是不去除連線
  4. 透過 web mob 找到舊的 extension-key,跟新的 extension-key
  5. 透過網頁把新的 extension-key  unregister
  6. 設定好 VSM 的 datacenter-name 跟 hostname 變成幽靈 dvs name 
  7. 去 VSM 暫時中斷與 vCenter 的連線把 extension-key 改成舊的
  8. 去 VSM 網頁抓有替代過後 extension-key 的 extension.xml 抓下來到 vCenter plugin 註冊
  9. VSM 重新連線(svs connection;connect;)
  10. 成功借屍還魂
  11. 不爽就把幽靈 dvs 刪除吧!(svs connection;no vmware dvs)
參考資源:
sysadmintutorials step by step 教學

part-1 part-2 part-3

官方影片教學 vimeo
官方文件
Cisco Nexus 1000V Release 4.2(1)SV1(4a)

VMware vSphere vSwitch

VMware vSphere vSwitch 的 port 可以增加三種介面

Service Console

vSphere host 本身的 IP,實際上就是透過這個 IP 連入 vSphere 來管理,因此這個設定相當重要,通常也不太會需要更動,如果有需要做容錯,可以用兩個網卡分別在不同的 vSwitch 設定不同的 Service Console 來避免一個網段或網卡的故障。

VMKernel

作為 vMotion iScsi nfs 的網路介面,類似在 host 新增一個虛擬網卡,作用跟 Service Console 很像,但是用途不一樣,多一個彈性讓 host 可以像是擁有很多個網卡一樣,在不同網卡設定不同 ip,可以用這個 IP 來連接需要透過網路的 storage,可以走 nfs or iscsi 都需要有一個虛擬 IP,也可以透過這個 VMKernel 的 IP 在 storage 上指定讀寫權限。

vmotion 也需要透過增加這個介面來讓虛擬機進行同步,因此在增加時有 vmotion or fault tolerance 的選項能設定。

Virtual Machine(port group)

一個 vSwitch 上面可以有很多個 port group 就是透過新增一個 virtual machine 來執行,可以用來管理流量或安全策略的設定,分屬同一個 port group 的設定將會一致。因此在 vmotion 時需要將兩台 host 的 vSwitch and port group 設定都一致才能順利的移轉,這也是虛擬機對應 port 的承載介面,每個虛擬機的網卡指定的 port 位置就是一個 port group。

可以透過 host profile 來同步管理數台機器的網路設定。

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

vSphere clone vm diskformat

今天在試著 clone vm 時發現有幾個選項,關於複製時檔案的處理,有分成三種,不是很直覺想的到對應的差異,

  • Same format as source:按照原先vm配置的方式。
  • Thin provisioned format:按照磁碟使用的空間來配置,例如配置 500G 的vm 只用了100G 選這個就只會複製一個只佔 100G 的 vmdk,空間會再依照使用情形增加,比較適合用來作成 template。
  • Think format:按照配置的空間,如果配置 500g 則複製出來的不管內容資料多少都會佔500g,這種模式理當是讀寫效能會比較好一些。

應該是吧…

參考資料: