feat: Cloud Hypervisor 执行器生产级 v1(cloud-hypervisor)
单任务单 VM:API 唤醒(preflight→vmm.ping→vm.create→vm.boot→SSH 就绪)、 暂停/快照/休眠等价/关闭/回收、预热快照池、每任务磁盘 copy、容量与磁盘配额门、 受控 egress fail-closed、VM 事件审计与分类失败;worker/server/autoscaler 接线 (executor=cloud-hypervisor,任务内 LLM 不可自选);默认关闭,不进生产路由。 未做真实 VM 验证:生产主机与本 VM 均无 /dev/kvm、无嵌套虚拟化,验证为 mock + 干跑命令 + 单元测试;真 VM、快照恢复、压测、安全审计见 docs/chv-production-readiness.md。CI 账单故障仍是硬门禁,本提交只到 PR OPEN。
This commit is contained in:
1 parent
aebc6238a6
commit
c371bbdf1e
9 files changed
+2364
-11
No files matched your search
@@ -1288,6 +1288,57 @@ interrupted 且终态任务 cancel 返回 400、心跳后 sweep 不扫刚心跳
|
||||
错误文本或返回结果。worker CLI 的 `--executor` 新增 cloud 选项,
|
||||
构造 CloudExecutor;worker 的 run_one 走 dispatch_task,
|
||||
CloudExecutor 的 dispatch_task/run_task 直接委托给 execute。
|
||||
- CloudHypervisorExecutor(生产级 v1,`cloud/sandbox.py`,
|
||||
执行器名 `cloud-hypervisor`,绝不用 `cloud` 缩写):
|
||||
单任务单 VM:一个任务一个 VM、独立内核/文件系统/网络,
|
||||
任务结束销毁,租户之间无共享路径、无东西向互访;VM 内
|
||||
agent 可有 root,但只能影响本 VM。密钥按现有惯例走运行
|
||||
时环境变量名注入,不进镜像、不进代码、不进任务 prompt
|
||||
落库(SSH argv 里只有 key 文件路径,绝无 key 值)。
|
||||
唤醒是 API 模式:preflight(见下)→ 容量门 → 磁盘配额门
|
||||
→ 每任务磁盘供给(copy 模式复制基础镜像)→ 只以
|
||||
`--api-socket` 起 VMM → 等 `vmm.ping` 通 → `PUT vm.create`
|
||||
(VmConfig)→ `PUT vm.boot` → 等 guest SSH 就绪(默认
|
||||
120 秒)才跑 host.py;超时关 VM 并报分类失败。直接启动
|
||||
命令(`build_vm_command`)只作手动等价写法,执行器不走它。
|
||||
暂停/快照/休眠:`pause_vm`/`resume_vm` 走 ch-remote;
|
||||
`restore_vm` 先 restore 再显式 resume(恢复后默认 paused,
|
||||
不 resume 不算醒);CHV 无原生 hibernate 端点,`hibernate_vm`
|
||||
用 pause + snapshot + shutdown 等价实现,恢复走 restore。
|
||||
预热池 `WarmPool`:预热条目是一次性干净快照 VM,acquire
|
||||
消耗、release 一律销毁,绝不跨任务复用脏 VM;池空回落
|
||||
冷启动,绝不降级 Docker/Local。关闭与清理:任务结束/
|
||||
失败/取消时 `shutdown_vm`(ch-remote shutdown + 杀进程 +
|
||||
删 socket),`cleanup_stale_vms` 处理已死/已关/socket 残留
|
||||
三种情况。审计:VM 的 create/boot/ready/pause/resume/
|
||||
snapshot/restore/shutdown/destroy/failed/recycled 均经
|
||||
audit_callback 发出,worker 接线后转 AuthStore 审计;失败
|
||||
带 kind 分类(kvm_missing/image_missing/guest_not_ready/
|
||||
api_timeout/host_capacity_exceeded/disk_quota_exceeded 等),
|
||||
不笼统 failed。资源与成本:每 VM 的 CPU/内存/磁盘配额、
|
||||
超时、最大轮次(goal 上限 100)复用 worker 现有 quota 语义,
|
||||
不另起一套计费;空闲休眠省成本;autoscaler 按 executor 过
|
||||
滤队列深度并透传 `--executor` 给拉起的 worker。网络与治理:
|
||||
VM 出口默认必须过 CHV_EGRESS_PROXY 白名单代理(未设且未
|
||||
显式允许直连时 preflight 直接失败);审批门仍走任务的
|
||||
approval 与 server 的 merge_gate,VM 内 agent 不能自批。
|
||||
配置(环境变量,见该类 docstring 全表):CHV_BINARY、
|
||||
CHV_KERNEL、CHV_ROOTFS(或 CHV_IMAGE 别名)、CHV_CPU、
|
||||
CHV_MEM、CHV_STATE_DIR、CHV_SSH_KEY/USER/PORT、CHV_CMDLINE、
|
||||
CHV_NET(直接命令用)/CHV_NET_JSON(API 用)、CHV_REMOTE、
|
||||
CHV_MAX_VMS、CHV_DISK_MODE(copy 默认/reuse 仅实验)、
|
||||
CHV_DISK_GB、CHV_EGRESS_PROXY、CHV_TASK_TIMEOUT、
|
||||
CHV_SNAPSHOT_URL、CHV_WARM_POOL_SIZE、CHV_API_TIMEOUT、
|
||||
CHV_READY_TIMEOUT/INTERVAL。默认关闭:server 默认执行器仍
|
||||
是 docker,worker 默认 local,CHV 只在任务创建时显式选
|
||||
`executor=cloud-hypervisor` 且有 CHV worker 认领时才跑;
|
||||
任务内 LLM 绝不能发现/调用它(调度层选择,只在创建层可见:
|
||||
POST /tasks 可选值、本文档、控制台选项,不新增任务内 MCP/
|
||||
工具)。真实验证边界:未做真实 VM 启动验证——生产主机
|
||||
本身是 CVM、无 /dev/kvm、无嵌套虚拟化,本 VM 容器内同样
|
||||
无 /dev/kvm;真 VM、快照恢复、压测、安全审计均在
|
||||
`docs/chv-production-readiness.md` 里标为待办,绝不声称
|
||||
已生产可用。客机镜像内容清单与构建骨架见 `chv-guest/`。
|
||||
- 自动 PR(默认关闭,显式触发,`POST /tasks/{id}/pr`,需项目
|
||||
maintainer 以上权限 approve_merge):仅当任务状态为 merged 时
|
||||
可调(其它状态 409;任务不存在 404;权限不足 403)。逻辑按顺序
|
||||
|
||||
Reference in new issue
Block a user