本文介绍:
在虚拟机规模集“终结”某个具体的实例前获得通知;
视频介绍:
图文介绍:
为什么会有这样的需求?
通常情况下,我们使用vmss 会部署一些非交易的网站类型的应用,这类应用可能对规模集内的实例重启/故障/退出规模集的操作不敏感:
比如我们检测到规模集cpu利用率>70%后,触发规则自动增加一台实例到负载均衡器后,然后负载均衡将流量导向这台新增的实例;
当cpu利用率 <50%后,触发一条自动减少虚拟机实例的规则,此时vmss直接终结掉虚拟机实例,负载均衡将流量导向其他的实例;
但如果规模集的实例运营的是一些对可靠性要求非常高的应用,或者虚拟机实例里有需要维护状态的session等状况,在减少实例时,并不能直接“终结”掉该实例,否则将导致用户数据丢失,在这样的场景下,我们就需要在“终结”某个实例前,将该实例的负载转移到其他虚拟机,此时,便有了我们本文介绍的这个内容。
本文介绍,通过 SCHEDULED EVENTS 在虚拟机规模集“终结”实例前,获得通知,至于获得通知后的负载转移,则需要根据自己的实际项目进行不同的设置,本文就不举例子了。
使用方式:
curl -H Metadata:true http://169.254.169.254/metadata/scheduledevents?api-version=2019-08-01
结果示例:
{
"DocumentIncarnation": {IncarnationID},
"Events": [
{
"EventId": {eventID},
"EventType": "Reboot" | "Redeploy" | "Freeze" | "Preempt" | "Terminate",
"ResourceType": "VirtualMachine",
"Resources": [{resourceName}],
"EventStatus": "Scheduled" | "Started",
"NotBefore": {timeInUTC},
"Description": {eventDescription},
"EventSource" : "Platform" | "User",
}
]
}
几个关键的属性如下:
也就是说,在vmss终结 某个实例前,你最多有15分钟的时间处理负载转移。
EventType | 此事件造成的影响。 值:
|
将根据事件类型为每个事件计划将来的最小量时间。 此时间反映在某个事件的 NotBefore
属性上。
EventType | 最小通知 |
---|---|
冻结 | 15 分钟 |
重新启动 | 15 分钟 |
重新部署 | 10 分钟 |
Preempt | 30 秒 |
Terminate | 用户可配置:5 - 15 分钟 |
重点步骤,创建规模集,进入配置页面,设置虚拟机实例终结通知:
进入规模集的第一台虚拟机中(实际上是规模集中的任意一台虚拟机都可以),执行api调用,观察结果:
如下图 并没有任何虚拟机要终结的通知
手动修改规模集实例数量,则虚拟机规模集会删除虚拟机:
比如我们将实例数由4->3
重新运行命令,则有如下内容,包含要终结的虚拟机实例id等信息:
返回结果中的虚拟机将在配置的时间间隔(最大15分钟)后删除,您需要在这段时间内完成实例上负载的迁移。