启动、停止与销毁
三种操作
| 操作 | 在实例处于什么状态时可用 | 作用 | 通常耗时 | 是否可逆 |
|---|---|---|---|---|
| 停止 | running | 关闭容器,保留磁盘,占住 GPU 名额 | 几秒 | 是,可用启动恢复 |
| 启动 | stopped | 在同一台机器、同一块磁盘上把同一个容器重新拉起来 | 几秒 | 是,可用停止撤回 |
| 销毁 | 除 destroyed 以外的任何状态——包括 creating、starting 和 stopping | 移除容器,删除磁盘,把 GPU 归还市场 | 几秒 | 否 |
在使用第三个操作之前,先读停止与销毁的对比。这个决定关系到你是否保住数据、是否继续付费,这里不再重复。
按钮在哪里
实例列表的每一行都带有适用于该实例当前状态的操作,实例详情页的页头也有同一组按钮。不适用的按钮不会显示——运行中的实例没有启动按钮,已停止的实例没有停止按钮。实例还在创建、启动或停止时,销毁按钮仍然可用,所以卡在这些状态里的实例始终在你的掌控之中。控制台从 API 的 allowed_actions 取得这份列表。
停止和销毁都会先要求确认。停止的对话框是「停止此实例?」:它写明 GPU 会继续为你保留、停止期间只收取存储费(附上这个实例每小时的存储费),以及余额用完时实例会被自动停止、并在机器支持时释放 GPU;按停止实例确认,按继续运行取消。销毁的对话框会写明将要删除哪些东西。启动不会问第二遍。
点击之后会发生什么
这三个操作都不是瞬间完成的。实例会进入一个过渡状态,状态标记开始闪动,控制台持续轮询直到机器返回结果:
| 你点击的操作 | 处理期间的状态 | 完成后的状态 |
|---|---|---|
| 停止 | stopping | stopped |
| 启动 | starting | running |
| 销毁 | destroying | destroyed |
实例处于过渡状态时,除了销毁不接受任何其他操作。硬要发起别的操作会返回 409 INVALID_STATE,消息中会指出是哪个状态挡住了它,例如 Cannot stop an instance while it is creating。等过渡完成后再试。哪个状态能转到哪个状态,完整的映射见实例状态。
主机始终不确认的转换不会让实例卡住。30 分钟后,还没落地的停止会把实例放回 running——容器其实还在运行,所以会重新按 GPU 计费——并继续重试停止;还没落地的启动会把实例放回 stopped。这时实例页面会显示上一个操作没有完成及其原因;通过 API 查看时,实例的 error_code 会是 stop_timed_out 或 start_timed_out。
重新启动
启动要求余额够组织届时要跑的一切跑一小时:这个实例的 GPU 和磁盘,加上其他所有运行中、启动中或正在创建的实例的 GPU 和磁盘,以及所有已停止实例的磁盘。余额只是大于零还不够。不够时启动会被拒绝并返回 402 INSUFFICIENT_BALANCE(响应里的 required_micro 就是需要的金额),实例不会有任何变化——先充值余额。实例停止期间累积的存储费会在你启动它的那一刻结算,余额检查用的也是结算之后的余额,因此之后你看到的余额已经算上了整个停止时段。
主机也得接得住这次启动。接不住时,实例仍然是 stopped,磁盘保留,启动被拒绝,控制台用提示框显示对应的消息:
| 响应 | 控制台的提示 | 怎么办 |
|---|---|---|
409 HOST_UNREACHABLE | 此实例所在的机器当前未连接。实例仍处于已停止状态——请稍后再尝试启动。 | 稍后再启动 |
409 START_REFUSED | 机器无法恢复此实例,实例仍处于已停止状态。如果反复出现,请销毁后重新部署。 | API 的消息会说明是主机拒绝了恢复,还是主机已不再持有这个工作负载;后一种情况下销毁实例并重新部署,否则稍后再试 |
503 START_UNAVAILABLE | 暂时无法恢复此实例。实例仍处于已停止状态——请稍后重试。 | 稍后重试。如果恢复其实已经落地,实例会自己进入 running |
409 CAPACITY_UNAVAILABLE | 此实例使用的 GPU 目前正被他人使用,无法启动。实例仍处于已停止状态,磁盘完好——请稍后再试。 | 只会发生在 GPU 被释放过的实例上。稍后再启动:启动成功之前拿不到磁盘上的数据。一直不成功的话,唯一的出路是销毁它(磁盘会一起删除)后重新部署 |
余额用完时 GPU 被释放了的实例——被自动停止的,或者你之前自己停止的,在机器支持的地方——启动时要拿回同一台机器上原来那几块 GPU。平台接受了启动、机器随后才发现它们被占用或已停止服务时,请求不会返回错误:实例先进入 starting,再回到 stopped,实例页面在上一个操作没有完成下显示「此实例在其机器上使用的 GPU 目前正被他人使用。实例仍处于已停止状态,磁盘完好——请稍后再启动,或将其销毁。」参见 GPU 被释放之后。
启动会把你放回同一台机器、同一块磁盘上。不过连接信息会重新签发,所以要重新复制 SSH 命令,不要沿用旧的。参见通过 SSH 连接。
处于 error 的实例
没能成功启动起来、工作负载失败或丢失、任务自己运行完了,或者停止期间容器不见了(workload_gone)的实例,会落到 error。它既不能启动,也不能停止。唯一可用的操作是销毁。读实例页面上的出了什么问题(它解释了实例的 error_code)和日志,搞清楚哪里出了问题,然后销毁它并重新部署。如果平台之后发现工作负载其实在运行或被保留着,它会自己把实例放回 running 或 stopped。
通过 API 操作
以下示例使用 $SUPERHEAT_API 和 $SUPERHEAT_KEY,请按 API 概览 中的说明设置。
curl -X POST -H "Authorization: Bearer $SUPERHEAT_KEY" \
$SUPERHEAT_API/v1/instances/$INSTANCE_ID/stop
curl -X POST -H "Authorization: Bearer $SUPERHEAT_KEY" \
$SUPERHEAT_API/v1/instances/$INSTANCE_ID/start
curl -X DELETE -H "Authorization: Bearer $SUPERHEAT_KEY" \
$SUPERHEAT_API/v1/instances/$INSTANCE_ID
每个请求都会返回处于新的过渡状态的实例。轮询 GET /v1/instances/{id} 观察它何时完成。参见实例。
平台替你执行的操作
当组织的钱花完时,这三个操作中有两个会自动执行:
| 余额 | 会发生什么 |
|---|---|
| 降到 ¥0 | 运行中的实例被停止,磁盘保留。在机器支持的地方,这些实例和已停止实例占着的 GPU 会被释放 |
| 在 ¥0 或以下持续 24 小时,并且到 −¥35 或更低 | 已停止和出错的实例被销毁;磁盘被删除 |
参见自动停止与自动销毁。