运行 取消预配时 Azure VM 规模集上的脚本
Run script on Azure VM Scale Set when deprovisioning
我在 Azure 中有一个 VMSS,它根据 DevOps 管道中的某些命令手动放大和缩小。我已经有一个脚本,可以在配置时执行并且运行良好。我还想在取消配置、关闭或删除 VM 时执行脚本。
如果它是基于关机,我可能可以通过计划任务来完成它,但似乎当规模集缩小时它基本上会拔掉机器上的插头。看起来它不会等待计划任务完成,但我找不到这方面的任何文档。
由于我手动控制缩小的步骤,所以我可以预先执行命令。理想情况下,我会使用类似 运行 命令的命令(我什至不确定这是否适用于规模集 VM),但规模集中的 VM 不可公开访问。
https://docs.microsoft.com/en-us/azure/virtual-machine-scale-sets/virtual-machine-scale-sets-terminate-notification 上的文档建议如下(假设您使用的是门户中设置的比例尺):
- Go to Virtual machine scale sets.
- Select + Add to create a new scale set.
- Go to the Management tab.
- Locate the Instance termination section.
- For Instance termination notification, select On.
- For Termination delay (minutes), set the desired default timeout.
- When you are done creating the new scale set, select Review + create button.
一旦启用,计划事件通知 API 在 http://169.254.169.254/metadata/scheduledevents?api-version=2019-01-01 可用(如果您的 VM 启用了 VNet,它应该是),您可以以比终止延迟更短的频率轮询(足以让您有时间停止代理)。 API 将 return 如下所示的结果告诉您需要减速:
{
"DocumentIncarnation": {IncarnationID},
"Events": [
{
"EventId": {eventID},
"EventType": "Terminate",
"ResourceType": "VirtualMachine",
"Resources": [{resourceName}],
"EventStatus": "Scheduled",
"NotBefore": {timeInUTC},
}
]
}
现在,考虑到所有这些,应该将 Azure Pipelines 的正确终止写入代理中 - 您是否在规模集代理池上启用了设置以保留有问题的代理?如果是这样,那可能会留下虚拟机。如果没有,也许是微软的票。
我不认为你的方法是错误的,相反,我认为你不应该诉诸于此。
我在 Azure 中有一个 VMSS,它根据 DevOps 管道中的某些命令手动放大和缩小。我已经有一个脚本,可以在配置时执行并且运行良好。我还想在取消配置、关闭或删除 VM 时执行脚本。
如果它是基于关机,我可能可以通过计划任务来完成它,但似乎当规模集缩小时它基本上会拔掉机器上的插头。看起来它不会等待计划任务完成,但我找不到这方面的任何文档。
由于我手动控制缩小的步骤,所以我可以预先执行命令。理想情况下,我会使用类似 运行 命令的命令(我什至不确定这是否适用于规模集 VM),但规模集中的 VM 不可公开访问。
https://docs.microsoft.com/en-us/azure/virtual-machine-scale-sets/virtual-machine-scale-sets-terminate-notification 上的文档建议如下(假设您使用的是门户中设置的比例尺):
- Go to Virtual machine scale sets.
- Select + Add to create a new scale set.
- Go to the Management tab.
- Locate the Instance termination section.
- For Instance termination notification, select On.
- For Termination delay (minutes), set the desired default timeout.
- When you are done creating the new scale set, select Review + create button.
一旦启用,计划事件通知 API 在 http://169.254.169.254/metadata/scheduledevents?api-version=2019-01-01 可用(如果您的 VM 启用了 VNet,它应该是),您可以以比终止延迟更短的频率轮询(足以让您有时间停止代理)。 API 将 return 如下所示的结果告诉您需要减速:
{
"DocumentIncarnation": {IncarnationID},
"Events": [
{
"EventId": {eventID},
"EventType": "Terminate",
"ResourceType": "VirtualMachine",
"Resources": [{resourceName}],
"EventStatus": "Scheduled",
"NotBefore": {timeInUTC},
}
]
}
现在,考虑到所有这些,应该将 Azure Pipelines 的正确终止写入代理中 - 您是否在规模集代理池上启用了设置以保留有问题的代理?如果是这样,那可能会留下虚拟机。如果没有,也许是微软的票。
我不认为你的方法是错误的,相反,我认为你不应该诉诸于此。