首页 » 虚拟化 » 微软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文件创建新的虚拟机,转载请注明来源!

2