利发国际lifa222 » 虚拟化 » 微软Azure在ARM架构从已有的VHD文件创建新的虚拟机

微软Azure在ARM架构从已有的VHD文件创建新的虚拟机

 
Azure在ASM架构下可以通过Portal经典界面的“捕获”按钮或Save-AzureVMImage等方式创建虚拟机的镜像模板,实现利用镜像模板快速部署虚拟机。 Azure在ARM架构下,Portal界面中是没有相应选项和按钮的,要实现类似的功能,需要在PowerShell下通过采用JSON的Template部署的方式实现,本文就记录这种方法以便以后使用。 原理:
复制已存在的虚拟机的vhd磁盘文件,通过复制后的vhd创建虚拟机
方法:
1、通过PowerShell登录到ARM架构
PS C:\Users\Admin> Add-AzureRmAccount -EnvironmentName AzureChinaCloud
2、通过PowerShell列出需要复制的虚拟机信息,并记录其OsDisk的vhd的Uri 比如列出azure_new001资源组中azure008虚拟机信息:
PS C:\Users\Admin> get-azurermvm -ResourceGroupName azure_new001 -name azure008     RequestId : 3ea65e13-0b3c-4fec-9530-5a82b714d5d5 StatusCode : OK ResourceGroupName : azure_new001 Id : /subscriptions/b46e44d9-37e3-45b8-99c0-bb3a76093ee8/resourceGroups/azure_new001/prov iders/Microsoft.Compute/virtualMachines/azure008 Name : azure008 Type : Microsoft.Compute/virtualMachines Location : chinaeast Tags : {} DiagnosticsProfile : BootDiagnostics : Enabled : True StorageUri : https://khsgnew001diag966.blob.core.chinacloudapi.cn/ HardwareProfile : VmSize : Standard_A0 NetworkProfile : NetworkInterfaces[0] : Id : /subscriptions/b46e44d9-37e3-45b8-99c0-bb3a76093ee8/resourceGroups/azure_new001/prov iders/Microsoft.Network/networkInterfaces/azure00880 OSProfile : ComputerName : azure008 AdminUsername : azureuser LinuxConfiguration : DisablePasswordAuthentication : False ProvisioningState : Succeeded StorageProfile : ImageReference : Publisher : OpenLogic Offer : CentOS Sku : 6.7 Version : latest OsDisk : OsType : Linux Name : azure008 Vhd : Uri : https://khsgnew001disks925.blob.core.chinacloudapi.cn/vhds/azure00820161439122934.v hd Caching : ReadWrite CreateOption : FromImage DataDisks[0] : Lun : 0 Name : azure008-20161208-121429 Vhd : Uri : https://khsgnew001disks925.blob.core.chinacloudapi.cn/vhds/azure008-20161118-132429 .vhd Caching : None CreateOption : Empty DiskSizeGB : 200 DataDiskNames[0] : azure008-20161208-121429 NetworkInterfaceIDs[0] : /subscriptions/b46e44d9-37e3-45b8-99c0-bb3a76093ee8/resourceGroups/azure_new001/prov iders/Microsoft.Network/networkInterfaces/azure00880
在上面其中https://khsgnew001disks925.blob.core.chinacloudapi.cn/vhds/azure00820161439122934.vhd就是虚拟机azure008的OsDisk系统磁盘的Uri链接(也可以在portal界面虚拟机的磁盘管理中,查看磁盘属性来获取此Uri),如还有数据磁盘也要复制,也在上面可以记录下DataDisks的Uri。 3、用AzCopy工具复制此vhd文件到另外一个容器,因为复制后vhd文件名相同,所以要新建一个容器进行复制(可以到portal界面存储账户--容器中新建) 下载AzCopy工具并安装,点击下载:MicrosoftAzureStorageTools.msi 打开cmd命令窗口,cd进入到AzCopy的安装目录,如:C:\AzCopy 用下面命令复制原虚拟机的vhd到新的容器中(这里新的容器为vhds1),把[源key]和[目标key] 分别替换成源虚拟机存储账户的访问key和目标存储账户的访问key:
C:\AzCopy>azcopy /source:https://khsgnew001disks925.blob.core.chinacloudapi.cn/vhds /dest:https://khsgnew001disks925.blob.core.chinacloudapi.cn/vhds1 /sourcekey:[源key] /DestKey:[目标key] /pattern:azure00820161439122934.vhd Finished 1 of total 1 file(s). [2016/12/14 15:11:23] Transfer summary: ----------------- Total files transferred: 1 Transfer successfully: 1 Transfer skipped: 0 Transfer failed: 0 Elapsed time: 00.00:00:00
如有其他数据磁盘可进行多次复制。 4、在GitHub上的quickstart template找到相应的脚本并复制内容保存到本地进行修改
https://github.com/Azure/azure-quickstart-templates/tree/master/101-vm-from-user-image
一个是azuredeploy.json(无需修改)
一个是azuredeploy.parameters.json,修改对应字段的值,此例修改后如下:
{ "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#", "contentVersion": "1.0.0.0", "parameters": { "customVmName": { "value": "azure001" }, "userImageStorageAccountName": { "value": "khsgnew001disks925" }, "userImageStorageAccountResourceGroupName": { "value": "azure_new001" }, "osDiskVhdUri": { "value": "https://khsgnew001disks925.blob.core.chinacloudapi.cn/vhds1/azure00820161439122934.vhd" }, "dnsLabelPrefix": { "value": "azure001" }, "adminUsername": { "value": "azureuser" }, "adminPassword": { "value": "khSG2016##" }, "osType": { "value": "Linux" }, "vmSize": { "value": "Standard_A0" }, "newOrExistingVnet": { "value": "existing" }, "newOrExistingVnetName": { "value": "vnet192" }, "newOrExistingSubnetName": { "value": "default" }, "existingVnetResourceGroupName": { "value": "azure_new001" } } }
5、最后通过PowerShell命令利用JSON的模板部署新的虚拟机:
PS C:\Users\Admin> New-AzureRmResourceGroupDeployment -Name azure001Dep -ResourceGroupName azure_new001 -Mode Incremental -TemplateFile 'C:\azuredeploy.json' -TemplateParameterFile 'C:\azuredeploy.parameters.json'     DeploymentName : azure001Dep ResourceGroupName : azure_new001 ProvisioningState : Succeeded Timestamp : 2016/12/14 7:42:48 Mode : Incremental TemplateLink : Parameters : Name Type Value =============== ========================= ========== customVmName String azure001 userImageStorageAccountName String khsgnew001disks925 userImageStorageAccountResourceGroupName String azure_new001 osDiskVhdUri String https://khsgnew001disks925.blob.core.chinacloudap i.cn/vhds1/azure00820161439122934.vhd dnsLabelPrefix String azure001 adminUserName String azureuser adminPassword SecureString osType String Linux vmSize String Standard_A0 newOrExistingVnet String existing newOrExistingVnetName String vnet192 newOrExistingSubnetName String default existingVnetResourceGroupName String azure_new001   Outputs : DeploymentDebugLogLevel :
6、登录ARM架构的portal界面确认结果,如之前除了Os磁盘还复制过Data磁盘,可以在界面中新的虚拟机中附加现有磁盘里选择此Data磁盘的vhd。 原文链接:微软Azure在ARM架构从已有的VHD文件创建新的虚拟机,转载请注明来源!
4