如何确保 Google Cloud Compute 实例启动并运行

Evg*_*nko 7 google-cloud-platform gcloud

我从 shell 脚本创建 Google Cloud Compute 实例,然后通过 ssh 在该实例上启动多个命令。

如何保证实例中的操作系统正常运行?

例如:

gcloud compute instances create "$my_name" \ --tags "http-server" \ --image container-vm \ --metadata-from-file google-container-manifest="container.yml" \ --zone "$my_zone" \ --machine-type g1-small

然后我想跑 gcloud compute ssh \ "$my_name" --zone "$my_zone" \ --command 'sudo docker stop $(sudo docker ps -q -a)'

或者 gcloud compute copy-files \ some.conf root@"$my_name":/existing_dir/ \ --zone "$my_zone"

据我了解,如果实例未启动,第二个命令可能会因连接拒绝而失败。

如何确保实例已启动并准备好接受 ssh 连接?

Ant*_*xon 6

只需在发送命令之前检查 SSH 端口是否打开即可。在实例操作系统启动之前,SSH 服务器不会启动:

IP=$(gcloud compute instances list | awk '/'$my_name'/ {print $5}')
if nc -w 1 -z $IP 22; then
    echo "OK! Ready for heavy metal"
    : Do your heavy metal work
else
    echo "Maybe later?"
fi
Run Code Online (Sandbox Code Playgroud)

解释:

  1. 获取实例 $my_name 的 IP
  2. 检查端口 22 是否正在接受传入连接。

-w:连接超时(1秒就足够了)

-z:仅检查端口是否打开并立即退出

  • 这是一个好方法。需要注意的是,gcloud 的默认表格式旨在方便且易于阅读,但不是长期稳定的,因此将来可能会添加新字段并破坏 awk。相反,我建议调用“gcloud 计算实例列表实例名称 --format json”以获得更稳定的输出格式。您可以使用“jq”解析 json 输出。(其他稳定的输出格式包括文本和 yaml。) (3认同)