Azure VM 规模集自动缩减通知
Posted
技术标签:
【中文标题】Azure VM 规模集自动缩减通知【英文标题】:Azure VM scale set auto-scale scale down notifications 【发布时间】:2017-07-14 21:54:25 【问题描述】:我有一个 VM 规模集,我想为其设置自动缩放,并且我想知道缩减的突然性如何。在 VM 被销毁之前,我想确保所有活动的长时间运行的请求都完成。这可能吗?
我对以下内容感到好奇:
自动缩放如何决定在缩减时销毁哪些 VM? VM 内部是否有任何通知表明它已计划销毁? 计划销毁的 VM 能否控制其何时被销毁(并推迟销毁,直到所有请求都完成)?我的规模集中的 VM 将位于负载平衡器之后,我需要能够在销毁之前耗尽连接(从后端池中删除 VM)。
【问题讨论】:
【参考方案1】:自动缩放如何决定在缩减时销毁哪些虚拟机?
默认情况下,自动伸缩会删除较大的 Instance ID(例如,instance ID 为 0,2,3,vmss 会删除 3)。我们可以使用powershell来获取vmss vms的实例id。
PS C> Get-AzureRmVmssvm -ResourceGroupName "vmss" -VMScaleSetName "vmss"
ResourceGroupName Name Location Sku Capacity InstanceID ProvisioningState
----------------- ---- -------- --- -------- ---------- -----------------
VMSS vmss_0 westus Standard_D1_v2 0 Succeeded
VMSS vmss_2 westus Standard_D1_v2 2 Succeeded
VM 内部是否有任何通知表明它被安排在 毁了?
据我所知,自动缩放通过电子邮件通知资源的管理员和贡献者,VM 不会收到通知。
预定要销毁的虚拟机是否可以控制它何时被销毁? 销毁(并推迟销毁,直到所有请求都完成)?
在所有请求都完成之前,我们不能推迟销毁。
在大多数情况下,我们部署带有负载均衡器的 vmss,它使用“循环”方法,VMSS 实例在实例被删除之前不会收到请求。
我想确保所有活动的长时间运行的请求都完成。这是 可能吗?
据我所知,我们可以为自动缩放选择不同的OS metrics,但我们不能确保 VMSS 会在长时间运行的请求完成后删除 vm 实例。
【讨论】:
那么,如何使用负载均衡器后面的规模集呢?似乎有一些方法可以在缩小之前拆除探头和排水连接,对吧? 你是对的,但我们无法添加一些设置来取消 azure 负载均衡器中的探测。 有什么方法可以得到过去发生自动缩放的准确时间?? 缺少预销毁钩子似乎很成问题。例如,我正在尝试自动缩放 Presto。它有一个优雅的关闭 API,我可以调用它,但如果虚拟机只是随机删除自己而不要求关闭,当然会导致问题。自动缩放在这方面似乎有点没用。 @JasonYe,我对云服务(经典)自动缩放感兴趣。对于云服务来说,在停止服务之前不等待请求完成是否也是如此?我正在寻找一些文档,但我只能找到 docs.microsoft.com/en-us/azure/architecture/best-practices/… 上的几行关于长时间运行任务的内容。【参考方案2】:自动缩放有几个策略可以选择在缩减时删除哪些虚拟机,例如“NewestVM”将删除最后启动的虚拟机,您可以在此处阅读更多信息:https://docs.microsoft.com/en-us/azure/virtual-machine-scale-sets/virtual-machine-scale-sets-scale-in-policy
关于虚拟机内部关于终止的通知,有一个名为“终止通知”的新功能,它发送一个可以从本地主机元数据中读取的事件,例如
curl -s -H "Metadata:true" "http://169.254.169.254/metadata/instance?api-version=2019-06-01"
在此处阅读更多信息:https://azure.microsoft.com/en-us/blog/azure-virtual-machine-scale-sets-now-provide-simpler-management-during-scalein/
VM 可以等待终止超时,或向元数据发送信号(POST 请求)以在超时前继续终止。
要耗尽连接,其中一种方法是阻止运行状况探测 IP 地址 168.63.129.16,因此虚拟机在负载均衡器或应用程序网关中将“不健康”,具体取决于您使用的内容,并且不会发送新流量而旧的现有流量仍将处于活跃状态。
【讨论】:
终于找到了一个合理的解决方案——3年多之后:) @gregjhogan 但有趣的是:不可能从 Azure 负载均衡器中删除规模集的单个 VM :)))您可以将所有规模集作为一个组删除,或者根本没有。因此,当 VM 缩减时,它会使规模集在连接耗尽的情况下变得毫无用处。以上是关于Azure VM 规模集自动缩减通知的主要内容,如果未能解决你的问题,请参考以下文章