kubernetes接口模块
云原生世界里有一件非常“工程师气质”的事情:所有复杂系统都被拆成接口。接口一旦稳定,生态就会爆炸式增长。
在 Kubernetes 里,最核心的四个接口就是:
CRI / OCI / CNI / CSI
Kubernetes 运行栈
flowchart TD
A[Kubernetes API Server]
A --> B[Kubelet]
B --> C[CRI]
B --> D[CNI]
B --> E[CSI]
C --> F[Container Runtime]
F --> G[OCI Runtime]
D --> H[Network Plugin]
E --> I[Storage Plugin]
G --> J[Linux Kernel]
一句话理解:
| 接口 | 解决什么问题 |
|---|---|
| CRI | 怎么运行容器 |
| OCI | 容器格式标准 |
| CNI | 容器网络 |
| CSI | 容器存储 |
1.CRI — 容器运行接口
Container Runtime Interface, CRI 的出现,是 Kubernetes 架构的一次重要进化。
早期 Kubernetes 只支持:
Docker
后来社区意识到一个问题:
Kubernetes 不应该绑定某个容器引擎。
于是提出 CRI。
Kubelet 只做一件事:
调用 CRI API
flowchart LR
A[Kubelet] --> B[CRI API]
B --> C[containerd]
B --> D[CRI-O]
典型 runtime:
| Runtime | 项目 |
|---|---|
| containerd | containerd |
| CRI-O | CRI-O |
| DockerShim | 已废弃 |
Docker 后来退出 runtime 位置,就是因为 CRI。
2.OCI — 容器标准
Open Container Initiative, OCI 是一个标准组织,定义两个核心规范:
| 规范 | 内容 |
|---|---|
| Image Spec | 容器镜像格式 |
| Runtime Spec | 容器运行规范 |
容器运行最底层 runtime:
runc
运行流程:
flowchart LR
A[containerd] --> B[runc]
B --> C[Linux namespace]
B --> D[cgroup]
换句话说:
OCI 定义容器长什么样。
3.CNI — 容器网络接口
Container Network Interface
容器网络非常复杂。因为 Kubernetes 的设计目标是:
每个 Pod 都有自己的 IP。
这和 Docker 完全不同。
网络流程:
flowchart TD
A[Pod]
A --> B[veth]
B --> C[CNI Plugin]
C --> D[Overlay Network]
C --> E[Route]
常见 CNI:
| 插件 | 项目 |
|---|---|
| Calico | Calico |
| Flannel | Flannel |
| Cilium | Cilium |
Cilium 现在很火,因为使用 eBPF。
4.CSI — 容器存储接口
Container Storage Interface
Kubernetes 的存储问题很现实:
容器会死,但数据要活。
CSI 让 Kubernetes 可以接入各种存储系统。
架构:
flowchart LR
A[Kubernetes]
A --> B[CSI Driver]
B --> C[NFS]
B --> D[Ceph]
B --> E[Cloud Disk]
典型驱动:
| 存储 | 项目 |
|---|---|
| Ceph | Ceph |
| EBS | AWS |
| NFS | 标准网络存储 |
5.四大接口的完整关系
Kubernetes 的真实运行路径:
flowchart TD
A[Kubernetes API]
A --> B[Kubelet]
B --> C[CRI]
C --> D[containerd]
D --> E[runc]
B --> F[CNI]
F --> G[Calico]
B --> H[CSI]
H --> I[Ceph]
E --> J[Linux Kernel]
Kubernetes 本身几乎不做具体事情。
它只是一个:
控制系统 + API 平台
真正干活的是插件。
Unix 的核心理念是:
Do one thing well
Kubernetes 的做法:
| 系统 | 负责 |
|---|---|
| Kubernetes | 调度 |
| containerd | 容器 |
| CNI | 网络 |
| CSI | 存储 |