pVisor VM¶
VM 执行器用 pvisor-vm 启动最小的 Linux 客户机,提供独立的 guest 内核、通过 virtio-fs 服务的工作区,以及由 pVisor smoltcp 数据面处理的网络。Linux 使用 KVM,Apple Silicon macOS 使用 HVF。
pvisor run --executor vm --rootfs image=ubuntu:24.04 \
--stage ../stage-vm --mount "$PWD:stage" -- /bin/sh
准备 rootfs¶
| 方式 | 参数 | 说明 |
|---|---|---|
| OCI 镜像 | --rootfs image=<IMAGE> |
直接拉取镜像,不调用 Docker、Podman 或 Buildah;校验 manifest 和 layer digest,按宿主架构选择 linux/arm64 或 linux/amd64 |
| 准备好的目录 | --rootfs <PATH> |
使用已有 Linux rootfs |
| 宿主根目录(仅 Linux) | --rootfs host |
把宿主 / 作为只读底层,保留宿主 PATH 和 HOME;会暴露宿主内容供读取 |
需要可复现时固定镜像摘要。--image-store 可覆盖镜像缓存目录;多个 VM 共享镜像文件时,可以使用共享镜像缓存。macOS 上必须显式提供 Linux rootfs 或镜像。
写入去向¶
- 合并后的 rootfs 是 guest
/,/workspace是 guest 的工作目录; - 工作区改动进入指定 stage 或默认 Job 存储,退出后保留,供审查和 apply;
- VM 根目录的其他写入使用临时 upper,VM 退出时丢弃;
- 镜像缓存被标为不可变,
apply不能改写被其他 Run 共享的 rootfs。
网络¶
| 模式 | 行为 |
|---|---|
--overlaynet auto(默认) |
静态 guest IPv4 地址、合成 DNS、受策略控制的 IPv4 TCP;guest 没有直接网络旁路 |
--overlaynet off |
不配置 guest 网络,离线 |
不支持的 UDP、IPv6、ICMP、QUIC 和入站转发会失败关闭。deny-all 仍允许已配置的内部 Gateway 路由;需要完全离线时关闭 Gateway 并使用 off。VM 不支持 proxy 模式。
平台准备¶
- Linux:需要可访问的
/dev/kvm;静态 musl 构建内嵌 guest 内核,运行时不需要固件共享库; - macOS:用
just build release构建并签署 Hypervisor entitlement;wheel 自带libkrunfw,源码运行时会下载经 SHA-256 校验的固定版本。
已知缺口¶
- Linux 另外用 namespace 和 Landlock 约束 VMM;macOS 上 VMM 仍拥有调用用户的宿主权限,因此尽管有 guest 内核隔离,也不应把它当作敌对多租户边界;
- 宿主连接器和共享文件仍是边界的一部分;
--safe要求 VM 使用现有的auto网络边界,但不会自动选择 VM。
内存选项¶
--memory 设置 guest RAM 上限,不能直接视为实际物理占用。macOS / Apple Silicon 可显式使用 --vm-memory-pool SOCKET 共享不可变的压缩冷块,默认关闭;共享池退出会使关联 VM 失败。--vm-ram-backing FILE 指定独立的新 RAM 文件,本身不保证节约内存。--vm-ram-compression 使用 FUSE 的 Seekable 压缩路径,与共享池互斥。开启前查看实验与使用决策。