[Azure]ARM模式下制作映像并创建虚拟机
2017-07-13 14:29
627 查看
在操作前需要明确一点:目前ARM模式下只能制作一般化(Generalized)的映像。
我们以一台Windows Server 2012的虚拟机为模板,首先在虚拟机内使用Sysprep进行一般化操作(对于Linux虚拟机,使用waagent -deprovision命令进行相应地一般化操作):
一般化完成后,虚拟机会按照我们选择的Shutdown Options变为关机状态:
注意上面的状态实际上是虚拟机内关机的状态,未取消分配,所以需要在街面上在点一下“停止”按钮关闭虚拟机:
虚拟机变为“已停止(已取消分配)”状态后,我们使用Azure Powershell将已经做完Sysprep的虚拟机“标记为”一般化(这里省略了Login和设置订阅的过程):
Set-AzureRmVM -ResourceGroupName <Resource Group Name> -Name <VM Name> -Generalized
设置完成后,保存映像:
Save-AzureRmVMImage -ResourceGroupName <Resource Group Name> -VMName <VM Name> -DestinationContainerName <Container Name> -VHDNamePrefix <Custom VHD Name Prefix>
注意:DestinationContainerName的名称需要由3-63个小写或连字符组成,不能有大写字母。与经典模式的一般化映像有一点区别,ARM模式下捕获完成后,原虚拟机不会自动删除。
保存映像操作完成后,我们找到虚拟机所在的存储账号下,发现下面多了一个名为system的container:
在system下面依次找到Microsoft.Compute->Images->danimagecontainer(我们前面创建的container的名字),在里面可以找到我们捕获的映像对应的vhd文件,还有一个json文件(用于Template部署):
接着我们就可以使用这个vhd文件来作为模板创建虚拟机了,下面是一个简单的批量创建三台虚拟机的脚本(串行):
创建成功:
参考链接:
https://docs.microsoft.com/zh-cn/powershell/module/azurerm.compute/new-azurermvm?view=azurermps-1.7.0
我们以一台Windows Server 2012的虚拟机为模板,首先在虚拟机内使用Sysprep进行一般化操作(对于Linux虚拟机,使用waagent -deprovision命令进行相应地一般化操作):
一般化完成后,虚拟机会按照我们选择的Shutdown Options变为关机状态:
注意上面的状态实际上是虚拟机内关机的状态,未取消分配,所以需要在街面上在点一下“停止”按钮关闭虚拟机:
虚拟机变为“已停止(已取消分配)”状态后,我们使用Azure Powershell将已经做完Sysprep的虚拟机“标记为”一般化(这里省略了Login和设置订阅的过程):
Set-AzureRmVM -ResourceGroupName <Resource Group Name> -Name <VM Name> -Generalized
设置完成后,保存映像:
Save-AzureRmVMImage -ResourceGroupName <Resource Group Name> -VMName <VM Name> -DestinationContainerName <Container Name> -VHDNamePrefix <Custom VHD Name Prefix>
注意:DestinationContainerName的名称需要由3-63个小写或连字符组成,不能有大写字母。与经典模式的一般化映像有一点区别,ARM模式下捕获完成后,原虚拟机不会自动删除。
保存映像操作完成后,我们找到虚拟机所在的存储账号下,发现下面多了一个名为system的container:
在system下面依次找到Microsoft.Compute->Images->danimagecontainer(我们前面创建的container的名字),在里面可以找到我们捕获的映像对应的vhd文件,还有一个json文件(用于Template部署):
接着我们就可以使用这个vhd文件来作为模板创建虚拟机了,下面是一个简单的批量创建三台虚拟机的脚本(串行):
# 指定创建虚拟机的登陆账号 $username = "<Username>"; $passwd = ConvertTo-SecureString "<Password>" -AsPlainText -Force; $cred = New-Object System.Management.Automation.PSCredential($username, $passwd); # 指定虚拟机的创建区域,资源组,创建使用的存储账号,使用的自定义Image的URL $location = "China North"; $resourceGroup = "<Resource Group Name>"; $storageAccount = "<Storage Account Name>"; # 下面换成刚刚捕获的映像的vhd的URL $sourceImageUri = "https://dannorthstorage.blob.core.chinacloudapi.cn/system/Microsoft.Compute/Images/danimagecontainer/DanImage-osDisk.b2aa5527-7bbe-452a-90fb-9d09ed95b801.vhd"; # 指定虚拟机名称(由于是批量创建,所以指定一个名称模板),虚拟机尺寸,使用映像创建,OS磁盘缓存方式 $vmNameBase = "<VM Name Template>"; $vmSize = "Standard_A1"; $osCreatenOption = "FromImage"; $osDiskCaching = "ReadWrite"; # 指定IP对应的dns名称(可选) # $dnsNameLabelBase = "<DNS Name>"; # 指定虚拟网络和子网(已存在的) $virtualNetworkName = "<VNet Name>"; $subnetName = "<Subnet Name>"; $vnet = Get-AzureRmVirtualNetwork -Name $virtualNetworkName -ResourceGroupName $resourceGroup; $subnet = Get-AzureRmVirtualNetworkSubnetConfig -Name $subnetName -VirtualNetwork $vnet; for ($i = 1; $i -lt 4; $i += 1) { $vmName = "{0}{1}" -f $vmNameBase, $i; $osDiskName = "{0}Disk" -f $vmName; $osDiskUri = "https://{0}.blob.core.chinacloudapi.cn/vhds/{1}.vhd" -f $storageAccount, $vmName; $vmConfig = New-AzureRmVMConfig -VMName $vmName -VMSize $vmSize; # 指定系统类型等 $vmConfig = Set-AzureRmVMOperatingSystem -VM $vmConfig -Windows -ComputerName $vmName -Credential $cred -ProvisionVMAgent; # 创建public IP $publicIPName = "{0}publicip" -f $vmName; # $dnsLabel = "{0}{1}" -f $vmName, $dnsNameLabelBase $publicIP = New-AzureRmPublicIpAddress -Name $publicIPName -ResourceGroupName $resourceGroup -Location $location -AllocationMethod Dynamic; #-DomainNameLabel $dnsLabel; # 创建NIC $nicName = "{0}nic" -f $vmName; $nic = New-AzureRmNetworkInterface -Name $nicName -ResourceGroupName $resourceGroup -Location $location -SubnetId $subnet.Id -PublicIpAddressId $publicIP.Id; $vmConfig = Add-AzureRmVMNetworkInterface -VM $vmConfig -Id $nic.Id; $vmConfig = Set-AzureRmVMOSDisk -VM $vmConfig -Name $osDiskName -VhdUri $osDiskUri -SourceImageUri $sourceImageUri -Caching $osDiskCaching -CreateOption $osCreatenOption -Windows; # 创建VM New-AzureRmVM -ResourceGroupName $resourceGroup -Location $location -VM $vmConfig; }
创建成功:
参考链接:
https://docs.microsoft.com/zh-cn/powershell/module/azurerm.compute/new-azurermvm?view=azurermps-1.7.0
相关文章推荐
- Azure ARM (11) ARM模式下,创建虚拟机并配置负载均衡器
- [Azure]使用Powershell获取ARM模式下可用的虚拟机平台映像信息
- Azure ARM (10) ARM模式下的虚拟机和Classic Model虚拟机的区别
- [Azure]ARM虚拟机整机磁盘快照[1]——创建快照
- 如何使用 Packer 在 Azure 中创建 Windows 虚拟机映像
- 订阅无法在 ARM 模式下创建虚拟机,只能在 ASM 模式下创建 Azure VM 部署
- Azure ARM Portal 创建虚拟机
- 订阅无法在 ARM 模式下创建虚拟机,只能在 ASM 模式下创建 Azure VM 部署
- [Azure]使用Azure Powershell查看ARM模式下Azure存储中的vhd文件对应的虚拟机
- 使用版本 1.0.0 的 Azure ARM SDK for Java 创建虚拟机时报错
- [Azure]ARM模式下删除虚拟机挂盘修复后恢复的脚本(非托管磁盘)
- Azure ARM创建和部署自定义操作系统映像
- Azure 镜像市场虚拟机映像制作指南
- [Azure]ARM模式下没有公网IP地址的虚拟机如何与外部通信
- 使用版本 1.0.0 的 Azure ARM SDK for Java 创建虚拟机时报错
- 订阅无法在 ARM 模式下创建虚拟机,只能在 ASM 模式下创建 Azure VM 部署
- 使用Recovery Services备份Azure ARM模式虚拟机
- 使用版本 1.0.0 的 Azure ARM SDK for Java 创建虚拟机时报错
- [Azure]ARM模式托管磁盘的快照与还原[1]——创建与查看
- [Azure]ARM模式下删除虚拟机挂盘修复后恢复的脚本(托管磁盘)