目前在中国区的Azure新portal上面, 暂时不支持直接将用户的虚拟机创建为虚拟机镜像,那么在ARM模式下如何捕获虚拟机为用户自定义镜像?而且由于managed disk没有上线,用户创建的虚拟机只能和镜像在一个存储账号下,如何快速的将用户自定义镜像拷贝到其他存储账号,并且快速创建VM?本文就这些常见问题给出一个简单易用的快速解决办法
本文介绍的主要主题如下:
- Linux/Mac下如何使用Azure CLI捕获ARM下虚拟机镜像
- 使用ARM模板使用自定义镜像快速创建虚拟机
- 通过Azure CLI在不同账号使用自定义镜像创建虚拟机
使用Azure CLI捕获Linux镜像
sudo npm install -g azure-cli
Azure --version
azure login -u USERNAME -p PASSWORD -e AzureChinaCloud
sudo waagent -deprovision+user
azure config mode arm
azure vm deallocate -g myubuntueast -n myvmubuntu
7. 使用Azure Command Line通用化VM:
azure vm generalize -g myubuntueast -n myvmubuntu
azure vm capture -g myubuntueast -n myvmubuntu -p myvmubuntu -t myTemplate.json
模板文件中存放着OS VHD文件地址,保存以便后续操作使用。
使用ARM模板从自定义镜像创建VM
1. 自定义镜像创建完成后,在ARM模式下,最简单的方式,就是使用ARM模板来创建虚拟机,那么我们可以使用QuickStart里面的模板101-vm-from-user-image 来创建虚拟机,首先使用Git克隆这个repo:
2.将101-vm-from-user-image目录拷贝到根目录,可以看到里面有6个文件,其中azuredeploy.json是主要文件,parameter是参数文件, newvnet是一个嵌套的模板,创建新的vnet,而existingvnet是处理已有的vnet:
4.修改parameter文件,其中比较重要的部分是镜像地址如下,另外我们在本例中使用已有的虚拟网络,已有的虚拟网络子网:
"osDiskVhdUri": { "value": https://myvmlinux.blob.core.chinacloudapi.cn/system/Microsoft.Compute/Images/vhds/myvmubuntu-osDisk.c8102a9a-f110-452d-b30a-e4735c2841f4.vhd}
"newOrExistingVnet": {
"value": "existing"},
"n"newOrExistingVnetName": {
"value": "myubuntueast-vnet"},
"n"newOrExistingSubnetName": {
"value": "default"},
azure group deployment create --name="mylinuxcustodeployment" --resource-group="myubuntueast" --template-file="azuredeploy.json" --parameters-file="azuredeploy.parameters.json"
部署成功后,可以看到输入相关的信息如下:
7. 最后使用SSH连接到这个Linux VM做个简单测试,可以看到,可以成功连接到该虚拟机:
注:这个末班中没有定义NSG,如果正式环境里面,请添加相关NSG配置进行虚拟机创建。
使用Azure CLI通过自定义镜像创建VM
我们创建了虚拟机镜像作为标准模板后,需要分发到不同的存储账号进行虚拟机的创建,那么如何快速的拷贝镜像呢?当然可以使用azcopy等工具 ,但如果只是测试或者镜像数量比较少,建议使用Storage Explorer,该工具是图形化界面,拷贝加速,并且适用于Linux,windows和Mac平台,下载地址:
在当前目录下选择则该目录,单击菜单上的copy,选择目的存储目录,单击paste,就可以看到整个目录开始拷贝,及时你有多个VHD文件,也会同时拷贝过去:
azure network public-ip create myubuntueast myPublicCust2IP -l "chinaeast"
创建网络安全组并且创建22端口的SSH规则:
#Create NSG group
azure network nsg create --resource-group myubuntueast --location chinaeast
--name myNetworkSecurityGroup
azure network nsg rule create --resource-group myubuntueast
--nsg-name myNetworkSecurityGroup --name myNetworkSecurityGroupRuleSSH
--protocol tcp --direction inbound --priority 1000 --source-address-prefix '*'
--source-port-range '*' --destination-address-prefix '*' --destination-port-range 22
--access allow
azure network nic create myubuntueast myCust3NIC -k default
-m myubuntueast-vnet
--network-security-group-name myNetworkSecurityGroup
-p myPublicCust2IP -l "chinaeast"
azure vm create -g myubuntueast -n myCustVM3 -l "chinaeast" -y Linux -z Standard_D3
-u azureuser -p Azure123! -f myCust3NIC
-d https://myvmstorage.blob.core.chinacloudapi.cn/vhds/myCustVM3.vhd
-Q "https://myvmstorage.blob.core.chinacloudapi.cn/system/Microsoft.Compute/Images/vhds/myvmubuntu-osDisk.c8102a9a-f110-452d-b30a-e4735c2841f4.vhd"
创建完成后,检查Azure的管理界面,可以看到虚拟机已经正常运行: