LabHub
学习 学习路径 课程

KCNA — Kubernetes 与云原生入门

读 CNCF 的地图 — 成熟度、交付、服务网格

在 LabHub 中继续学习

一句话总结

CNCF Landscape 中数百个 logo 不是需要背诵的对象。按它们位于解决哪类问题的位置分组, 即使出现新项目,也能找到它所属的位置。成熟度阶段则是社区对该项目现在是否适合用于生产的信号。

概念图: 它们位于解决哪类问题的位置 · 不完整 · 中立管理与成熟度信号 · Sandbox

为什么需要它

Kubernetes 是刻意保持不完整的。网络交给 CNI,运行时交给 CRI,存储交给 CSI。 如果本体包办一切,不但无法维护,还会与特定实现绑定。

代价是选择的负担。从“选哪种 CNI”到“选哪个策略引擎”,需要作出许多决定。 CNCF 是为这个生态提供中立管理与成熟度信号的基金会。

它如何运作

项目成熟度的三个阶段

阶段 含义 示例
Sandbox 实验性。面向早期采用者。API 可能发生破坏性变更 新项目
Incubating 已有多个生产使用案例,committer 也更加多元 (随时间变化)
Graduated 成熟。已具备安全审计、治理和多元贡献者 Kubernetes、Prometheus、Envoy、containerd、etcd、Argo、OPA

阶段不代表功能优劣,而是治理和采用的成熟度。Sandbox 不表示性能差, Graduated 也不表示一定适合我们的情况。但它可以作为“使用期间项目会不会消失”的风险信号。

扩展接口——Kubernetes 如何调用外部实现

最后一项尤其重要。Operator 模式是“用 CRD 定义新的资源类型, 再附加监视该资源的控制器,把领域知识变成代码”。也就是把 Kubernetes 的 reconciliation loop 复用于自己的问题。

交付——CI、CD 与 GitOps

CI 是“每次提交都构建和测试”,CD 是“自动部署构建结果”。 GitOps 又把 CD 反转了一次。

Git repository 就是期望状态,agent 像控制器一样进行 reconcile。 准确地说,这是把 Kubernetes 的声明式模型扩展到组织流程。 由此获得的是可审计性(提交日志记录谁在何时更改了什么)、drift 检测 (即使有人手动修改,也会恢复原状)和回滚(还原 commit)。Argo CD 与 Flux 是代表性实现。

Service Mesh

它源于这样的需求:不修改应用代码,也能加入重试、timeout、mTLS、流量切分和请求级观测。 传统实现会为每个 Pod 附加代理(sidecar),让所有流量都通过它。

代价也很明确:每个 Pod 都增加一个代理,内存和延迟随之增加,还多出一个需要运维的组件。 因此最近出现了不使用 sidecar,而在节点级代理或 eBPF 中完成相同工作的趋势,例如 ambient 模式。

开放标准

在实际工作中会遇到的情况

作者家庭实验室的平台栈,以实物形式呈现了这张地图: 网络是 Cilium 1.20(eBPF、无 kube-proxy),L4 load balancer 是 MetalLB(地址池 10.0.0.200-215), 存储是 csi-driver-nfs + NAS,GitOps 是 ArgoCD,registry 是 Harbor,观测采用 kube-prometheus-stack, DB 是 CloudNativePG(PostgreSQL 18、双实例 streaming replication),虚拟化使用 KubeVirt v1.9.0。 核心在于:每个位置插入一个组件。按位置阅读 Landscape,便能如此整理。

版本兼容的咬合点也在实际中出现过。使用 Cilium Gateway API 时, 需要 Gateway API CRD v1.6.1。在 v1.2 中,tlsroutesreferencegrants 还不是 v1, 导致控制器直接拒绝启动。“CRD 也有 API 版本,版本不匹配时控制器无法启动”, 这就是扩展模型的现实。

最令人印象深刻的教训来自 KubeVirt。所有组件状态均为 AllComponentsReady,VM 却无法启动。 拆开 virt-launcher Pod spec 后,发现缺少包含 init container 所需可执行文件的 volume mount。 照作者的原话来说:“状态为 Ready”与“实际能够运行”是两个不同命题。 这已经是同一集群第三次确认这个事实,也是对“为什么 observability 不能止于一个状态字段”最简短的解释。

接下来阅读什么

本模块没有实验。后续读物会整理 observability signal,最后通过测验结束课程。