如何自动重启 GCE 抢占式实例?

Posted

技术标签:

【中文标题】如何自动重启 GCE 抢占式实例?【英文标题】:How do I automatically restart a GCE preemptible instance? 【发布时间】:2015-09-29 08:44:08 【问题描述】:

如何自动重启抢占式 Google Compute Engine 实例?我只有一个不需要 100% 正常运行时间的实例,但我想在数据中心再次卸载后重新启动。我尝试自动重启的实例/服务器有自己的启动磁盘,我希望每次重启时都使用它。

【问题讨论】:

【参考方案1】:

您可以尝试使用Instance Group Manager 设置大小为 1 的池。然后它将尝试在实例被抢占后重新创建。

您应该知道,不能保证您的实例有足够的容量。正如docs 所说:

可从有限数量的 Compute Engine 资源中获得抢占式实例,但可能并不总是可用。

【讨论】:

发生了一件很奇怪的事情。我能够设置实例组管理器以使用我想要的永久磁盘,并且我能够让 GCE 自动启动实例。但是,一夜之间,机器变得无法访问,即使通过 SSH,即使生成的实例仍然可以停止并消耗 6% 的 CPU。 更新:它似乎在过去 12 小时内工作正常。鉴于失败的奥秘,我倾向于相信这只是 GCE 的一个短暂问题。那,或者它只在它必须重新启动实例时发生。 关于“可抢占式实例可从有限数量的 Compute Engine 资源中获得,并且可能并不总是可用。”在过去的两周里,有好几天没有可以在 us-central1-c 区域中启动任何大小的抢占式实例。这只是我个人的经验。应该非常认真地对待文档中的警告。 这现在大部分都在工作,但是大约每周一次,即使 GCE GUI 显示它已经启动,实例也无法通过 web 甚至 Google ssh 密钥访问。其他人有这个问题吗?我的印象是,当资源实际上不可用时,实例应该显示为关闭,而不是启动。重置实例可以解决问题,但我试图避免这样的手动步骤。 在这个答案中再详细一点会很好,例如应该创建什么类型的实例组。【参考方案2】:

您可以创建一个 f1-micro 实例,每月在多个数据中心免费使用一个实例并创建一个 cron 作业

*/10 * * * * /snap/bin/gcloud beta compute instances start --zone "yourzone" "yourinstance" --project "yourproject"

在您运行gcloud auth login 一次之后。

这将每 10 分钟重新启动一次您的实例。当然,您也可以将其设置为一个小时或更长时间。通过更多的脚本,也可以完成指数回退之类的事情。

【讨论】:

以上是关于如何自动重启 GCE 抢占式实例?的主要内容,如果未能解决你的问题,请参考以下文章

Google Compute Engine 如何决定在自动扩缩时关闭哪些实例?

docker重启 容器自动重启

如何修改java类不自动重启服务

EC2 重启后自动运行 .bat 文件,无需远程连接

通过 GKE 资源预留进行 GCE 自动扩缩

docker内部容器自动重启配置。