杭州儀電Azure Stack技術(shù)深入淺出系列4: Azure Stack自定義虛擬機鏡像和Gallery Ite
時間:2023-06-30 17:00:01 | 來源:網(wǎng)站運營
時間:2023-06-30 17:00:01 來源:網(wǎng)站運營
杭州儀電Azure Stack技術(shù)深入淺出系列4: Azure Stack自定義虛擬機鏡像和Gallery Item:
Azure Stack環(huán)境中服務(wù)的提供者或運營者從微軟變成了Azure Stack集成環(huán)境的運營者,通過Azure Stack的MarketPlace,我們可以根據(jù)用戶的特定需求,提供一些定制化的應(yīng)用,獲得與公有云不一樣的用戶體驗。本文將主要介紹如何在Azure Stack的MarketPlace中如何添加一個自定義的虛擬機進行并定制滿足需求的Gallery Item,同時通過自服務(wù)的模式提供給業(yè)務(wù)的消費者。這一篇,我們將探討以下幾個問題:
- 如何制作自定義鏡像
- 從自定義鏡像創(chuàng)建虛擬機的幾種方式
- 如何創(chuàng)建自定義的Gallery Item
1、制作自定義鏡像
Azure Stack的鏡像分為
generalized 和
specialized兩種不同的形式。
Generalized鏡像中已經(jīng)刪除了所有個人賬戶信息及一些其它數(shù)據(jù),可以作為模板來創(chuàng)建一個或者多個虛擬機。微軟對Windows和Linux鏡像都提供了相應(yīng)的工具,Windows下可以采用Sysgrep,Linux下可以安裝Azure Linux Agent,執(zhí)行sudo waagent –deprovision來實現(xiàn)。
Specialized鏡像中保留了原始虛擬機中的用戶賬戶、應(yīng)用程序和其它狀態(tài)數(shù)據(jù),可以作為模板創(chuàng)建一臺虛擬機。Specialized鏡像可以看作是原始虛擬機在某個時間的snapshot。
鏡像既可以從Azure Stack或者Azure上運行的虛擬機來制作,比如捕獲或者克隆虛擬機,也可以將在本地基于Hyper-V Manager啟動的虛擬機導(dǎo)出作為鏡像。幾種不同的自定義鏡像的詳細制作過程請參考下面鏈接:
- 捕獲Azure Stack上運行的虛擬機
- 創(chuàng)建在Azure Stack或者Azure上運行的虛擬機的副本
- 從本地VM創(chuàng)建虛擬機鏡像
2、從自定義鏡像創(chuàng)建虛擬機
在獲得虛擬機鏡像之后,如何在Azure Stack中根據(jù)鏡像創(chuàng)建虛擬機?
這部分介紹如何將本地VHD鏡像上傳到Azure Stack中,并且創(chuàng)建虛擬機。Azure Stack中需要通過Portal、PowerShell,ARM Template等方式來進行相應(yīng)的操作,這些操作包括2步:
- 第一步:上傳本地VHD鏡像到Azure Stack上(見 2.1)
- 第二步:創(chuàng)建虛擬機(見 2.2)
2.1通過Portal新建存儲賬戶并上傳本地鏡像
- 將本地VHD文件以PageBlob的類型上傳到新建的Container中
2.2通過ARM Template從鏡像創(chuàng)建新的虛擬機
鏡像上傳后,就可以開始創(chuàng)建虛擬機了。從VHD創(chuàng)建虛擬機有兩種模式:
Attach和
From-Image。
Attach模式下,VHD文件是直接附加到新建的虛擬機上。因此采用Attach模式,一個VHD文件只能創(chuàng)建一臺虛擬機。而From-Image模式,首先會將VHD文件復(fù)制一份到指定的Blob Container中,然后將VHD的副本附加到虛擬機上,因此可以從一個generalized VHD創(chuàng)建多臺虛擬機。
采用ARM Template來創(chuàng)建虛擬機, ARM Template的使用方式及創(chuàng)建虛擬機的完整Template可以在AzureStack-QuickStart-Templates上獲得,這里僅提供兩種模式下差異部分來進行對比分析:
-> Attach模式
"storageProfile": { "osDisk": { "name": "[concat(parameters('vmName'))]", "osType": "[parameters('osType')]", "caching": "ReadWrite", "vhd": { "uri": "[parameters('osDiskVhdUri')]" }, "createOption": "Attach" } },
Attach 模式下只需要提供VHD的URI,createOption采用
“Attach”這里parameters('osDiskVhdUri')為前面通過Portal上傳的VHD文件的URL:
https://liugestore.blob.local.azurestack.external/vhds/CentOS7-AzureStack-WithAgent.vhd
下圖為Attach模式流程:
-> From-Image模式
"storageProfile": { "osDisk": { "name": "[concat(variables('vmName'),'-osDisk')]", "osType": "[parameters('osType')]", "caching": "ReadWrite", "image":{ "uri": "[variables('userImageUri')]" }, "vhd": { "uri": "[variables('osDiskVhdUri')]" }, "createOption": "FromImage" } },
From-Image模式下需要提供Image的URI和VHD的URI, createOption采用 FromImage
variables('userImageUri')為前面用Portal上傳的VHD文件的URL
https://liugestore.blob.local.azurestack.external/vhds/CentOS7-AzureStack-WithAgent.vhd
而variables('osDiskVhdUri')為
https://liugestore.blob.local.azurestack.external/vhds/testVM.vhd
是用戶指定的新的虛擬機綁定的VHD文件,實際上是
CentOS7-AzureStack-WithAgent.vhd的副本。
注:這里為了方便,將 CentOS7-AzureStack-WithAgent.vhd和 testVM.vhd放在了同一個Blob Container中。實際上,副本VHD可以放在其他的存儲賬戶中,并且名字也可以根據(jù)需要在設(shè)置。
From-Image模式流程:
3、Azure Stack 鏡像庫
上一節(jié)中介紹了如何上傳鏡像及通過ARM Template從鏡像創(chuàng)建虛擬機。VHD鏡像上傳到我們自己新建的存儲賬號中。創(chuàng)建虛擬機的時候直接通過Blob的URL來定位鏡像文件。
那么除了用戶自己維護鏡像的存儲,Azure Stack有沒有提供一個統(tǒng)一的鏡像庫來方便的存儲鏡像呢?除了用URL來標(biāo)識和定位鏡像,有沒有其它方式來唯一指定鏡像呢?
答案是有。本節(jié)討論Azure Stack的鏡像庫,主要介紹下面幾個問題:
- 自定義鏡像上傳到鏡像庫(見 3.1)
- 鏡像庫中鏡像的標(biāo)識(見 3.2)
- 從鏡像庫中的鏡像創(chuàng)建虛擬機(見 3.3)
3.1 通過Admin Portal上傳自定義鏡像到鏡像庫
Azure Stack的鏡像庫在Resource Provider的Compute當(dāng)中,需要admin權(quán)限才能進行操作。
- 從admin portal用admin賬號登陸Azure Stack
admin portal地址:
https://adminportal.local.azurestack.external/
- 點擊Resource Providers–點擊Compute–VM images
可以看到目前已經(jīng)上傳到鏡像庫中的所有鏡像。
- 點擊Add,填寫鏡像的相應(yīng)標(biāo)識信息,然后點擊Create
其中OS Disk Blob URI:就是我們上一小節(jié)中上傳的VHD鏡像的Blob URL,也即:
https://liugestore.blob.local.azurestack.external/vhds/CentOS7-AzureStack-WithAgent.vhd
3.2 鏡像庫中鏡像的標(biāo)識
在上傳鏡像的過程中,我們需要填寫一些相關(guān)信息,如PUBLISHER, OFFER, SKU, VERSION, OSTYPE, OS DISK BLOB URI,那么這些信息到底有什么用呢?在點擊了Create后,發(fā)生了什么過程呢?
實際上主要發(fā)生了兩步:
第一步- 將OS DISK BLOB URI指定的vhd文件復(fù)制到VM Images庫中在我們的POC測試環(huán)境中,鏡像庫位于C:/ClusterStorage/Volume1/Shares/SU1_Infrastructure_1/CRP/PlatformImages中,可以看到有兩個文件夾,對應(yīng)著我們在鏡像庫中的兩個鏡像。
第二步- 生成該鏡像的對應(yīng)的Manifest文件,用來標(biāo)識該鏡像。進入剛剛上傳的鏡像對應(yīng)的文件夾中可以看到,除了存在著一個復(fù)制過來的VHD文件外還有一個Manifest文件。
Manifest文件的內(nèi)容如下:
{"Offer":"CentOS","Sku":"7.0-withagent","Version":"1.0.0","PlatformImage": { "Publisher":"Inesa", "Offer":"CentOS", "Sku":"7.0-withagent", "Version":"1.0.0", "OsDisk":{ "OsType":"Linux", "Filename":"CentOS7-AzureStack-WithAgent.vhd", "FullPath":"////SU1FileServer//SU1_Infrastructure_1//CRP//PlatformImages//3ee92630-cf36-454a-8a4f-123a7ad7b9a5", "Uri":"https://liugestore.blob.local.azurestack.external/temp/CentOS7-AzureStack-WithAgent.vhd" } },"Publisher":"Inesa"}
Manifest文件中包含了前面填寫的PUBLISHER, OFFER, SKU, VERSION, OSTYPE信息,也包含了鏡像文件在鏡像庫中的存儲位置以及鏡像是從哪里復(fù)制過來的。其中PUBLISHER, OFFER, SKU, VERSION, OSTYPE 唯一標(biāo)識了當(dāng)前的鏡像。通過這些標(biāo)識信息,就可以指定用改鏡像創(chuàng)建虛擬機3.3 從鏡像庫中的鏡像創(chuàng)建虛擬機
有了鏡像的唯一標(biāo)識信息,就可以創(chuàng)建虛擬機,前面小節(jié)介紹了如何通過ARM Template來創(chuàng)建虛擬機,這里則通過PowerShell來創(chuàng)建。
# Define a credential object$cred = Get-Credential# Create a virtual machine configuration$vmConfig = New-AzureRmVMConfig -VMName myVM -VMSize Standard_DS2 | ` Set-AzureRmVMOperatingSystem -Linux -ComputerName myVM -Credential $cred | ` Set-AzureRmVMSourceImage -PublisherName Inesa -Offer CentOS ` -Skus 7.0-withagent -Version latest | Add-AzureRmVMNetworkInterface -Id $nic.Id# create new vm New-AzureRmVM -ResourceGroupName liuge -Location local -VM $vmConfig
在vmConfig中通過標(biāo)識信息來指定用我們剛剛上傳的鏡像來創(chuàng)建新的虛擬機。
4、自定義Gallery Item
前面的幾個小節(jié)介紹了從自定義鏡像創(chuàng)建虛擬機的幾個方式,無論是采用PowerShell還是ARM Template,都需要一定的編程基礎(chǔ),那么有沒有一種方式,可以在Portal上通過點擊操作來創(chuàng)建自定義的虛擬機呢?本節(jié)就介紹如何為自定義鏡像在Portal上創(chuàng)建圖標(biāo),也就是Gallery Item。
4.1 什么是Gallery Item
簡單的理解:
在Azure中我們可以通過如下方式創(chuàng)建虛擬機:
如圖點擊對應(yīng)的圖標(biāo),就可以彈出創(chuàng)建虛擬機的界面:
不需要配置任何的開發(fā)環(huán)境,不需要一定的編程基礎(chǔ),只要點擊,填寫相關(guān)項,就可以快速的創(chuàng)建一臺虛擬機。
在Azure Stack中同樣可以實現(xiàn)!
4.2 利用Azure Stack Tools 創(chuàng)建Gallery Item
在Azure Stack深入淺出系列的上一篇中介紹了Azure Stack運維工具
Azure Stack Tools的使用,
Azure Stack Tools提供了Add-AzsVMImage方法來實現(xiàn):
$ImagePath = "<Path to VHD>"Add-AzsVMImage -publisher "Inesa" -offer "CentOS" -sku "7.0-withagent" -version "1.0.0" -osType Linux` -osDiskLocalPath $ImagePath -tenantID $TenantId -EnvironmentName "AzureStackAdmin"
執(zhí)行上面的指令后就可以實現(xiàn)與Azure 類似的通過Portal來創(chuàng)建虛擬機
更多Azure Stack Tools的內(nèi)容請參考:Azure Stack Tools
4.3 深入理解自定義Gallery Item的流程
利用Azure Stack Tools 的Add-AzsVMImage可快速的實現(xiàn)自定義Gallery Item。那么Add-AzsVMImage到底封裝了什么操作?自定義Gallery Item需要經(jīng)過哪些過程呢?
Add-AzsVMImage主要做了2個工作:
- 將本地VHD文件上傳到Azure Stack的鏡像庫(見 4.31)
- 為鏡像庫中的鏡像創(chuàng)建Gallery Item(見 4.32)
4.31 將本地VHD文件上傳到Azure Stack的鏡像庫
將鏡像上傳到鏡像庫的過程前面已經(jīng)介紹過了,Add-AzsVMImage所進行的操作與前面介紹的相同,流程如下:
- 在Azure Stack中創(chuàng)建新的臨時資源組,存儲賬號,Blob Container
- 將本地VHD文件上傳到新建的Container中
- 將臨時存儲賬戶中的VHD文件的BLob URL 作為 OS DISK BLOB URI的值,Add-AzsVMImage指令中的參數(shù)publisher, offer, sku, version, osType的值作為PUBLISHER, OFFER, SKU, VERSION, OSTYPE的值,在鏡像庫中添加新的鏡像
- 刪除創(chuàng)建的臨時資源組,包括其中的存儲賬號、Container以及臨時的VHD文件
4.32 為鏡像庫中的鏡像創(chuàng)建Gallery Item
為了解自定義Gallery Item的流程,這部分將介紹如何自己通過PowerShell的指令來實現(xiàn)。主要分為以下幾步:
- 填寫相應(yīng)的Json描述文件
- 生成azkpg包
- 生成Gallery Item
Step 1.首先創(chuàng)建下面的目錄結(jié)構(gòu)及文件:
其中DeploymentTmeplates、Icons、strings為文件夾的名字。Icons下面存放的是圖標(biāo)文件,可以選擇自己需要的png文件進行替換。
Step 2.編輯Manifest文件:
Manifest文件包含了一些對圖標(biāo)的描述,包括名字,發(fā)布者,版本,圖標(biāo)樣式等信息。也就是對下圖中CentOS 7.2的一些描述.
Step 3.編輯UIDefinition.json
UIDefinition定義了在創(chuàng)建新的虛機時UI顯示的步驟和內(nèi)容,有兩種類型:
- 一種是Azure的默認類型CreateVMWizardBlade,如下圖共 四步,一般都采用這種類型。
- 另一種是 DeployFromTemplateBlade 類型,這種需要在 DeploymentTemplates文件夾下,填寫需要顯示的內(nèi)容,感興趣的讀者可以深入研究一下。
Step 4.編輯DeplymentTemplates/CreateUIDefinition.json
ImageReference中可以設(shè)置下面的屬性來表示采用的鏡像:
Step 5.編輯Strings/resources.resjon
里面主要是Manifest.json中用到的幾個變量的詳細信息
{ "summary": "Create a CentOS 7.2 VM", "longSummary": "Create a CentOS 7.2 VM. Publisher: Inesa, Offer: CentosServer, Sku:7.0-WithAgent, Version:1.0.0", "description": "Create a CentOS 7.2 VM. Publisher: Inesa, Offer: CentosServer, Sku:7.0-WithAgent }
Step 6.生成azkpg包
->使用工具AzureGalleryPackager,下載地址:
http://www.aka.ms/azurestackmarketplaceitem->解壓,進入目錄
->執(zhí)行powershell指令:
./AzureGalleryPackageGenerator/AzureGalleryPackager.exe -m C: /CentOS.72/Manifest.json -o C:/InesaMarketPlaceItems
->執(zhí)行成功后會在InesaMarketPlaceItems文件夾下生成相應(yīng)的azkpg文件Inesa.CentOS72.2.0.0.azpkg 。
Step 7.上傳azkpg文件到Blob中
Step 8.根據(jù)azkpg文件生成Gallery Item
$subscriptionid = (Get-AzureRmSubscription -SubscriptionName 'Default Provider Subscription').SubscriptionIdAdd-AzureRMGalleryItem -SubscriptionId $subscriptionId -GalleryItemUri "https://liugestore.blob.local.azurestack.external/templates/Inesa.CentOS72.1.0.0.azpkg" -ApiVersion "2015-04-01"
其中
https://liugestore.blob.local.azurestack.external/templates/Inesa.CentOS72.1.0.0.azpkg 是上傳的文件的URI
經(jīng)過上面的8步,已經(jīng)可以實現(xiàn)創(chuàng)建Gallery Item的功能,實際上,Add-AzsVMImage中也是根據(jù)這個過程來實現(xiàn)的。
4.4 利用Publishing Tool來添加 Gallery Item
在前面小節(jié)中,需要執(zhí)行PowerShell指令來添加Gallery Item。隨著Azure Stack GA,微軟提供了一個Publishing Tool來實現(xiàn)可視化的添加Gallery Item。界面如下圖:
Publishing Tool的詳細使用教程:
- Add marketplace items using publishing tool
5、總結(jié)
通過本文,我們了解了如何創(chuàng)建自定義的虛擬機鏡像,并且通過自定義鏡像來創(chuàng)建虛擬機,為自定義鏡像創(chuàng)建Gallery Item等。從較簡單的例子入手,逐步深入,來介紹Azure Stack Tools中 Add-AzsVMImage所做的工作,希望能夠?qū)ψx者有一定的啟發(fā)。
作者:劉建志
如果對文章內(nèi)容感興趣請聯(lián)系: 儀電(集團)有限公司Azure Stack技術(shù)支持團隊( gaoc@rc.inesa.com / niuhx@rc.inesa.com)
轉(zhuǎn)載請注明:轉(zhuǎn)載自Azure Stack Notes博客(
http://a-stack.com)
關(guān)鍵詞:虛擬,定義,系列,技術(shù),深入,杭州