我在 Azure 中部署了一个规模集,我需要将 credativ 的底层 debian-image 更改为自定义映像。我发现了一些对我来说不太适用的好资源:
- https://msftstack.wordpress.com/2016/05/17/how-to-upgrade-an-azure-vm-scale-set-without-shutting-it-down/
- https://github.com/gbowerman/vmsstools
两篇文章都提到要么将底层 stock-image 更新为较新版本,要么将 uri 更改为 custom-image。但我需要从 stock-image 更改为 custom-image。这涉及将 json-template 从
storageProfile : {
"imageReference" : {
publisher : [variables('imagePublisher')],
offer : [variables('imageOffer')],
sku : [variables('sku')],
version : [variables('imageVersion')]
},
osDisk : {
name : [concat(variables('vmssName'), 'osdisk')],
vhdContainers : [
[concat('https://', variables('uniqueStringArray')[0], variables('newStorageAccountSuffix'), '.blob.core.windows.net/', variables('vhdContainerName'))],
[concat('https://', variables('uniqueStringArray')[1], variables('newStorageAccountSuffix'), '.blob.core.windows.net/', variables('vhdContainerName'))],
[concat('https://', variables('uniqueStringArray')[2], variables('newStorageAccountSuffix'), '.blob.core.windows.net/', variables('vhdContainerName'))],
[concat('https://', variables('uniqueStringArray')[3], variables('newStorageAccountSuffix'), '.blob.core.windows.net/', variables('vhdContainerName'))],
[concat('https://', variables('uniqueStringArray')[4], variables('newStorageAccountSuffix'), '.blob.core.windows.net/', variables('vhdContainerName'))]
],
caching : ReadOnly,
createOption : FromImage
}}
像这样:
osDisk : {
name : [concat(variables('vmssName'), 'osdisk')],
vhdContainers : [
[concat('https://', variables('uniqueStringArray')[0], variables('newStorageAccountSuffix'), '.blob.core.windows.net/', variables('vhdContainerName'))],
[concat('https://', variables('uniqueStringArray')[1], variables('newStorageAccountSuffix'), '.blob.core.windows.net/', variables('vhdContainerName'))],
[concat('https://', variables('uniqueStringArray')[2], variables('newStorageAccountSuffix'), '.blob.core.windows.net/', variables('vhdContainerName'))],
[concat('https://', variables('uniqueStringArray')[3], variables('newStorageAccountSuffix'), '.blob.core.windows.net/', variables('vhdContainerName'))],
[concat('https://', variables('uniqueStringArray')[4], variables('newStorageAccountSuffix'), '.blob.core.windows.net/', variables('vhdContainerName'))]
],
caching : ReadOnly,
createOption : FromImage,
"osType" : "Linux",
uri : https : //storageaccount.blob.core.windows.net/tstclstrvhd/my.vhd
}
有什么办法吗?我可以用不同的图像重新部署规模集吗?
谢谢并问候,Timo
更新: 好的,我现在成功复制了 vhd。
- 使用 CLI 在规模集的 VM 上解除分配:azure vmssvm deallocate
- 使用 azure-cli 复制 blob:azure storage blob copy start --dest-account-key xxx --dest-account-name xxx
我很好奇图片里有什么。解除分配会重置图片吗?我的所有自定义设置都消失了吗?
答案1
目前不支持将 VMSS 模型从平台映像更改为自定义映像(随着模型变化的进一步开放,这种情况将来可能会改变)。
以最少的停机时间实现此目的的一种方法是创建新的规模集,然后更改负载均衡器设置(即手动形式的 VIP 交换,例如取消一个 LB 的 IP 地址关联,将其与指向新规模集的另一个 LB 关联)。
回复:停止释放,释放不会重置映像,因此 VHD 将成为关闭时处于状态的 OS 驱动器。然后,您可以按照以下步骤从中创建另一个规模集:https://msftstack.wordpress.com/2016/06/20/how-to-convert-an-azure-virtual-machine-to-a-vm-scale-set/- 请注意,您需要在捕获图像之前对其进行概括(请参阅该页面上的注释)。