适用:官方目录中具备安装归属回执的样例(包括中文和英文样例)。此功能需样例服务、Studio 及含归属记录的新样例包共同更新;不能只更新前端。
- 已安装卡片点击「卸载」,确认清除样例数据及用户对样例的修改。
- 任务显示在版本说明上方:检查样例资源归属 → 删除知识网络及指标 → 删除函数和 Skill → 删除数据源 → 删除样例数据库及存储 → 验证清理。
- 卸载完成后,安装和卸载历史仍可查询。刷新目录,选择新版本,按正常流程安装并验证。
- 清理失败或服务中断时点击「继续清理」;没有清理成功前禁止重新安装。重试核对剩余资源归属,已删除资源视为完成。
安装失败时保留「重试」,继续使用原安装计划。需要重新安装离线包时,先点击「清理失败安装」,确认删除已创建的样例资源和数据;清理成功后按正常流程安装已导入包。失败清理沿用现有重试的操作资格、卸载接口及任务状态,不增加用户归属或权限配置。
失败安装允许尚未创建知识网络或执行资源。扫描失败未保存 Catalog ID 的旧记录,仅按样例固定名称查询 Catalog,并核对归属;钩子部分失败时读取私有状态目录中的配置和执行资源回执。回执缺失、损坏或资源归属冲突时停止,不仅删除状态文件。原失败记录和清理尝试均保留在历史中,离线包删除也不再删除失败安装记录。
原安装包明确声明不创建函数和 Skill 时,安装器在调用钩子前保存空执行资源回执,不要求钩子另写回执文件。钩子尚未成功时记录的知识网络 ID 只是计划目标:若该 ID 已属于其他资源,清理会保留它,仅删除本次已确认归属的数据库和 Catalog;成功钩子确认过的知识网络若归属改变,仍停止清理。声明不明或会创建执行资源时,不把缺失回执当作空清单。
共享安装流程在首次执行平台钩子前检查知识网络归属。若已确认目标属于其他资源,直接终止安装;只有能确认此前未执行钩子的尝试,才记录空执行资源回执。之前执行过钩子的重试不会补造或覆盖回执。查询结果不明确时仍由原钩子判断,不把查询失败视为“没有资源”。
卸载不做备份、迁移或用户修改合并,不会恢复被删数据。离线包仍保留,可以重装或单独删除;系统数据库、其他样例、样例服务状态 PVC 和共享 Kubernetes 命名空间不删除。
知识网络、指标及数据源使用原安装记录中的 ID,并核对样例身份和版本标签。指标在该知识网络范围内清理。函数工具箱和 Skill 只使用安装脚本创建后记录的 ID;托管安装遇到未在本次归属记录中的同名资源会拒绝复用。数据库的 StatefulSet、Service、Secret、PVC 必须包含一致的样例 ID、版本和数据镜像注解,删除带 UID 前置条件。
缺少归属记录的旧安装不能自动卸载,不通过名称猜测函数或 Skill 所有权。旧发布包不可覆盖:发布新的样例版本,把安装脚本和归属记录工具一起打包。供应链和世界杯的 owned-execution.json 保存在私有安装状态目录,输出 resources.ownedExecution;订单入门没有函数或 Skill,输出明确的空清单。此结构是安装器内部状态,不是新的 BKN 标准或 Kubernetes 目录协议。
删除 PVC 后的数据回收行为由 StorageClass 的 reclaimPolicy 决定;Retain 存储需由集群管理员另行回收,不宣称物理介质已经擦除。
内置一键安装同样写入数据库归属注解,并在解析镜像后保存固定 dataImageRef;重试复用该引用。受归属管理的安装保持一个镜像引用,不在创建后切换注册表;需切换源时应在部署配置中明确指定固定镜像。
- 管理员
POST /api/studio/samples/{sample}/installations/{installation}/uninstall,请求为空,接受后返回 202。 - 沿用任务查询及历史查询,不增加独立服务或调度器。
operation为install或uninstall;卸载状态为uninstalling、uninstall_failed、uninstalled。- 卡片
canUninstall由服务端权限及归属记录决定。卸载完成后卡片回到not_installed,保留 installationId 供历史查询。 - 重装获得新安装 ID 和 attemptId,旧卸载请求不能误删重装资源。历史保留旧安装、每次卸载尝试和新安装的版本与阶段。
供应链 0.1.4、世界杯 0.1.2、订单入门 0.1.2 的新包包含归属记录。正式目录发布状态见 0.2.0 总体实施进度。旧包保持不可改写,刷新目录不能为已有旧安装补造归属记录。
当前主线使用知识网络 DELETE 级联清理版本化指标,不再逐个删除旧版指标 API。 若 Backend 明确返回“代理同步中”的 409,卸载器在 120 秒重试调度窗口内最多发起 60 次删除尝试, 每次等待后重新核对网络归属,再由 Backend 的原子删除检查确认同步 generation 已收敛。 generation 是 Backend 内部字段,卸载器不猜测其值,也不绕过删除保护。 等待预算到期后不发起新请求;在途请求可能越过该窗口。HTTP 客户端的 30 秒超时 约束单次 socket 操作,并非整个响应的总耗时,因此 120 秒不是端到端硬截止时间。 整个卸载继续沿用原有的 300 秒调度预算,在下一次 API 或数据库操作前检查是否到期; 同样不强制取消在途请求。其他 409 保留一次重试,不进入同步等待。
同步未及时完成时,任务停留在 uninstall_failed,错误码为
uninstall_proxy_sync_timeout,后续函数、数据源和数据库清理不会执行。
任务错误包含原始 HTTP 状态、经过格式校验的错误码和已知安全原因;不保存上游任意
error details、响应正文或认证信息。Studio 沿用现有错误说明展示,待同步完成后可重试卸载。
等待期间网络消失视为已删除;归属标签变化则立即停止,避免清理替换后的资源。
升级样例服务时必须同时应用同版本官方 Chart 的服务账号及 Role,不能仅更新镜像并保留不兼容的旧 RBAC。正式 Chart 的生命周期权限限定在 openbkn-samples 命名空间;PVC 读取用于检查资源归属,PVC 及数据库资源删除用于已确认的样例卸载,不授予业务用户额外角色或跨命名空间权限。
安装中的数据库资源检查失败应显示在“准备样例库”阶段,后续步骤仍为待执行。卸载先展示“检查样例资源归属”,该步骤通过后才开始删除。权限拒绝返回 database_permission_denied;其他读取失败返回 database_resource_check_failed。错误说明包含受影响的资源类型和样例命名空间,不返回原始 kubectl 输出、凭据或 Secret 内容。管理员应检查官方 Chart 的配置及 Kubernetes API 可用性;反复重试或删除安装状态文件不会修复权限问题。
历史失败记录保留原样,不追写成成功,也不凭新发布包补造资源归属。完成部署修正后,按现有流程重试清理;只有任务确认 uninstalled 才表示卸载完成。