运行 取消预配时 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 上的文档建议如下(假设您使用的是门户中设置的比例尺):

  1. Go to Virtual machine scale sets.
  2. Select + Add to create a new scale set.
  3. Go to the Management tab.
  4. Locate the Instance termination section.
  5. For Instance termination notification, select On.
  6. For Termination delay (minutes), set the desired default timeout.
  7. 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 的正确终止写入代理中 - 您是否在规模集代理池上启用了设置以保留有问题的代理?如果是这样,那可能会留下虚拟机。如果没有,也许是微软的票。

我不认为你的方法是错误的,相反,我认为你不应该诉诸于此。