Kibotos

Volume

Volume独立于任何 Workspace 存在的持久卷。一个 Workspace 最多绑定一个 Volume,默认挂载在 /data。 让 sandbox 的数据跨暂停保留,sandbox 删除后也不丢失。本页介绍按名称创建 Volume、把它挂进 sandbox、删除它,以及查询返回的内容。

概述

网关支持下面这些 Volume 接口:

接口用途
POST /volumes按名称创建独立 Volume,或取得这个名称下已有的 Volume
GET /volumes列出 Volume
GET /volumes/{id}查询一个 Volume
DELETE /volumes/{id}删除 Volume 及其数据
  • 每个 sandbox 最多挂载一个独立 Volume,在创建时用 volumeMounts 指定。
  • 创建时没带 volumeMounts 的 sandbox 有自己的 /data Volume,删除 sandbox 时连同数据一起删除。
  • 删除 sandbox 不删除用 volumeMounts 挂载的独立 Volume,需要显式删除。
  • 暂停保留 Volume,需要跨暂停保留的文件写入 Volume,见暂停与恢复。

按名称创建 Volume

POST /volumes 按名称创建独立 Volume。同一名称同时只由一个 Volume 持有,结果取决于名下最新的、未删除的那个:

名下最新的 VolumePOST /volumes 的结果
没有新建一个,返回 201
可用、已挂载或正在扩容返回它,201
正在创建等创建完成后返回 201
创建失败删除它,再新建一个,见失败的 Volume
扩容或删除失败409,消息带 Volume ID 与失败原因
结果未知重放当初的创建。仍未知时返回 409,消息带原因
正在删除409 volume deletion is pending,稍后重试

Volume 可用期间,用同一名称重复调用 POST /volumes 得到的是同一个 Volume,因此可以在每次创建 sandbox 之前调用它。

把 Volume 挂进 sandbox

创建 sandbox 时在 volumeMounts 里指定 Volume。一个 sandbox 最多挂载一个独立 Volume。

volumeMounts 指向失败的 Volume 时,创建返回 409,消息带失败原因,见失败的 Volume。

失败的 Volume

失败的 Volume 怎样处理,取决于它是否可能还有数据:

失败可能还有数据结果
创建失败没有,它从未可用由下一次同名的 POST /volumes 替换,不需要先删除
扩容或删除失败有网关不替它删除,用这个名称调用 POST /volumes 返回 409

下一次创建替换创建失败的 Volume 时:

  • 新建成功返回 201。
  • 容量仍不足返回 503,消息含 resource_exhausted。容量恢复后,同一个请求即返回 201。
  • 其他原因失败按原因返回 409 或 502,消息带原因。

要重建扩容或删除失败的 Volume,先用 DELETE /volumes/{id} 删除它。

删除 Volume

DELETE /volumes/{id} 删除 Volume。删除 sandbox 会留下它的 Volume,不再需要的 Volume 要自己删除。

警告

删除 Volume 会丢弃其中的数据。

查询结果里的 Volume 挂载

GET /sandboxes/{id} 与列表接口返回的 volumeMounts 使用稳定的 Volume 名称和挂载路径。

  • Volume 已被删除、处于非可用状态或映射不完整时,GET /sandboxes/{id} 返回 500,不会误报为 sandbox 不存在。
  • 列表接口对同一种情况返回空的 volumeMounts 数组。
  • SDK 的列表调用只保留 volumeMounts 这一个字段,其他字段需要通过 getInfo() 读取,见 sandbox 信息。

下一步

本页内容