Kibotos

kibo 命令行

用 kibo 命令行可以创建 Workspace、在里面工作,并把这些操作写进脚本。本页介绍最常用的命令、kibo 怎样等待结果,以及怎样安全地重复一条命令。每条命令的全部参数见 kibo 命令。

提示

第一次用 kibo?快速开始一步步带你安装、注册并创建第一个 Workspace。

前提条件

  • 从发布包安装的 kibo。它有三个构建:Linux/amd64,以及 Apple Silicon 或 Intel 上的 macOS。选哪个见 身份与注册。
  • 本机上已注册的 Operator 身份,见 身份与注册。

除此之外不需要别的 token 或密码,见 kibo 怎样连接。

第一次使用

创建一个 Workspace,把 ID 存进变量:

workspace_id=$(kibo workspace create --template "$template_id" --memory 1G -q)
kibo workspace get "$workspace_id"
  • create 会等到 Workspace 可用,最多等一小时,见等待结果。
  • -q 只输出 ID。不加时 create 输出一段摘要:首行是 Workspace ID 与状态,末行给出打开终端的命令。
  • 之后的命令里,Workspace 与 Volume 的 ID 可以只写开头几位,只要能唯一确定,例如 kibo workspace get ws-01k6。

执行一条命令、把文件传进去再取回来,然后打开终端:

kibo workspace exec "$workspace_id" -- /bin/echo ready
printf 'release installation smoke\n' > local.txt
kibo workspace file put "$workspace_id" local.txt /data/local.txt
kibo workspace file get "$workspace_id" /data/local.txt downloaded.txt
cmp local.txt downloaded.txt
kibo workspace terminal "$workspace_id"

在远端 shell 中输入 exit 退出终端。

按任务查命令

每行给出一条典型命令,任务链接到介绍这一组其余命令的页面。template_id、workspace_id、volume_id 请替换为实际的 ID。

管理 Workspace

任务命令
列出可用的 Templatekibo template list
用更多资源创建kibo workspace create --template "$template_id" --cpu 2 --memory 4G --disk 20G
按 label 查找 Workspacekibo workspace list --label team=infra
给 Workspace 加 labelkibo workspace labels set "$workspace_id" team=infra tier=gold
调整 CPU、内存或磁盘kibo workspace update "$workspace_id" --cpu 2 --memory 4G --disk 40G
设置到期时间kibo workspace expiration set "$workspace_id" --expires-in 8h
停止与启动kibo workspace stop "$workspace_id"
删除kibo workspace delete "$workspace_id"
查看删除释放了什么kibo workspace cleanup-status "$workspace_id"

在 Workspace 里工作

任务命令
执行命令kibo workspace exec "$workspace_id" -- /bin/echo ready
打开终端kibo workspace terminal "$workspace_id"
传入、取回文件kibo workspace file put "$workspace_id" local.txt /data/local.txt
在本机浏览器打开 Web 服务kibo workspace service http "$workspace_id" --tcp-port 8080
把 TCP 端口转发到本机kibo workspace service forward "$workspace_id" --tcp-port 5432
查看桌面kibo workspace desktop view "$workspace_id"

网络与数据

任务命令
允许访问互联网kibo workspace network set "$workspace_id" public-internet
创建 Volumekibo volume create --capacity 10G
扩容 Volumekibo volume resize "$volume_id" --capacity 20G
导出已停止的 Workspacekibo transfer export "$workspace_id"

等待结果

workspace create、start、stop、delete 默认会等待:ctrl 接受命令后,kibo 持续查询这条命令的结果,直到 Workspace 变为 AVAILABLE、STOPPED 或 DELETED。等待期间不会重复发送这条命令。

在终端里运行时,标准错误上有一行随状态刷新的进度;其他情况下只在开始等待时输出一行。

--wait-timeout 限制总等待时间,默认一小时;--timeout 限制单次请求。--no-wait 在 ctrl 接受命令后立即返回,此时 Workspace 可能还在 CREATING 或 STOPPING。这些参数在各命令上的情况见命令自带的通用参数。

重要

结束等待不会取消命令。等待超时、按 Ctrl-C 或连接断开后,ctrl 仍会执行已经接受的命令,kibo 以退出码 18 退出,错误信息包含 Workspace ID、命令 ID、查询命令与最后一次看到的状态。用这个命令 ID 查询,不要换一个幂等键重新提交。

  • 创建失败时,错误信息说明原因。
  • create 与 start 提交请求后没有收到响应时,kibo 用同样的 ID 和输入最多一共发送三次;stop 与 delete 不自动重发。仍然拿不到结果时输出这个 ID,供你事后查询。
  • 到期动作由 ctrl 执行,kibo 退出不会影响它。

在脚本中使用 kibo

需要用法
只要结果的 ID,赋给变量-q
机器可读的输出--json,见 JSON 输出
不弹出确认--yes。没有终端可以提示时必须加
远端命令的结果workspace exec 的退出码,见 kibo 退出码

等待成功时,JSON 输出是 WorkspaceCommandResult,字段见 JSON 输出。result.current_workspace 来自命令完成后的再一次查询;这次查询失败时它为 null,原因在 result.current_error,命令本身仍然成功。

--no-wait 时输出 ctrl 接受时的 Workspace。执行依赖当前状态的操作前,可以先用 kibo workspace get 再查一次。

幂等键与结果未知

每条写命令都带一个幂等键(command ID),所以可以安全地重复。不传 --command-id 时 kibo 自动生成;脚本可能要再跑同一条命令时,传入自己的 ID:

kibo workspace stop "$workspace_id" --command-id stop-example
kibo --json workspace command get "$workspace_id" stop-example

ctrl 已有这个 ID 的命令时,不会再提交:

  • 同一个 Workspace、同一种命令时,kibo 报告已有命令的结果。命令仍在处理中时等它完成;加 --no-wait 时返回处理中的记录。

  • 属于另一个 Workspace 或另一种命令时,命令失败,换一个 ID。

  • 重跑时原请求若仍在传输中,ctrl 只接纳其中一条,另一条以冲突拒绝,命令不会执行两次。

  • 请求超时或结果未知时,用同一个命令 ID 查询,或者用同一个 ID 和参数重跑同一条命令。重跑返回原命令的结果;当前状态另外用 kibo workspace get 查看。

  • 查不到命令不代表请求失败,不要因此换 ID 重发。

  • 所有写命令共用的规则(包括期望版本)见幂等键与期望版本,以及原生 API 页的幂等键。

kibo 怎样连接

kibo 通过两条路访问 Kibotos:

路径用于认证
控制面,发往 ctrl创建、查询、启停 Workspace用 Operator 身份做 mTLS 认证,只信任注册时保存的 ctrl 证书
数据面,直接连到运行 Workspace 的 node执行命令、传文件、终端等操作短期会话凭证,由 kibo 在命令执行期间自动获取,不落盘。这条连接信任系统根证书和 ctrl 证书,使用与控制面相同的代理设置,不跟随重定向

证书、身份目录与代理的细节见身份、配置与连接。

下一步

本页内容