到期时间
设置到期时间后,时间一到 ctrl 会自动停止或删除 Workspace。本页介绍如何在创建时、单独地或随启动与停止一起设置、修改和清除它。
创建时设置
创建一个在 ctrl 接受命令八小时后到期的 Workspace:
kibo workspace create --template "$template_id" --expires-in 8h- 倒计时从 ctrl 接受命令开始,包含创建耗时。
- 不传
--expires-in则不设置到期时间。 - 访问文件或执行命令不会延长到期时间。
kibo transfer restore接受同样的参数。
--expiration-action 选择到期时做什么:
| 动作 | 结果 |
|---|---|
stop(默认) | Workspace 停止,Volume 与可写层保留 |
delete | Workspace 被删除 |
警告
新建的 Volume 默认随 Workspace 删除。选 --expiration-action delete 时,/data 里的数据会在 Workspace 到期时一起消失。
到期动作由 ctrl 执行,kibo 退出不会影响它。
查看到期设置
显示 Workspace 及其到期设置:
kibo workspace expiration get "$workspace_id"kibo workspace get 与 list 输出的 expiration 包含:
| 字段 | 含义 |
|---|---|
revision | 到期设置的版本,只增不减。没有设置到期时间时也有版本号 |
expires_at | 到期时刻 |
action | 到期动作:delete 或 stop |
claimed_command_id | ctrl 已开始执行到期动作时,对应命令的 ID |
单独修改
设置新的到期时间与动作,或者清除到期时间:
workspace_id=workspace-example
kibo workspace expiration set "$workspace_id" --expires-in 20m --expiration-action delete
kibo workspace expiration clear "$workspace_id"能做哪种修改取决于 Workspace 的状态:
| 状态 | expiration set | expiration clear |
|---|---|---|
AVAILABLE | 可以 | 可以 |
STOPPED | 不可以 | 可以 |
FAILED,且不再占用执行、没有开始删除 | 不可以 | 可以 |
FAILED 的 Workspace 也可能带着到期时间,例如启动在放置阶段失败,留下了启动时设置的到期时间。
重要
ctrl 已经开始执行到期动作后,不能再通过延期取消。
随 start 与 stop 一起设置
kibo workspace start 和 stop 也接受 --expires-in 与 --expiration-action,或者用 --clear-expiration 清除到期时间。两组参数互斥。
停止 Workspace 并让它不带到期时间,或者启动时为这次运行设置到期时间:
# 停止,并让停止后的 Workspace 不带到期时间。
kibo workspace stop "$workspace_id" --clear-expiration
# 启动,并为这次运行设置到期时间。启动耗时计入其中。
kibo workspace start "$workspace_id" --expires-in 30m --expiration-action stop- 到期设置与命令在同一次操作中提交,不存在「已经启动但还没有到期时间」的中间状态,也不需要成功后再执行一次
expiration set。 - 命令成功后版本加一,响应中带有新的
expiration.revision与expires_at。命令失败不改动到期设置。 - 到期参数是命令输入的一部分。同一个幂等键换一个
--expires-in会被判定为冲突,不会静默延期。
不带到期参数时
| 命令 | 对到期设置的影响 |
|---|---|
stop | 消费 stop 类型的到期设置,保留 delete 类型 |
start | 不改动到期设置,也不恢复已被消费的设置 |
期望版本
下面这些命令都带到期设置的期望版本,即 expiration.revision:
| 命令 | 参数 |
|---|---|
kibo workspace expiration set、clear | --expected-revision |
kibo workspace start、stop、delete | --expected-expiration-revision,传入时必须为正数 |
- 不传这个参数时,
kibo先读取当前版本再提交;传入的值原样提交。 - 版本不一致时返回
failed_precondition。对expiration set与clear,状态不允许时也返回同样的错误码,用错误详情里的observed_workspace区分两者。 - 收到
failed_precondition后,先重新读取 Workspace 再决定,不要用旧的意图覆盖新状态。
脚本需要重放时,把 --command-id 与期望版本一起传入:
revision=$(kibo --json workspace get "$workspace_id" | jq -er '.result.expiration.revision')
kibo workspace expiration set "$workspace_id" --command-id renew-example \
--expected-revision "$revision" --expires-in 20m用 API
kibo 命令 | API | 期望版本字段 |
|---|---|---|
workspace expiration set、clear | UpdateWorkspaceExpiration | expected_revision |
workspace start、stop、delete | StartWorkspace、StopWorkspace、DeleteWorkspace | expected_expiration_revision |
两个字段都对应 expiration.revision。
下一步
- 生命周期:停止、启动与删除对 Workspace 做了什么。
- Volume 与导出恢复:哪些 Volume 随 Workspace 删除。
- kibo 命令行:幂等键与怎样安全地重放命令。