Linux 计算
基础设施

各层做什么,项目如何组合,新实现改变什么

容器 / 虚拟化 / 调度 / 云平台2026.09.23
总览01 / 15

一张地图:从执行能力到云服务

L6云服务向租户交付资源OpenStack
L5调度与编排分配资源、维持期望状态Kubernetes / Ray
L4使用与管理入口组织实例生命周期Docker / libvirt / Incus
L3节点运行时管理镜像与执行任务containerd / CRI-O
L2执行实现启动进程或虚拟机runc / gVisor / QEMU
L1内核机制实施隔离与资源控制namespaces / cgroups / KVM
L0硬件能力支持 CPU 与设备虚拟化VT-x / AMD-V / IOMMU

按职责分组,平台可以跨层。具体调用路径不必经过每一层。

总览02 / 15

两条调用链:执行态与层间接口

应用容器

L5Kubernetes 控制面用户态
↕ HTTPS API · kubelet 发起 watch
L5kubelet用户态
↓ CRI / gRPC
L3containerd用户态
↓ ttRPC / Unix socket
L3/2shim-runc-v2用户态
↓ fork/exec + OCI bundle
L2runc用户态
↓ 系统调用 / 写 cgroupfs
L1namespaces / cgroups内核态

虚拟机 · Proxmox VE

L4PVE API / pveproxy用户态
↓ 本地 HTTP · 转交特权操作
L4pvedaemon / qemu-server用户态
↓ 启动 QEMU 进程,QMP 管理
L2QEMU用户态
↓ /dev/kvm + ioctl
L1KVM内核态
↕ VM entry / exit · 以 x86 为例
L0VT-x / AMD-V硬件

宿主机视角。箭头表示控制与启动关系,运行时 I/O 不必经过所有管理层。

总览03 / 15

两条调用链校准项目所在层次

执行态按宿主机视角标注;用户态服务即使以 root 运行,也不属于内核态。

应用容器 · runc 路径

Kubernetes 控制面用户态L5 · 工作负载控制
↕ Kubernetes API / HTTPS · kubelet 发起 list/watch
kubelet用户态L5 的节点代理 · 协调执行
↓ CRI / gRPC · Unix socket
containerd用户态L3 · 节点运行时,包含 CRI 插件
↓ shim v2 / ttRPC · Unix socket
containerd-shim-runc-v2用户态L3 → L2 · 执行适配与进程监护
↓ fork/exec 启动 runc · 传入 OCI bundle
runc用户态L2 · 按 OCI 配置创建容器进程
↓ 系统调用:clone / setns 等;写 cgroupfs
namespaces / cgroups内核态L1 · 隔离视图与资源控制

虚拟机 · Proxmox VE 路径

Proxmox VE API用户态L4 · pveproxy 接收 HTTPS API 请求
↓ 本地 HTTP · 127.0.0.1:85 · 特权操作
PVE VM 管理用户态L4 · pvedaemon / qemu-server 管理逻辑
↓ 启动 QEMU;QMP / JSON + Unix socket 管理
QEMU用户态L2 · VMM,构建虚拟机与设备模型
↓ /dev/kvm + ioctl · 包括 KVM_RUN
KVM内核态L1 · 提供 VM / vCPU 执行机制
↕ 硬件虚拟化指令 · VM entry / exit(以 x86 为例)
硬件虚拟化硬件L0 · CPU 的 VT-x / AMD-V 等能力

箭头表示控制、启动与接口关系,省略部分内部组件;并非每条指令或每次 I/O 都经过全部管理层。

总览03.1

L0 / L1:提供执行与隔离机制

上层提出要求,内核与硬件负责实施

功能核心机制演进重点
隔离进程视图namespaces与权限、挂载机制组合
限制资源使用cgroupsv1 → v2:统一层级与委派
执行 guestKVM + 硬件虚拟化新设备、架构与机密计算
sudo unshare --uts sh -c 'hostname demo; hostname'
hostname

子进程看到 demo,外层仍看到原主机名。

机制04 / 15

硬件与内核术语速查

术语负责什么
VT-x / AMD-V / Arm EL2CPU guest 执行模式与受控陷入
EPT / NPT / Stage-2guest physical 到 host physical 的内存地址翻译
IOMMU / VFIO设备 DMA 约束与设备直通的内核支持
SR-IOV一块 PCIe 设备暴露多个 Virtual Functions
cgroups v2统一资源控制层级与委派语义
user namespace / idmapped mount身份映射与挂载上的文件所有权映射
机制04.1

L2:OCI runtime 把配置变成进程

OCI(Open Container Initiative)制定容器开放标准。
镜像规范管打包,分发规范管传输,运行时规范管启动。

实现主要特色比较重点
runc经典基线,生态成熟兼容与集成
crunC 实现,强调小体积启动与内存开销
youkiRust 实现内存安全与功能覆盖
sudo runc run --bundle ./bundle demo

config.json 指定命令与隔离设置,rootfs 提供程序与文件。

执行 · 容器05 / 15

OCI:从镜像到运行中的进程

三个规范连接不同环节,runc 接收的是运行准备目录。

规范约定什么具体产物 / 交互
Image Spec程序和依赖如何打包镜像层、配置、manifest
Distribution Spec如何推送和拉取内容客户端与 registry 的分发 API
Runtime Spec容器配置与生命周期bundle、create / start / delete 等
交给 runc 的 OCI bundle
bundle/
  config.json   # 命令、挂载、隔离设置
  rootfs/       # 程序、库和容器文件
谁把它准备好?

上层拉取并解包镜像,准备 rootfs 与运行配置。
runc 据此调用内核,创建并启动进程。

执行 · 容器05.1

L2:沙箱改变应用到宿主的边界

上层仍管理容器,底层执行路径可以改变

路径隔离方式主要代价
普通容器应用直接使用宿主内核共享内核的信任边界
gVisor用户态 Sentry 实现 Linux 接口兼容与 I/O 需验证
Kata Containers容器运行在独立 guest 内核中引入 VM 管理与资源开销
sudo runsc run --bundle ./bundle sandbox-demo

执行同一个 hello 程序,Linux 接口由 Sentry 承接。

执行 · 沙箱06 / 15

普通容器、gVisor、Kata 的执行路径

它们是可选执行路径,各自把隔离边界放在不同位置。

普通 OCI 容器

应用进程↓ Linux 系统调用宿主 Linux 内核

共享宿主内核
namespaces / cgroups 等实施约束

gVisor

应用进程↓ Linux 接口由 Sentry 承接Sentry · 用户态↓ 受限宿主接口宿主 Linux 内核

减少直接暴露的宿主接口
需要验证兼容与 I/O

Kata Containers

应用 + guest 内核↓ 虚拟硬件接口VMM + 宿主 KVM

独立 guest 内核与 VM 边界
增加机器与 guest 管理

接口相近不代表边界相同;设备直通和恢复能力仍取决于具体后端。

执行 · 沙箱06.1

L2:VMM 在通用性与精简之间取舍

KVM 提供执行能力,VMM 组织机器与设备模型

实现核心取向主要取舍
QEMU广架构、广设备、成熟生态兼容面与实现规模较大
Cloud Hypervisor现代云 VM,virtio / VFIO减少遗留设备支持
Firecracker精简 microVM,快照恢复通用设备能力较窄
qemu-system-x86_64 -enable-kvm -m 1024 \
  -drive file=guest.qcow2,format=qcow2 -snapshot -nographic

启动一台 1 GiB VM,本次磁盘写入放在临时层。

执行 · 虚拟机07 / 15

VMM 迁移与设备能力

VMM设备能力侧重状态与迁移边界
QEMU设备/guest 广,VFIO 生态成熟成熟迁移机制,仍受 CPU、设备、版本限制
Cloud Hypervisor现代 virtio、VFIO、热插拔有 live migration,不保证跨版本兼容
Firecracker精简设备;virtio PCI 热插拔为开发预览snapshot/restore 不等于通用 live migration
crosvm客户端设备、独立设备进程、VFIO 路径官方 snapshot 文档标为高度实验性

核验日:2026-09-23。上游 VMM 有能力,不代表每个管理平台都已支持。

执行 · 虚拟机07.1

L3:节点运行时长期管理镜像与任务

把一次性的底层执行,组织成持续运行的节点服务

实现管理范围特色
containerd镜像、快照、任务与插件服务 Kubernetes、Docker 等上层
CRI-OPod sandbox 与容器生命周期围绕 Kubernetes CRI 聚焦设计
sudo ctr images pull docker.io/library/alpine:3.22
sudo ctr run --rm docker.io/library/alpine:3.22 demo echo hello

先管理镜像,再经 shim / runc 启动任务,输出 hello。

管理 · 节点08 / 15

接口定义上下层怎样组合

不同接口连接不同职责,不能串成一条 OCI / CRI / CNI / CSI 流水线

接口连接双方约定的主要功能
OCI镜像生产/消费方、执行管理方与 runtime镜像、分发、运行规范各有边界
CRIkubelet 与节点运行时Pod sandbox、容器、镜像等 RPC
CNI网络调用方与网络插件接入、配置与清理容器网络
CSI存储控制/节点组件与驱动卷供应、挂载、扩容等
libvirt / QMP管理客户端与虚拟化管理层 / QEMU分别提供管理抽象与具体 VMM 控制

Kubernetes API 则统一对象与期望状态,CRD / controller 在这个层面扩展能力。

管理 · 节点08.1

L4:把执行能力组织成管理入口

共同关注生命周期,管理对象与产品范围各不相同

对象代表实现关键区别
应用容器Docker / Podman完整开发生态 / 无必需中心 daemon
VM 管理接口libvirt封装 VMM 控制,供上层调用
完整实例平台Incus / Proxmox统一实例 API / 集成虚拟化运维
qm start 101
qm status 101

复用已保存的 CPU、磁盘与网络配置,启动并查询 VM。

管理 · 使用者09 / 15

L4:Docker 与 Podman 面向使用者

把镜像、网络、卷、构建和交互操作组织成用户工作流

维度Docker · 经典生态Podman · 不同管理路线
进程架构dockerd + containerd 等组件无必需中心 daemon,可开 API service
权限与服务管理支持 rootless,成熟开发生态强调 rootless 与 systemd / Quadlet
构建与应用组合BuildKit / buildx / ComposeBuildah 生态,Compose provider
替换边界CLI、Engine API、Desktop 各有范围需验证 API、构建与 Compose 兼容

共享 OCI 生态,但 Engine API、构建器和开发工作流并非全部相同。

管理 · 使用者09.1

L4:Incus 统一不同类型的实例

承接 LXC / LXD 的机器式管理路线,并统一容器与 VM

Incus 实例 API / 集群

系统容器

init / systemd、多服务

LXC / liblxc
共享宿主内核

OCI 应用容器

当前已支持 OCI 镜像

应用启动语义
仍有自身执行与管理路径

虚拟机

独立 guest 内核

QEMU / KVM
完整系统环境

统一管理:镜像、存储、网络、快照、项目、资源限制与集群

LXD 仍在维护。Incus 的 OCI 支持不等于 Docker API,也不意味着改用 containerd。

管理 · 使用者09.2

L5:调度分配资源,编排维持状态

Kubernetes 放置 Pod;Ray 在集群内调度 task / actor

实现组织中心主要优势
Kubernetes对象 API 与控制器工作负载调谐与扩展生态
Raytask / actor 与逻辑资源分布式 Python、CPU / GPU 任务调度
Kueue / VolcanoKubernetes 上的批处理能力准入配额 / gang scheduling
ray job submit --address http://127.0.0.1:8265 \
  --working-dir . -- python demo.py

提交 Ray 作业;脚本中的 task / actor 再由 Ray 调度。

集群 · 调度10 / 15

KubeVirt:在 Kubernetes 中管理 VM

改变 VM 的管理方式,复用既有虚拟化执行栈

VM / VMI 对象声明虚拟机与运行实例
KubeVirt controllers协调状态与 launcher Pod
节点组件 / libvirt连接 VM 管理接口
QEMU / KVM执行 guest
virtctl start demo-vm
kubectl get vm,vmi

将 VM 置为启动状态,由控制器创建运行实例 VMI。

集群 · VM 编排11 / 15

L6:云平台向租户交付资源服务

在执行与管理之上,增加租户、权限、网络和存储契约

职责OpenStack 经典实现交付内容
计算Nova / Placement实例生命周期与资源分配
网络与存储Neutron / Cinder / Glance网络、卷与镜像
身份与租户Keystone项目、角色与授权基础
openstack server create --image demo-image --flavor m1.small \
  --network demo-net --wait demo-vm

申请租户 VM:云平台协调配额、计算、镜像与网络。

云平台12 / 15

新实现主要改变三类设计选择

功能范围QEMU → 专用 VMM
减少兼容包袱,优化目标工作负载
执行边界普通容器 → gVisor / Kata
改变隔离方式,承担兼容与管理成本
管理模型VM 平台 API → KubeVirt 对象
复用 Kubernetes 控制器与生态

评价“新”的依据:具体收益,以及为此放弃了什么。

演进规律13 / 15

编码 Agent:sandbox 做在哪一层?

本地 CLI,Linux 为主 · 核验:2026-09-24 · 文档 / 源码分支快照

Agent有无、机制与层次能限制什么 / 边界
Codex有 · L2 执行封装 → L1 内核
bubblewrap + seccomp
文件访问、进程可见性与网络
审批另设,实际限制取决于配置
Claude Code有 · L2 执行封装 → L1 内核
bubblewrap + 网络代理
shell 进程树的文件与网络访问
可配置沙箱外重试
Pi本体无 · Agent 内信任 / 扩展逻辑
可外接容器、sandbox 或 VM
项目信任控制资源加载
执行隔离由外部环境提供
OpenCode本体无 · Agent 内工具权限策略
官方建议外接容器 / VM
allow / ask / deny 控制工具调用
权限审批不构成 OS 隔离

审批与信任属于 Agent 逻辑;执行沙箱调用内核机制强制限制访问。

应用分析 · Agent sandbox14 / 15

Codex / Claude Code:限制如何落到 OS?

Linux 路线:Agent 配置策略,执行封装与内核共同实施限制。

限制对象执行封装怎么做实际边界
文件只读 / 可写挂载,拒绝或屏蔽路径进程能读取或修改哪些文件
进程与系统接口namespaces、权限收紧、seccomp可见性与允许使用的系统接口
网络网络隔离 + 受控代理 / 过滤能否出站,以及允许的目的地

审批负责是否放行;sandbox 限制放行后的执行。沙箱外重试会改变这条边界。

此表归纳两者涉及的机制,并不表示它们使用完全相同的配置、过滤规则或覆盖范围。

应用分析 · Agent sandbox14.1

Pi / OpenCode:外部隔离要包住哪些进程?

本体无 OS sandbox 时,部署边界决定哪些操作真正受限。

部署方式受约束的范围仍需留意
仅设信任 / 审批项目资源加载或工具调用进程仍使用原有 OS 权限
仅把工具放进 sandbox被包装的命令与子进程Agent、扩展或其他工具可在边界外
整个 Agent 放入容器 / VMAgent、扩展及其子进程挂载、凭据、网络和外部服务仍需配置

Pi 官方列出整进程与工具级隔离方案;OpenCode 官方建议外接 Docker 或 VM。

可访问的宿主目录与凭据仍然可被使用;运行在容器中不自动等于无宿主访问能力。

应用分析 · Agent sandbox14.2

定位项目:职责、接口、取舍

执行层内核与硬件提供机制
runc、gVisor、QEMU 组织执行
管理层containerd、libvirt、实例平台
维护镜像、任务与生命周期
集群与云Kubernetes、Ray、OpenStack
分配共享资源,交付服务

同层看取舍,上下层看接口。
我们的工作应该复用哪些层,新增哪一层能力?

总结与讨论15 / 15

附录:完整执行链路

Docker
CLI → dockerd → containerd → shim → runc → Linux 内核机制

Kubernetes 容器
API → controller / scheduler → kubelet → CRI → 节点 runtime

Kubernetes 虚拟机
KubeVirt → launcher Pod / libvirt → QEMU → KVM → guest

OpenStack 虚拟机
Nova → libvirt → QEMU → KVM → 硬件虚拟化

这些是管理与启动链路。运行中应用的数据访问不逐次穿过所有管理组件。

附录附录 A1

附录:容器管理项目怎样比较

比较关系替换前需要确认
runc / crun / youki同层 OCI 执行器特性覆盖、rootless、hooks、上层集成
containerd / CRI-OKubernetes 节点运行时候选CRI 兼容、镜像/存储/沙箱集成
Docker / Podman用户 engine 工作流候选API、Compose、构建与 systemd 工作流
Incus / Proxmox实例与虚拟化平台候选集群、存储、备份、权限与运维体验
Incus / Kubernetes存在场景重叠,主要对象不同机器式实例与工作负载控制器体系
附录附录 A2

附录:GPU 会改变执行与安全边界

路径应用如何访问 GPU需要特别确认
普通容器 / Incus 容器共享宿主 GPU 驱动与设备节点驱动攻击面、资源隔离与配额
gVisornvproxy 转发受支持的 NVIDIA ioctl驱动与功能覆盖,仍存在宿主驱动边界
Kata / VM直通或虚拟设备,取决于 VMM/集成IOMMU、设备重置、guest 驱动与兼容
checkpoint / migration依赖 GPU 和软件栈专门支持不能从普通 VM 快照能力自动推导

gVisor 已有 cuda-checkpoint 集成。当前文档指出该 GPU 恢复路径不支持 arm64。

附录附录 A3

附录:四种“恢复”语义

状态类型主要保存什么典型遗漏
文件系统快照文件或块设备内容运行中内存、连接与外部副作用
进程 checkpoint地址空间、线程与部分内核对象设备、不同内核环境与外部服务状态
VM snapshotvCPU、guest 内存与设备状态磁盘可能需另管,版本/CPU 可能不兼容
应用 checkpoint应用主动保存的可继续计算状态依赖应用实现,未必保留交互环境

API 应返回快照范围与一致性级别,避免只提供含糊的 rollback。

附录附录 A4

附录:项目状态与时效性

项目或能力核验日所见状态
Incus / LXD都仍维护,Incus 已有 OCI 应用容器文档
Mesos / Nabla runncMesos 已退休,runnc 已归档
Kueue / DRAKueue 通常沿用默认调度器,DRA 主功能自 v1.35 稳定
Daytona 原公开核心仓库2026 年 6 月起不再维护,核心开发转私有
agent-sandbox / E2B Runtime已有公开 Agent 沙箱管理与执行基础

资料核验:2026-09-23。项目仍维护与某项功能生产可用,是不同判断。

附录附录 A5

附录:官方资料阅读入口

机制与接口
Linux KVM API OCI Kubernetes CRI

隔离与执行
gVisor 架构 Kata Containers Firecracker

调度与控制面
Kueue Overview KubeVirt Nova 架构

Agent 执行平台
agent-sandbox E2B Runtime

每页讲者备注含相关官方来源。完整分层、比较表与来源见配套 Markdown 文档。

附录附录 A6