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 规模集自动缩减通知的主要内容,如果未能解决你的问题,请参考以下文章

Azure 批量定价,可在一小时内进行纵向扩展和缩减

如何使用FTP连接到Azure规模集实例

34.Azure创建自动伸缩虚拟机规模集(中)

适用于 chrome、firefox 和 safari 浏览器的 Azure 浏览器推送通知

33.Azure创建自动伸缩虚拟机规模集(上)

具有服务结构群集自动缩放的 VMSS