![如何确保 GCP 上的虚拟机不会因为可抢占而被关闭?(事后使用 stackdriver)](https://linux22.com/image/747163/%E5%A6%82%E4%BD%95%E7%A1%AE%E4%BF%9D%20GCP%20%E4%B8%8A%E7%9A%84%E8%99%9A%E6%8B%9F%E6%9C%BA%E4%B8%8D%E4%BC%9A%E5%9B%A0%E4%B8%BA%E5%8F%AF%E6%8A%A2%E5%8D%A0%E8%80%8C%E8%A2%AB%E5%85%B3%E9%97%AD%EF%BC%9F%EF%BC%88%E4%BA%8B%E5%90%8E%E4%BD%BF%E7%94%A8%20stackdriver%EF%BC%89.png)
我正在寻找一个 stackdriver 查询,它将在 GCP VM 上产生抢占事件。
为什么?因为我的 Pod 从节点上消失了。显然,这些节点后来由于缺少工作负载和启用了自动缩放而被终止。所以一切看起来都像是 Pod 首先死亡,然后自动缩放器按应有的方式运行并关闭节点。不过,当我避免使用可抢占的虚拟机/节点时,这种情况似乎不会发生。
答案1
问完这个问题后不久,我发现https://cloud.google.com/logging/docs/audit/#system_event
因此,过滤
logName="projects/<my-project-name>/logs/cloudaudit.googleapis.com%2Fsystem_event"
显示发生了几次抢占。我不知道被抢占的资源会自动重新创建。这解释了为什么我感觉 pod 消失了,而节点却空了。(另请参阅为什么在被抢占后重新创建的节点上的 pod 会卡在 ContainerCreating 状态?)
答案2
可以使用以下 Stackdriver 高级过滤器 [1] 找到此实例上的抢占日志高级日志查询。
您可以将此过滤器的最后一行更改为 [2] 以检查上次启动的时间。或者,您可以在虚拟机上运行“uptime”等命令来查看虚拟机已启动多长时间。
[1]
resource.type="gce_instance"
resource.labels.instance_id="[INSTANCE ID]"
jsonPayload.event_subtype="compute.instances.preempted"
[2]jsonPayload.event_subtype="compute.instances.start"