Kibotos

labels 与 annotations

labels 与 annotations 是你保存在 Workspace、Volume、Egress 与 Resolver 上的自有键值数据。本页介绍怎样设置和修改它们,以及怎样按 label 查找资源。

概述

这几种资源各有两组字符串到字符串的映射,给上层调用方存自己的数据。ctrl 不解释它们,不据此调度、授权或计费。规则沿用 Kubernetes。

labels调用方附在 Workspace、Volume 等对象上的键值对,可以按 label 筛选列表。annotations调用方保存在 Workspace、Volume 等对象上的键值对。Kibotos 只保存 annotation;要筛选列表,用 label。
用途需要按它筛选的短值原样存取的任意值
可筛选是否

警告

labels 与 annotations 不是秘密。能读到资源的调用方和 kibo 都能看到它们。不要放 token、密钥或由它们推出的值,也不要把某个 label 当作访问控制。

创建时给出

创建 Workspace、Volume、Egress 或 Resolver 时传 --label 与 --annotation:

kibo workspace create --template "$template_id" --label team=infra --annotation note='nightly build'
kibo volume create --capacity 10G --label team=infra
kibo egress create --address proxy.example.com:1080 --label team=infra
kibo resolver create --https https://dns.example.com/dns-query --label team=infra
  • 两个参数都可重复,格式 key=value。
  • 只在第一个 = 处切分,所以 annotation 的值可以含 =;key= 表示值为空。
  • 同一个 key 重复给出时,在发请求前就被拒绝。
  • labels 与 annotations 与创建命令在同一个事务里写入,也参与幂等比较:同一个幂等键换一份数据重放会冲突。

按 label 筛选

在 kibo workspace list、volume list、egress list 或 resolver list 上传 -l 或 --label:

kibo workspace list --label team=infra --label tier=gold
kibo volume list --include-deleted -l team=infra
kibo egress list -l team=infra
  • 每个条目要求 label 存在且值逐字节相等,多个条目须同时满足。
  • annotations 不参与筛选。
  • 在 Workspace 与 Volume 的列表上,可以与其他过滤条件、--include-deleted 组合。已删除的 Workspace 与 Volume 仍返回两组数据,也能被选中。
  • kibo 的下一页提示里带着同样的筛选条件。

修改

set 替换资源的 labels 或 annotations,clear 删除全部:

kibo workspace labels set "$workspace_id" team=infra tier=gold
kibo workspace labels clear "$workspace_id"
kibo workspace annotations set "$workspace_id" note='nightly build'
kibo volume labels set "$volume_id" team=infra
kibo volume annotations clear "$volume_id"
kibo egress labels set "$egress_id" team=infra
kibo resolver labels set "$resolver_id" team=infra

警告

修改整体替换映射,没写到的 key 被删除,不做合并。要加一个 label,把已有的 label 与新的一起传入。

  • 内容与当前相同时,修改成功且版本不变。
  • 已删除的 Workspace 与 Volume 不接受修改,返回 failed_precondition。

版本

每次修改都带期望版本,与当前版本不符时返回 aborted,内容不变。

  • labels 与 annotations 各有自己的版本,互不影响,也不影响资源的其他版本,例如 Workspace 的资源版本与绑定版本。
  • 不传 --expected-revision 时,kibo 先读取当前版本再提交;提交时版本已变化则返回冲突,不自动重试。
  • 脚本需要重放修改时,把 --command-id 与 --expected-revision 一起传入。

kibo 的输出

命令显示内容
getLabels 与 Annotations 两项,每行一个条目,为空时省略。含不可打印字符的 annotation 值加引号显示
get --wide另有两个版本,在 Revisions 一节
list默认不显示 labels。--wide 加上 LABELS 一列,-L key 把一个 label 显示成单独的一列,没有这个 label 的行显示 -
--jsonlabels、annotations、labels_revision、annotations_revision 字段,为空的 map 不输出

哪些列表命令接受 --wide 与 -L、-L 的列怎样命名,见命令自带的通用参数。

key 与 value

labelsannotations
key[前缀/]名字:前缀是小写 DNS 子域名,最长 253;名字 1–63 字符,首尾是字母或数字,中间可以有 -、_、.同左
value空,或最长 63 字符,字符规则同名字任意不含 U+0000 的 UTF-8
合计上限(全部 key 与 value 的字节数)65536262144
版本labels_revisionannotations_revision
  • 违反字符规则或上限时返回 invalid_argument,并指出字段与 key。
  • kibotos.app 及其子域名形式的前缀留给 Kibotos 自己的组件使用,ctrl 不据此拒绝请求。例如 E2B 兼容网关使用 e2b.kibotos.app/。

用 API

操作API
创建时给出CreateWorkspace、CreateVolume、CreateEgress、CreateResolver 的 labels、annotations
按 label 筛选ListWorkspaces、ListVolumes、ListEgresses、ListResolvers 的 label_selector,前两者可与 include_deleted 组合
修改各资源上的 Update…Labels 与 Update…Annotations,例如 UpdateWorkspaceLabels。传空映射删除全部
  • 翻页时,label_selector 必须与取得游标的那次请求相同。
  • 能力名是 workspace.labels、workspace.annotations、volume.labels、volume.annotations。老版本的服务端会静默丢掉未知字段,写入前先确认能力名存在;缺少时 kibo 以退出码 14 失败,不会创建一个丢了字段的资源。
  • Egress 与 Resolver 的 labels、annotations 没有单独的能力名,随资源本身的能力 workspace.network_policy.egress.socks5 与 workspace.network_policy.resolver 提供。

下一步

本页内容