1. 容器运行时概述

1.1 容器运行时定义

容器运行时(Container Runtime)是负责在操作系统层面创建、运行、停止和销毁容器的软件组件。它直接与操作系统内核交互,利用 Linux 内核的命名空间(Namespaces)和控制组(Cgroups)等特性实现资源隔离与限制。从用户视角看,运行时是容器生命周期管理的核心执行者;从架构视角看,它是容器编排系统与操作系统之间的桥梁。

核心职责:容器运行时负责镜像拉取与解包、容器进程启动、文件系统挂载、网络接口配置、资源配额设定以及容器退出后的清理工作。

1.2 OCI 规范

开放容器倡议(Open Container Initiative, OCI)是 Linux 基金会下的一个开源项目,旨在制定容器格式和运行时的行业标准。OCI 规范由三个核心部分组成:

规范名称 版本 核心内容
OCI 镜像规范 v1.1 定义容器镜像的文件系统层、配置元数据、索引清单的结构与序列化格式
OCI 运行时规范 v1.1 定义容器运行时如何加载镜像、创建容器、管理进程生命周期以及配置挂载点与命名空间
OCI 分发规范 v1.1 定义容器镜像的推送、拉取、存储和发现协议,基于 HTTP API

OCI 规范的出现解决了早期 Docker 独大时容器格式碎片化的问题。任何符合 OCI 规范的运行时都可以运行任何符合 OCI 规范的镜像,实现了容器生态的互操作性。

1.3 运行时分类:低级与高级

容器运行时按抽象层次和功能范围可分为两类:

  • 低级运行时(Low-level Runtime):直接与操作系统内核交互,负责创建和管理容器进程。典型代表:runc(Docker/containerd 默认)、crun(C 语言实现,性能更优)、youki(Rust 实现)。低级运行时通常只关注容器进程的启动与停止,不处理镜像管理、网络配置等上层逻辑。
  • 高级运行时(High-level Runtime):在低级运行时之上提供更完整的容器管理能力,包括镜像拉取、存储管理、网络设置、日志收集等。典型代表:containerd、CRI-O、Docker Engine。高级运行时通常实现 Kubernetes 的 CRI(Container Runtime Interface)接口,作为 Kubelet 与低级运行时之间的中间层。
对比维度 低级运行时 高级运行时
抽象层次 贴近内核,仅管理进程 贴近编排系统,管理完整生命周期
镜像管理 不支持 支持拉取、存储、解包
网络配置 不处理 通过 CNI 插件管理
CRI 支持 不直接支持 原生实现 CRI gRPC 接口
典型实现 runc, crun, youki containerd, CRI-O
容器运行时分类架构 Kubernetes / 编排系统 CRI (Container Runtime Interface) 高级运行时 containerd / CRI-O 高级运行时 Docker Engine 低级运行时 runc / crun / youki 低级运行时 runc / crun Linux 内核 (Namespaces + Cgroups)

1.4 containerd 在 Kubernetes 中的位置

containerd 是当前 Kubernetes 生态中最主流的高级容器运行时之一。它最初由 Docker 公司开发,后捐赠给 CNCF(Cloud Native Computing Foundation)成为毕业项目。在 Kubernetes 架构中,containerd 位于 Kubelet 与低级运行时之间,承担以下关键角色:

  • CRI 实现者:containerd 内置了 CRI 插件(cri plugin),通过 gRPC 接口接收 Kubelet 的 Pod 和容器管理请求。
  • 镜像管理:负责从镜像仓库拉取、缓存、解包容器镜像,支持镜像层复用和垃圾回收。
  • 存储管理:通过 Snapshotter 插件管理容器文件系统快照,支持 overlayfs、devicemapper 等多种存储驱动。
  • 运行时代理:将 CRI 请求转换为对低级运行时(如 runc)的调用,管理容器进程的创建与销毁。
关键数据:截至 2025 年,Kubernetes 集群中 containerd 的采用率已超过 70%,成为默认容器运行时。Docker Engine 在 Kubernetes 1.24+ 中已被弃用,进一步巩固了 containerd 的地位。
containerd 在 Kubernetes 架构中的位置 Kubelet CRI gRPC 接口 containerd CRI Plugin | Image Service | Snapshotter runc (低级运行时) OCI 运行时规范实现 crun / youki 替代低级运行时

1.5 containerd 的核心优势

相比其他容器运行时,containerd 在 Kubernetes 场景下具有以下显著优势:

优势 说明 实际收益
轻量级 仅包含运行容器所需的最小功能集,无 Docker CLI、Swarm 等额外组件 减少资源占用,降低攻击面
CRI 原生支持 内置 CRI 插件,无需额外适配层(如 dockershim) 减少调用链,提升性能与稳定性
插件化架构 支持自定义 Snapshotter、运行时、CNI 网络插件 灵活适配不同存储和网络方案
CNCF 毕业项目 由社区广泛采用和持续维护,版本迭代稳定 长期可用性保障,生态兼容性好
gRPC 管理接口 提供标准化的 gRPC API 用于容器和镜像管理 易于集成和自动化运维
注意:虽然 containerd 是 Kubernetes 的推荐运行时,但在生产环境中仍需根据具体场景(如 GPU 容器、安全容器、Windows 容器)选择合适的低级运行时组合。containerd 支持通过配置切换不同的低级运行时后端。