gpt4 book ai didi

containers - 如何让 GCE 实例在其部署的容器完成时停止?

转载 作者:行者123 更新时间:2023-12-02 23:36:24 25 4
gpt4 key购买 nike

我有一个执行单个大型计算的 Docker 容器。此计算需要大量内存,运行时间约为 12 小时。

我可以创建一个适当大小的 Google Compute Engine VM,并使用“将容器镜像部署到此 VM 实例”选项来完美运行此作业。然而,一旦作业完成,容器就会退出,但虚拟机仍在运行(并充电)。

如何让虚拟机在容器退出时退出/停止/删除?

当虚拟机处于僵尸模式时,只有 stackdriver 容器仍在运行:

$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bfa2feb03180 gcr.io/stackdriver-agents/stackdriver-logging-agent:0.2-1.5.33-1-1 "/entrypoint.sh /u..." 17 hours ago Up 17 hours stackdriver-logging-agent
161439a487c2 gcr.io/stackdriver-agents/stackdriver-metadata-agent:0.2-0.0.17-2 "/bin/sh -c /opt/s..." 17 hours ago Up 17 hours 8000/tcp stackdriver-metadata-agent

我像这样创建虚拟机:

gcloud beta compute --project=abc instances create-with-container vm-name \
--zone=us-central1-c --machine-type=custom-1-65536-ext \
--network=default --network-tier=PREMIUM --metadata=google-logging-enabled=true \
--maintenance-policy=MIGRATE \
--service-account=xyz \
--scopes=https://www.googleapis.com/auth/cloud-platform \
--image=cos-stable-69-10895-71-0 --image-project=cos-cloud --boot-disk-size=10GB \
--boot-disk-type=pd-standard --boot-disk-device-name=vm-name \
--container-image=gcr.io/abc/my-image --container-restart-policy=on-failure \
--container-command=python3 \
--container-arg="a" --container-arg="b" --container-arg="c" \
--labels=container-vm=cos-stable-69-10895-71-0

最佳答案

创建虚拟机时,您需要授予其计算写入权限,以便您可以从内部删除实例。此时您还应该设置容器环境变量,例如 gce_zonegce_project_id。您将需要它们来删除实例。

gcloud beta compute instances create-with-container {NAME} \
--container-env=gce_zone={ZONE},gce_project_id={PROJECT_ID} \
--service-account={SERVICE_ACCOUNT} \
--scopes=https://www.googleapis.com/auth/compute,...
...

然后在容器内,每当您确定任务完成时:

  1. 请求 API token (为了简单起见,我使用curl 和默认 gce 服务帐户)
curl "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token" -H "Metadata-Flavor: Google"

这将使用如下所示的 json 进行响应

{
"access_token": "foobarbaz...",
"expires_in": 1234,
"token_type": "Bearer"
}
  • 获取该访问 token 并点击 instances.delete api endpoint (注意环境变量)
  • curl -XDELETE -H 'Authorization: Bearer {TOKEN}' https://www.googleapis.com/compute/v1/projects/$gce_project_id/zones/$gce_zone/instances/$HOSTNAME

    关于containers - 如何让 GCE 实例在其部署的容器完成时停止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52748332/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com