为沙箱创建快照
保存某一时刻的内存、设备状态和磁盘;保存期间沙箱暂停,之后继续运行。快照完成后返回。会唤醒沙箱。同时有两个请求使用同一名称时:一个得到该名称,另一个返回 409 name_taken。
所需权限范围:write。
https://api.glac.ai/v1/sandboxes/{id}/snapshots授权
路径参数
请求头参数
请求体JSON可选
Returns
201
快照。
- replicatedbooleanrequired
快照是否已完整地存在于节点复制磁盘所用的对象存储中(所有部分都已在那里,且索引最后写入),这样同一站点中复制到同一对象存储的节点就能从它创建沙箱、从它分叉,以及把沙箱回滚到它。复制磁盘的节点 (
--upload) 会在后台发布它创建的每个快照,时间在创建快照的调用返回后一两秒。快照的磁盘不会整个复制:发布时会固定沙箱自己的磁盘在快照那一刻于对象存储中的状态,只带上那时对象存储中还没有的数据块;其内存的上传方式与休眠镜像相同。在此之前为 false;对于不复制到任何对象存储的节点上的快照、快照开始发布之前创建的快照,以及内存不分层的机器的快照,则永远为 false:这样的快照照旧在其所在节点上使用。 - memory_loadablebooleanrequired
在本节点上从快照创建的沙箱,是否会从快照那一刻继续运行,包括进程。false:快照的内存是由宿主机没有保留的 Firecracker 构建版本保存的,或者保存时的虚拟机设备设置与节点现在启动虚拟机所用的不同(或者快照为
lost);由保留的构建版本保存的快照,会由那个构建版本加载 (Node.firecrackers)。快照会原样保留,在用保存它的那个环境启动的节点上可以再次加载。在此期间,从它创建或回滚到它的沙箱会得到快照的磁盘并从磁盘启动:快照中运行的东西都不会在其中运行,其host_failure会说明这一点(cause为node_changed)。
400
请求不符合本调用的要求。invalid_json:请求体不是 JSON 对象;unknown_field:请求体中有本调用不接受的字段;unknown_parameter:查询中有本调用不接受的参数;invalid_field:某个字段或查询参数类型错误或超出范围;invalid_name:name 不是有效的名称;expires_in_the_past:expires_at 不是将来的时间;invalid_idempotency_key:Idempotency-Key 为空或超过 255 个字符。
401
missing_api_key, invalid_api_key, expired_api_key, invalid_token.
403
凭据无权执行此操作。needs_api_key:沙箱令牌不能执行此操作。spend_limit_reached:沙箱因达到支出上限而被冻结;它会连同数据一起休眠,直到上限提高。account_share_reached:账户在本节点数据盘上没有足够的空间容纳快照:沙箱的内存,以及磁盘和云盘目前的数据(见 GET /internal/node 的 drive.accounts)。没有创建任何东西。
404
请求中指定的对象不存在。sandbox_not_found:沙箱不存在。
409
某个对象的状态不允许此操作。name_taken:已有快照使用该名称,且没有设置 replace;exclusive_volume_attached:沙箱挂载了非共享存储卷;sandbox_failed:沙箱处于 failed 状态;idempotency_key_reused:该键已与另一个请求体一起使用过;idempotency_in_progress:使用该键的第一个请求仍在执行;busy:一次没有完成的挂载之后,某个存储卷仍占着沙箱的一个空余磁盘(客户机对它的读取被卡住,是一个数据块迟迟不来的云盘),等读取结束后才会卸下;或者沙箱的客户机在它的某个云盘上有一次读取被卡住(数据块迟迟不来:错误信息会指明是哪个云盘以及卡了多久),直到那次读取结束:稍后再次发起同一调用即可。
default
其他任何失败,格式相同。internal (500):节点出错;错误信息不会多说,节点日志中以请求的 id 记录了原因。unavailable(503,可重试):no_capacity,节点的网络槽位都已占用;memory_full,调用需要启动的虚拟机(创建、唤醒、从磁盘启动、恢复、回滚、构建)在宿主机内存中放不下(还要算上已承诺给其上运行的虚拟机的内存),也没有暂停或空闲的虚拟机可以让其休眠来腾出空间(节点的 memory);drive_full,调用需要构建模板,而节点的数据盘没有空间(节点的 drive);unavailable,节点正在关闭、沙箱 10 分钟后仍处于 starting、沙箱没有响应,或者沙箱正在迁到本节点(带 Retry-After: 1);fenced,节点的租约隔离了该沙箱 (Node.lease)。moved (409):沙箱已迁到另一个节点,由 to 指明。