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 有自己的/dataVolume,删除 sandbox 时连同数据一起删除。 - 删除 sandbox 不删除用
volumeMounts挂载的独立 Volume,需要显式删除。 - 暂停保留 Volume,需要跨暂停保留的文件写入 Volume,见暂停与恢复。
按名称创建 Volume
POST /volumes 按名称创建独立 Volume。同一名称同时只由一个 Volume 持有,结果取决于名下最新的、未删除的那个:
| 名下最新的 Volume | POST /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 信息。
下一步
- Sandbox 与生命周期:暂停、恢复与到期时间。
- 命令与文件:把文件写进 Volume。
- Volume 与导出恢复:Workspace 的 Volume 怎样工作。