[Azure][ARM]使用Azure powershell复制正在运行VM的VHD并新建虚拟机时可能遇到的HostName异常
来源:互联网 发布:阿里云免费半年邀请码 编辑:程序博客网 时间:2024/05/19 16:33
一、使用Azure powershell复制正在运行VM的VHD并新建虚拟机的操作步骤
详细的操作步骤如下,我使用"xxx"隐去了特殊信息
Login-AzureRmAccount -EnvironmentName AzureChinaCloud #登录订阅
Get-AzureRmSubscription #获取订阅
Select-AzureSubscription -SubscriptionId xxx #选择当前订阅
#复制正在运行的虚拟机的VHD,请提前将待复制的VHD所在的存储容器改为允许公网访问的“容器”选项
Get-AzureRmStorageAccount -ResourceGroupName cranetest -Name cranetestdiag549
$storageAccountName = "cranenorthtest"
$storageContainerName = "vhds"
$storageAccountKey =“xxx”'
$destinationVHDFileName = "Testcranecentos69.vhd"
$destinationContext = New-AzureStorageContext –StorageAccountName $storageAccountName -StorageAccountKey $storageAccountKey
start-AzureStorageBlobCopy -AbsoluteUri "https://xxx.blob.core.chinacloudapi.cn/vhds/CraneCentos20170724112854.vhd" -DestContainer $storageContainerName -DestContext $destinationContext -DestBlob $destinationVHDFileName
#获取VNET & Subnet(本例中使用已经存在的VNET)
$vnet=Get-AzureRmVirtualNetwork -Name cranevnetnorth -ResourceGroupName crane
$Subnet1=Get-AzureRmVirtualNetworkSubnetConfig -Name subnet1 -VirtualNetwork $vnet
#创建一个公网IP地址:
$publicIP=New-AzureRmPublicIpAddress -Name cranetestfromVHD -ResourceGroupName crane -Location "China North" -AllocationMethod Dynamic -IpAddressVersion IPv4 -Force #新建
Get-AzureRmPublicIpAddress -Name cranetestfromVHD -ResourceGroupName crane #查看刚刚创建的公网IP信息
#创建可用性集:
$Availabilityset = New-AzureRmAvailabilitySet -Name cranetestAV -ResourceGroupName crane -Location "China North"
#创建网卡:
$NIC= New-AzureRmNetworkInterface -Name cranetestvmfromVHDNIC -ResourceGroupName crane -Location "China North" -SubnetId $Subnet1.Id -PublicIpAddressId $publicIP.Id -PrivateIpAddress 172.10.1.20
$NIC= Get-AzureRmNetworkInterface -Name cranetestvmfromVHDNIC -ResourceGroupName crane
#配置要使用的存储账号以及系统盘名称:
$storage = Get-AzureRmStorageAccount -Name cranenorthtest -ResourceGroupName crane
$vmname = "cranevmfromVHD"
$osdiskname = $vmname + "_OSDisk"
$osdiskurl = ”https://cranenorthtest.blob.core.chinacloudapi.cn/vhds/Testcranecentos69.vhd“
#生成虚拟机的配置,将新建的虚拟机放在虚拟网络及可用性集中:
$vmconfig = New-AzureRmVMConfig -VMName $vmname -VMSize Standard_A1 -AvailabilitySetId $Availabilityset.Id | Set-AzureRmVMOSDisk -Name $osdiskname -VhdUri $osdiskurl -CreateOption Attach -Linux | Add-AzureRmVMNetworkInterface -Id $NIC.Id -Primary
#创建虚拟机:
New-AzureRmVM -ResourceGroupName crane -Location "China North" -VM $vmconfig
创建成功的截图如下:
在Azure管理portal上已经可以看到上述创建的虚拟机:
二、注意事项及可能遇到的问题:
Azure平台官方推荐对虚拟机执行一般化操作后,再通过捕获镜像的方式创建新的虚拟机,(参考链接:
https://blogs.technet.microsoft.com/canitpro/2016/08/31/step-by-step-capture-a-linux-vm-image-from-a-running-vm/ )
Azure平台并不推荐使用如上方式创建新的虚拟机。因为新的虚拟机和全来的虚拟机所有的特殊配置都是一致的。这可能导致一定的冲突。如果源虚拟机未删除,那么我们将会遇到如下问题。
由于新创建的虚拟机其VHD中的网卡配置文件同之前的网卡配置文件是一样的,DHCP_HOSTNAME与原虚拟机是一致的,原虚拟机的配置文件如下:
[crane@CraneCentos ~]$ cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=dhcp
TYPE=Ethernet
USERCTL=no
PEERDNS=yes
IPV6INIT=no
DHCP_HOSTNAME=CraneCentos
因此,Azure平台会将新虚拟机网卡HOSTNAME中名称对应的IP替换为新创建虚拟机(cranevmfromVHD)的内网IP,我们登陆新建的虚拟机(cranevmfromVHD)截图如下:
我们可以看到截图中新虚拟机的HOSTNAME与原来正在运行的虚拟机是一致的,此时运行"host name”命令后,此HostName在Azure平台解析出来的IP为新创建虚拟机(cranevmfromVHD)的内网IP,而非源虚拟机的内网IP。这是因为新虚拟机创建后,Azure平台的DNS会将自己DNS中HostName记录更新为新创建虚拟机的IP地址172.10.1.20 :
[crane@CraneCentos ~]$ host CraneCentos
CraneCentos.0w2jigzwqggenpfyzenup22n0b.ax.internal.chinacloudapp.cn has address 172.10.1.20
而host新建虚拟机在portal上显示的名称则提示无法找到HostName:
[crane@CraneCentos ~]$ host cranevmfromVHD
Host cranevmfromVHD not found: 3(NXDOMAIN)
需要注意的是,我们在实际应用中,在同一个VNET下是通过Hostname的方式访问其它虚拟机的,那么我们在此种情况下就会出现混乱。我们在实际troubleshooting客户的案例中,曾经遇到客户的应用因为无法正常解析Hostname而出现应用无法正常安装的情况。此种情况则是导致该异常的原因。
三、解决方法:
针对如上问题,以Linux CentOS 6.9为例,参考解决方案如下:
1. 确保 /etc/waagent.conf文件中的如下选项为”y”:
Provisioning.MoninorHostName=y
2.通过命令vi /etc/sysconfig/network-scripts/ifcfg-eth0修改新创建虚拟机的hostname为cranevmfromVHD
3.重启Waagent服务:
service waagent restart
4.如果需要修改虚拟机内部的显示名称,则需要使用如下命令并重启虚拟机:
sysctl kernel.hostname=cranevmfromVHD
完成如上四步,重启虚拟机后,我们可以看到虚拟机的hostname以及虚拟机内部显示的文件名均已经与虚拟机的名称cranevmfromVHD一致了:
[root@cranevmfromVHD ~]# host cranevmfromVHD
cranevmfromVHD.0w2jigzwqggenpfyzenup22n0b.ax.internal.chinacloudapp.cn has address 172.10.1.20
希望本文能对正在使用Azure的您有一点帮助。
- [Azure][ARM]使用Azure powershell复制正在运行VM的VHD并新建虚拟机时可能遇到的HostName异常
- [Azure]使用Azure Powershell查看ARM模式下Azure存储中的vhd文件对应的虚拟机
- [Azure]ARM模式下使用Powershell找出订阅中没有被使用的vhd
- [Azure]使用Azure Powershell查看ASM模式下Azure存储中的vhd文件对应的虚拟机
- 排查在 Azure 中新建 Windows 虚拟机时遇到的经典部署问题
- 排查在 Azure 中新建 Windows 虚拟机时遇到的经典部署问题
- [Azure]使用Azure Powershell清理ASM模式下未使用的Disk和vhd
- [Azure]ARM中使用Azure Powershell批量规划虚拟网络
- [Azure]使用Azure Powershell输出ARM模式下某个账号中所有订阅下的虚拟网络拓扑
- 使用 PowerShell 创建 Azure VM 的自定义映像
- 使用VHDUpload上传VHD文件到云存储,并在Azure VM中加挂Azure Drive
- 关于 Azure Windows VM 的磁盘和 VHD
- [Azure]使用Powershell输出某台ARM虚拟机的NSG
- [Azure]使用Powershell获取Azure ARM模式订阅下的一些常用信息
- 排查在 Azure 中创建新 Linux 虚拟机时遇到的 Resource Manager 部署问题
- 上传通用化 VHD 并使用它在 Azure 中创建新 VM
- 上传通用化 VHD 并使用它在 Azure 中创建新 VM
- 排查在 Azure 中新建 Windows VM 时遇到的部署问题
- 创建Spring第一个程序HelloWorld
- github+Hexo搭建自己的博客(Mac OS 10.12.5)
- 数据库事务的四大特性与隔离级别及测试
- centos 下安装doceker
- 登录服务器windows2008出现:远程桌面服务当前正忙,因此无法完成您尝试执行的任务。请在几分钟后重试。其他用户应该仍然能够登录
- [Azure][ARM]使用Azure powershell复制正在运行VM的VHD并新建虚拟机时可能遇到的HostName异常
- CountDownLatch
- lua之string.format用法
- activity被系统回收onDestory会不会在执行以及如何恢复
- 网络编程UDP
- 格式转换工具PDF Extractor SDK更新至v8.6.0.2911,修复对比度预处理过滤器
- 分享一个ds12c887的在1602上显示的52单片机的程序
- Excel使用VBA读取实时WebService股票数据
- jQuery基础事件-绑定事件