0. 前言
为什么写这个系列
市面上 K8S 教程一大堆,大部分是两种写法:
一种是"面向面试题"——罗列 Component、Pod、Deployment、Service,每个概念一段定义加一个 YAML,看完你记住了不少名词,但还是不知道整个东西怎么转起来的。
另一种是"官方文档翻译"——内容对了,但信息密度低得吓人,一页纸能讲清楚的事情撑一百页,你读着读着就走神了。
这个系列想做的不是这两种。
全书的核心叙事
这本书有一条主线——从 docker run 一个容器开始,一步步走到管理几百个集群。
具体来说,顺着这个路径:
docker run 一个容器
→ 容器到底是什么(Namespace + Cgroup + OverlayFS)
→ 一百个容器怎么分到三台机器上
→ 状态存哪、怎么保证不丢(etcd + Raft)
→ 最小的调度单元为什么不是容器(Pod)
→ Deployment / StatefulSet / DaemonSet 各管什么场景
→ Pod IP 会变,Service 怎么帮你稳住
→ 数据怎么持久化(PV/PVC)
→ 谁可以调这个 API(Auth + RBAC)
→ 流量大了怎么自动扩(HPA/VPA/CA)
→ CPU 和内存超卖的风险在哪(QoS)
→ 物理机不够了,虚节点顶上(Virtual Kubelet)
→ 怎么自己写一个控制器(Informer + CRD)
→ CRI/CNI/CSI 三大接口怎么解耦具体实现
→ Scheduler 决定 Pod 跑哪台机器的完整流程
→ 原地升级怎么做到不停机换镜像
→ GPU 调度跟 CPU 有什么不一样
→ 多集群管理和跨集群调度(Karmada / Clusternet)
从单机内核机制,到分布式共识,到调度策略,到多集群纳管——每个阶段的上一章是下一章的基础,下一章是上一章的自然延伸。
两个贯穿全书的视角
1. 接口和依赖
K8S 的每个组件、每个概念,我都从两个问题出发——
- 它需要下层提供什么能力?
- 它给上层暴露什么能力?
比如 etcd——它需要内核提供文件 I/O 和网络 TCP(下层依赖),它给 API Server 提供 KV 存储和 Watch 推送(上层接口)。调度器——它需要 API Server 提供未分配节点的 Pod 列表,它给 API Server 返回"某个 Pod 分配到了某个 Node"。
顺着这个视角走一遍,你看到的就不是一堆孤立的组件名字,而是一个能力栈——每一层只关心上下两层的接口,跟 TCP/IP 协议栈一样。
2. 源码 + K3S 对比
市面上九成的 K8S 教程不敢碰源码。后果是很多概念被讲成了玄学——"Pod Sandbox"、"控制循环"、"Watch 机制"听起来云里雾里。
这个系列每个概念都尽量落到源码上。不是让你逐行读懂 K8S 的全部代码(那是 humanly impossible),而是在关键的地方切开给你看:"你看,所谓控制循环就是把 spec.replicas 和 status.replicas 比一下,不一致就调"。
同时我会穿插 K3S 的实现来做对比。K8S 和 K3S 遵守同样的接口规范,但工程选型上有差异——比如 etcd vs SQLite、Flannel 手动部署 vs 内置、组件独立进程 vs 单二进制。这些差异恰恰能帮你看清楚"哪些是 K8S 的接口契约,哪些是具体的实现选择"。全书 17 章里,凡是涉及架构、调度、证书、存储的地方,都有 K8S 和 K3S 的对比视角。
文章结构
总共 17 章,分三个阶段:
第一阶段:概念地基(1-4)
容器到底是怎么回事 → K8S 架构全景(Control Plane + Data Plane 各组件职责)→ etcd 和 Raft 共识算法 → Pod 为什么是最小调度单元。
这四章把"容器是什么、集群怎么组、状态存哪里、为什么多一层 Pod"四个地基问题讲清楚。后面所有章节都建在这上面——连"API Server Watch 推送"都不理解的话,控制器模式根本没法讲。
第二阶段:生产必备(5-11)
工作负载(Deployment / StatefulSet / DaemonSet)→ 服务发现与网络(Service + kube-proxy)→ 存储(PV/PVC + StorageClass)→ 安全(Auth + RBAC + NetworkPolicy)→ 弹性伸缩(HPA/VPA/CA)→ 资源超卖与 QoS → 虚拟节点(Virtual Kubelet)。
这里每一章对应一个"把 K8S 搬到生产环境时一定会遇到的问题"。不用全记住——翻到目录,哪章用到看哪章。
第三阶段:深入原理与扩展(12-17)
控制器模式与 CRD → 标准接口(CNI / CSI / CRI)→ 调度原理 → 原地升级 → GPU 管理与调度 → 多集群管理(Karmada / Clusternet)。
这一部分往深处走:怎么扩展 K8S(自己写 CRD + Controller)、三大接口怎么解耦具体实现、调度器到底怎么选 Node、GPU 调度的额外复杂度、以及当单个集群不够用时怎么搞多集群。
适合谁
- 用过 Docker、写过
kubectl apply,但对 K8S 的整体认知还比较模糊的人 - 想理解 K8S "为什么这样设计"而不仅仅是"怎么用"的后端工程师
- 正在 K3S 或 K8S 上搞事情,想深入理解两者架构差异的人
不适合完全零基础——你至少要知道 kubectl 是个什么东西,以及 docker run 后面发生了什么(第一章会回顾,但如果你的基础是零,建议先跑几个容器再说)。
你可以跳过某些章节
这本书是"线性叙事"写的,但你不是非得顺着读:
- 你只想知道 Pod 和 Deployment 怎么用?读第 4、5、6 章就够了。
- 你对调度和 GPU 感兴趣?跳去第 14、16 章,前面只需要理解"Controller Manager Watch API Server"这个前提。
- 集群已经在跑了、Pod 各种被驱逐?直接翻第 10 章(超卖与 QoS)。
- 想知道 K3S 和 K8S 到底区别在哪?搜 "K3S" 扫一遍,每章有对比的地方都有标记。
写作原则
几条自定的规矩:
- 不堆砌概念。 一个概念如果不讲"为什么会需要它"我就不提。
- 代码优先。 能用代码解释的不用散文。代码尽量从真实源码简化而来,而不是伪代码。每章末尾有"解答"板块回答文中穿插的思考题,用信息密度而不是字数来填充。
- 思考题在文中,答案在底部。 读的时候先自己想想,想不通了再翻下去看答案。每道题都是"如果不先思考直接看答案,收获砍半"的那种。
- 不假装你一定会。 我会假定你用过 Docker、写过几个 Pod,但不会假定你懂 Raft 或 iptables。该补的补,不跳步骤。
开始吧
如果你准备好了,翻到第一章——docker run 背后到底发生了什么。
如果翻了几页发现看不懂或者觉得写太差,也是意料中的事——标题都说了,从入门到放弃。