[Windows Azure] PDC 2010 新功能 (4): VM Role (Part 1)

在 PDC 2010 所宣布的十六項新功能中,最讓人感興趣的大概非 VM Role 莫屬了,VM(Virtual Machine)Role 是微軟特別開放 Windows Azure 上的 Image Deployment 機制,讓企業可以自行設定一個自己的虛擬磁碟(Virtual Hard Drive, VHD)並上傳到 Windows Azure 上的 BLOB 儲存區中,而 Windows Azure 的 Fabric Controller 可以在應用程式的設定下,由自己的 BLOB 儲存區中取用自訂的 VHD 進行組建,以作為應用程式的執行環境。

在 PDC 2010 所宣布的十六項新功能中,最讓人感興趣的大概非 VM Role 莫屬了,VM(Virtual Machine)Role 是微軟特別開放 Windows Azure 上的 Image Deployment 機制,讓企業可以自行設定一個自己的虛擬磁碟(Virtual Hard Drive, VHD)並上傳到 Windows Azure 上的 BLOB 儲存區中,而 Windows Azure 的 Fabric Controller 可以在應用程式的設定下,由自己的 BLOB 儲存區中取用自訂的 VHD 進行組建,以作為應用程式的執行環境。

VMRoleOverview

VM Role 最大的功能,就是各種應用程式所需要的前置環境都可以事先在企業內部設定完畢,包含像 Matlab Runtime 這種應用程式執行期函式庫,然後再上傳到 Windows Azure 內,日後就能直接使用這個 VM 來產生 Web Role 或 Worker Role,但基於 VM 本身的組態是由企業自己製作,故在 Visual Studio 中它被獨立為一個 Role 以區分,但 VM Role 可以同時作為 Web Role 或 Worker Role,一般來說都會將這兩種 Role 所需要的 VM 分別製作再上傳。

雖然 VM Role 的架構很貼近雲端運算中的 IaaS(Infrastructure as a Service),但它並不是一個完全的 IaaS 服務,因為 IaaS 服務只有基礎建設會由雲端供應商管理,其他的要求用戶自行管理(包含軟體授權,可用度與負載平衡等),但 Windows Azure 的 VM 卻不是如此,當用戶將自訂的 VM VHD 上傳後,可用度和負載平衡會由 Windows Azure Fabric Controller 來處理,客戶能夠管理的部份是在建置 VHD 以及利用 VM Role 組建應用程式的部份,所以 VM Role 不能算是 IaaS 的服務,但它將平台的客製能力更加的擴大,讓客戶不會再只受限於 Windows Azure 本身的兩個 VM Image。

目前(12/13) VM Role 本身是屬於 Beta 階段,和 Windows Azure Connect 和 Extra Small Compute Instance 一樣要申請才可以使用,因此必須要在新管理入口的首頁的 Beta Program 中勾選 VM Role,Windows Azure 在接受試用時,其狀態會改為 Active,表示已可使用。

若要建立可供 Windows Azure 使用的基礎作業系統影像(base operating system image),你必須要有下列工具:

  1. Windows Server 2008 R2 作業系統,並且已安裝 Hyper-V 角色(中文版或英文版均可)。
  2. Windows Server 2008 R2 英文企業版作業系統的安裝媒體,可以是試用版(建議使用英文版,中文版未經測試,還不知是否有問題)。
  3. 至少 50GB 以上的可用空間,建議此空間為獨立硬碟,可以是 USB 硬碟,但建置的速度可能會受到影響。
  4. 應用程式需要的執行期函式庫,例如 Matlab Runtime Library,Visual C++ Runtime Library 或其他必要的安裝媒體。
  5. Windows Azure SDK v1.3。
  6. 在 Windows Azure Portal 中登錄管理憑證。

若要使用 VM Role 搭載應用程式,則要再加上:

  1. Visual Studio 2010 或 Visual Web Developer Express 2010
  2. Windows Azure Tools for Visual Studio v1.3

 

有了上述的工具與環境後,就可以開始建立 VM Role 所需要的 VHD 了。

Step 1. 建立 VHD。

A. 開啟 Hyper-V 管理員,在右側的 [動作] –> [新增] –> [硬碟],或由左邊,在電腦上按右鍵,選擇 [新增] –> [硬碟],以啟動虛擬硬碟新增精靈。

image

B. 在選擇磁碟類型中,選擇固定大小的磁碟:

image

C. 設定存放 VHD 檔案的位置。

image

D. 建立一個空白的 VHD,大小設為 35GB,可用於 Small/Medium/Large/Extra Large,若想要建立給 Extra Small 的,則是 15GB,若是只給 Medium 以上的 compute instances 的話,則可設為 65GB。

image

E. 按完成,以開始建立,這需要較長的時間,視 VHD 的大小而定。

image

image

 

Step 2. 建立 Virtual Machine。

A. 開啟 Hyper-V 管理員,在右側的 [動作] –> [新增] –> [虛擬機器],或由左邊,在電腦上按右鍵,選擇 [新增] –> [虛擬機器],以啟動虛擬硬碟新增精靈。

image

B. 設定虛擬機器的名稱。

image

C. 設定記憶體大小,建議是1GB以上,若記憶體足夠的話,可設2GB。

image

D. 連線的設定請設定為區域連線 - 虛擬網路,以讓虛擬機器可以上網。

image

E. 設定使用前一步所建立的虛擬硬碟。

image

F. 按完成以建立虛擬機器。

image

 

Step 3. 安裝 Windows Server 2008 R2 Enterprise Editon。

請先設定虛擬機器,將 Windows Server 2008 R2 Enterprise Edition 的 ISO 影像檔掛載到虛擬機器的 DVD 中。

image

然後啟動虛擬機器,安裝 Windows Server 2008 R2 Enterprise Edition(若是多版本的影像檔,請選擇 Windows Server 2008 R2, Enterprise Edition (Full Installation))。

 

Step 4. 安裝需要的功能以及設定 Windows Update。

在安裝好 Windows Server 2008 R2 作業系統後,我們要進行一些設定,首先是在虛擬機器中安裝必要的軟體,像是應用程式需要的執行期函式庫,以及 Web Role 需要的 IIS(在伺服器管理員中安裝 Web Server 角色,並視需要安裝應用程式伺服器角色)。

接著,我們要設定 Windows Update,將自動更新關閉,由 Windows Azure Fabric Controller 來做這件事。我們可以由控制台(Control Panel)啟動 Windows Update,或是由開始功能表的程式集(Start –> Programs –> Windows Update)來啟動,當 Windows Update 視窗出現時,請按左方的 Change settings 設定,然後在 Important Updates 項目選 Never Check。

image

image

 

Step 5. 安裝 Windows Azure VM Role Integration Components。

若要安裝 Windows Azure VM Role Integration Components,請在虛擬機器連線用戶端的 [媒體] 功能表中,選擇 [DVD光碟機] –> [插入磁碟]。

image

並選擇在 Windows Azure SDK v1.3 的安裝目錄下的 iso 子目錄中的 wavmroleic.iso檔案,以將 Windows Azure VM Role Integration Components 的安裝光碟掛載於虛擬機器的光碟機中。接著,請回到虛擬機器中,開啟在光碟中的 WaIntegrationComponents-x64.msi 檔案,以啟動安裝程式。

image

按 Next,並輸入管理員(Administrator)的密碼,然後再按 Next。

image

接著按程序進行,Windows Azure VM Role Integration Components 會安裝到虛擬機器中,你可能會看到下面的畫面,請按 Install 安裝。

image

安裝完成後會要求重新啟動,請重新啟動虛擬機器。

 

Step 6. 準備作業系統影像。

當虛擬機器重開完成後,請在 Start –> Run 中輸入 %WINDIR%\system32\sysprep\sysprep.exe,並在 System Preparation Tool 的對話盒出現時,選擇 Enter System Out-of-Box Experience (OOBE),勾選 Generalize(一般化),然後在 Shutdown Options 中選擇 Shutdown,這會讓 sysprep.exe 在完成工作時,自動將虛擬機器關機。

image

 

當虛擬機器關機後,表示 VM Role 的準備工作已經完成。

 

請注意:若是使用中文版作業系統,你可能會看到 "嘗試對此電腦執行 Sysprep 時發生嚴重錯誤",主要的原因是 Windows Azure VM Role Integration Components 的安裝程式產生在 C:\ 的自動安裝檔 unattend.xml 的 XML 標頭格式有錯誤所致,請手動將 XML 標頭部份修正,再執行一次 Sysprep.exe 即可。

 

Step 7. 驗證與上傳 VHD。

當 VHD 建置完成後,我們就可以開始進行 VHD 的上傳程序了,請啟動 Windows Azure SDK v1.3 中的 Windows Azure SDK Command Prompt,會開啟命令列視窗,此時請輸入上傳指令:

csupload.exe Add-VMImage -Connection "SubscriptionId=[訂閱的ID];CertificateThumbprint=[管理憑證的拇指紋]" -Description "[VHD的說明]" -LiteralPath "[VHD的本機完整路徑]" –Name "[在Windows Azure上的檔案名稱]" -Location "[要上傳的資料中心位置]"

其中,Location 參數必須要是下列九個地點之一:

  • Anywhere Asia
  • Anywhere Europe
  • Anywhere US
  • East Asia
  • North Central US
  • North Europe
  • South Central US
  • Southeast Asia
  • West Europe

而訂閱 ID 與管理憑證的拇指紋可以由 Windows Azure 管理入口中的管理憑證清單中獲得。

CSUpload.exe 是專門負責將 VHD 上傳到微軟資料中心的工具,它會再呼叫位於 bin\vhdtools 目錄中的 csvhdverify.exe 以及 csvhdprep.exe 兩支程式進行 VHD 驗證程序(檢查虛擬硬碟的大小,作業系統以及 Windows Azure VM Role Integration Components)與準備程序(壓縮 VHD 檔案)。當這兩支程式完成後,CSUpload.exe 即會正式開始上傳,由於 VHD 的大小都很大,因此可以預期要花費五個小時以上的上傳時間。

image

在 CSUpload.exe 上傳的時候,我們可以在 Windows Azure 管理入口中看到:

image

請注意:現階段 VM Role 的上傳必須要透過英文介面的作業系統才可以,否則會出現 "Cannot find volumes for {VHD}" 的錯誤,以致於無法驗證通過,這是 CSVhdVerify.exe 內的一個小 bug,但未來不一定會修復 …。

網友 dmwc 提供中文版上的 Workaround:在"地區與語言">"系統管理"> "非 Unicode 程式的語言" 改成 英文後就可以成功上傳(我個人還沒試過)。

 

Reference:

Windows Azure SDK v1.3 – Developing a VM Role in Windows Azure

Windows Azure Platform Training Kit November 2010 – Virtual Machine Lab.