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 存储