更新VMSS中运行的Linux虚拟机镜像时触发Azure镜像构建(azure-arm)报错:无法删除托管镜像
解决VMSS关联时无法删除托管镜像的问题
这个错误完全在预期之内——Azure会阻止删除仍被Virtual Machine Scale Set(VMSS)依赖的托管镜像,毕竟VMSS的实例需要依赖镜像来启动或更新,直接删除会导致服务异常。下面是具体的解决步骤:
第一步:确认VMSS当前的镜像关联
先通过Azure CLI确认你的VMSS到底是不是还在引用那个无法删除的镜像:
az vmss show --resource-group <你的资源组名称> --name <你的VMSS名称> --query 'virtualMachineProfile.storageProfile.imageReference'
执行后会返回当前VMSS使用的镜像详情,确认是不是你要删除的那个镜像ID。
第二步:更新VMSS的镜像引用,解除依赖
接下来需要让VMSS不再指向这个旧镜像,分两种场景处理:
场景1:你要把VMSS升级到新的自定义镜像
如果你的目标是更新VMSS到新镜像,直接用下面的命令替换VMSS的镜像引用:
az vmss update --resource-group <资源组名称> --name <VMSS名称> --set virtualMachineProfile.storageProfile.imageReference.id=<新托管镜像的资源ID>
替换完成后,需要把VMSS的所有实例升级到新镜像配置:
az vmss update-instances --resource-group <资源组名称> --name <VMSS名称> --instance-ids '*'
等所有实例升级完成后,旧镜像就不再被VMSS依赖了。
场景2:你只是想删除旧镜像,不需要更新VMSS
如果VMSS原本是基于市场镜像创建的,只是之前临时关联了自定义镜像,你可以把VMSS改回使用市场镜像,比如Ubuntu 22.04:
az vmss update --resource-group <资源组名称> --name <VMSS名称> \ --set virtualMachineProfile.storageProfile.imageReference.publisher=Canonical \ --set virtualMachineProfile.storageProfile.imageReference.offer=0001-com-ubuntu-server-jammy \ --set virtualMachineProfile.storageProfile.imageReference.sku=22_04-lts \ --set virtualMachineProfile.storageProfile.imageReference.version=latest
同样,执行完后要升级所有实例让配置生效。
第三步:删除托管镜像
等VMSS的镜像引用更新完成,并且所有实例都升级到新配置后,就可以正常删除旧镜像了:
az image delete --resource-group <资源组名称> --name <要删除的镜像名称>
如果还是提示无法删除,建议检查一下是否有其他VM或VMSS也在使用这个镜像,可以通过Azure门户的镜像详情页面查看"依赖项"来确认。
内容的提问来源于stack exchange,提问作者Ashu_FalcoN
相关产品推荐
相关产品推荐

