1. 课程导论:容器运行时控制面概述、资源模型与 CRI 的关系、课程目标与学习路径

1.1 容器运行时控制面:从“单机执行”到“集群编排”的桥梁

在 Kubernetes 生态中,容器运行时(Container Runtime)负责真正启动、监控和销毁容器。然而,Kubernetes 控制面(Control Plane)并不直接调用 runc 或 containerd 的底层接口,而是通过一套标准化的抽象层——容器运行时接口(CRI)——来解耦编排逻辑与运行时实现。

容器运行时控制面可以理解为:Kubelet 内部负责与容器运行时交互的模块集合,它包含 CRI 客户端、资源管理(CPU/内存/设备)、镜像拉取、日志/监控采集等子组件。控制面的核心职责是:

  • 生命周期管理:Pod 创建、启动、停止、删除的全流程协调。
  • 资源隔离与分配:将 Pod Spec 中的 CPU、内存、巨页、设备等资源约束,转换为容器运行时可理解的 cgroup 配置。
  • 状态同步:周期性从运行时获取容器状态,更新至 Etcd 中的 PodStatus。
  • 可观测性:暴露容器级别的 metrics、日志、事件。
关键认知: 容器运行时控制面是 Kubernetes 节点代理(Kubelet)与底层容器引擎之间的“翻译层”与“策略执行点”。没有这一层,Kubernetes 无法统一管理不同运行时(containerd、CRI-O、Kata Containers)的资源模型差异。

1.2 资源模型与 CRI 的关系:双向映射的契约

Kubernetes 的资源模型(Resource Model)定义在 Pod Spec 中,包括 requests、limits、resources.claims(DRA)、overhead 等字段。而 CRI 是这些资源模型向下传递的“管道”。两者之间的关系可以用一张双向映射图来概括:

资源模型与 CRI 双向映射关系 资源模型 ↔ CRI 双向映射 Kubernetes 资源模型 Pod Spec 中的资源声明 • CPU requests / limits • Memory requests / limits • HugePages • Device (DRA) claims • Overhead (sandbox) • QoS class (Guaranteed/Burstable/BestEffort) → 声明式、面向调度 CRI 资源接口 运行时可理解的资源描述 • LinuxContainerResources cpu_period / cpu_quota / cpu_shares memory_limit_in_bytes • HugepageLimits[] • CDIDevices / Device (DRA) • LinuxSandboxResources → 命令式、面向执行 Kubelet 转换 资源模型 → CRI 参数 核心映射:Pod 的 requests/limits → CRI 的 LinuxContainerResources.cpu_quota / memory_limit_in_bytes

从上图可以看出,Kubelet 是资源模型与 CRI 之间的“翻译引擎”。它读取 Pod Spec 中的资源声明,经过 QoS 计算、准入校验、资源池分配后,组装成 CRI 的 LinuxContainerResources 结构体,最终通过 gRPC 调用传递给容器运行时。

实践要点: 理解资源模型与 CRI 的映射关系,是调试“容器资源超卖”、“OOMKill 误判”、“CPU 节流异常”等生产问题的前提。例如,cpu_shares 对应 requests,cpu_quota 对应 limits,两者在 CRI 中是独立字段,Kubelet 的转换逻辑直接影响调度与执行的一致性。

1.3 课程目标与学习路径

本课程旨在帮助学员建立从 Kubernetes 资源模型到 CRI 实现的全链路认知,掌握容器运行时控制面的核心设计原理与工程实践。具体目标如下:

维度 目标 对应章节
理论 理解 CRI 接口规范、资源模型语义、Pod 生命周期与运行时交互流程 2–5 章
映射 掌握 CPU/内存/设备/巨页在 Pod Spec 与 CRI 之间的精确转换规则 6–10 章
实现 深入 containerd / CRI-O 的 CRI 插件源码,理解资源分配与隔离实现 11–18 章
扩展 掌握 DRA(动态资源分配)、NRI(节点资源接口)、Sandbox 资源模型 19–24 章
排障 能够通过 CRI 工具(crictl、nerdctl)诊断资源相关异常 25–28 章
实战 完成一个自定义资源模型到 CRI 插件的端到端集成项目 29–30 章

1.4 学习路径建议

本课程按“基础 → 映射 → 源码 → 扩展 → 排障 → 实战”的递进结构组织。建议学员按以下路径学习:

  1. 基础夯实(第 1–5 章):先掌握 CRI 接口定义、Pod 生命周期、资源模型基础概念,建立整体框架。
  2. 映射深入(第 6–10 章):逐类资源(CPU、内存、设备、巨页、Overhead)学习 Pod Spec 到 CRI 参数的转换细节,配合 crictl 验证。
  3. 源码分析(第 11–18 章):阅读 containerd / CRI-O 的 CRI 插件核心代码,理解资源分配、cgroup 写入、OOM 处理等实现。
  4. 扩展与排障(第 19–28 章):学习 DRA、NRI、Sandbox 等高级特性,掌握 crictl、nerdctl、ctr 等工具的排障技巧。
  5. 实战项目(第 29–30 章):完成一个自定义资源模型到 CRI 插件的集成项目,巩固全链路能力。
前置要求: 建议学员具备 Kubernetes 基础操作经验(Pod、Deployment、kubectl),了解 Linux cgroup v1/v2 基本概念。如果对 containerd 或 CRI-O 的架构尚不熟悉,建议先阅读官方文档的“架构概览”部分。

1.5 本章小结

本章作为课程导论,明确了三个核心认知:

  • 容器运行时控制面是 Kubelet 与容器运行时之间的“策略执行层”,负责资源翻译与生命周期协调。
  • 资源模型与 CRI 之间是“声明式 → 命令式”的双向映射关系,Kubelet 是核心转换引擎。
  • 本课程按“理论 → 映射 → 源码 → 扩展 → 排障 → 实战”六阶段递进,帮助学员构建从上层编排到底层运行时的完整知识体系。