Skip to content

容器标准

容器生态能互通,关键在于标准把职责拆开:镜像如何表达、镜像如何分发、容器如何启动、Kubernetes 如何调用运行时、网络和存储如何插件化。标准让 Docker 构建的镜像可以被 containerd 拉取,也让 Kubernetes 能替换底层运行时。

标准分层

标准或接口关注点典型实现或使用方
OCI Image镜像格式、层、清单、配置Docker、BuildKit、containerd、Podman
OCI Runtime如何根据 bundle 启动容器runc、crun、gVisor
OCI Distribution镜像仓库的拉取和推送协议Docker Registry、Harbor
CRIkubelet 调用容器运行时的接口containerd、CRI-O
CNI容器或 Pod 网络插件接口Calico、Cilium、Flannel
CSI存储系统接入编排平台的接口云盘、Ceph、NFS、各类存储插件

OCI:镜像和运行时的共同语言

OCI 主要解决两个问题:

  • 镜像怎么表达:层、清单、平台架构、启动配置。
  • 容器怎么启动:文件系统 bundle、命名空间、cgroup、挂载、生命周期钩子。

对日常使用者来说,最重要的影响是:镜像不再只属于 Docker,镜像已经成为云原生交付中的通用制品。

CRI:Kubernetes 与运行时的边界

CRI 是 kubelet 调用容器运行时的接口。kubelet 不需要知道底层是 containerd 还是 CRI-O,只要运行时实现 CRI,就可以接入 Kubernetes。

这解释了一个常见现象:Kubernetes 集群中可以没有 Docker Engine,但仍然能运行 Dockerfile 构建出来的镜像。因为 Kubernetes 真正需要的是符合镜像标准和 CRI 接口的运行时。

CNI:Pod 网络的插件化

CNI 负责给容器或 Pod 配置网络。Kubernetes 创建 Pod 时,会让网络插件为 Pod 分配 IP、配置路由和网络策略能力。

不同 CNI 插件侧重点不同:

插件方向关注点
基础连通Pod 跨节点互通、Service 转发
网络策略控制 Pod 间访问关系
可观测性连接追踪、流量分析、故障定位
高性能eBPF、直连路由、减少封包开销

CSI:存储的插件化

CSI 让 Kubernetes 能以统一方式接入不同存储系统。应用通过 PVC 申请存储,具体由哪个云盘、分布式存储或本地存储提供,由 StorageClass 和 CSI 插件决定。

这个分层让业务 YAML 不需要直接绑定某个云厂商 API。迁移环境时,通常可以保持 PVC 使用方式不变,只替换底层 StorageClass。

选型时怎么看

问题关注点
镜像能不能在不同环境运行是否符合 OCI 镜像格式,架构是否匹配
Kubernetes 节点用什么运行时是否实现 CRI,运维生态是否成熟
Pod 网络怎么排查当前使用的 CNI 插件、网络策略、路由模式
PVC 为什么绑定失败StorageClass、CSI 插件、存储容量和权限
镜像仓库如何治理镜像签名、漏洞扫描、保留策略、访问控制
别急,先让缓存热一下。