CRI 是 Container Runtime Interface(容器运行时接口)的缩写。它在 Kubernetes 中是一个极其关键的概念
简单理解:CRI 是 kubelet 和容器运行时之间沟通的“标准普通话”。
下面从“为什么需要它”、“它是什么”、“怎么工作”三个角度帮你彻底搞懂。
- 为什么需要 CRI?(解决什么问题)
在 Kubernetes 早期,kubelet 要直接支持各种容器运行时(Docker、rkt、容器等)。每增加一个新的运行时,kubelet 的代码就要改一遍,非常臃肿且难以维护。
CRI 的目的就是解耦:
kubelet 不需要关心底层用的是 Docker 还是 containerd。
容器运行时 只要实现了 CRI 规定的接口,就能被 Kubernetes 使用。
这就像电脑的 USB 接口:只要设备符合 USB 标准,电脑就能识别并使用,不需要为每个设备定制接口。
- CRI 具体是什么?(从规范层面)
CRI 是一套基于 gRPC 的 API 接口定义。它规定了 kubelet 可以调用哪些方法来管理容器和 Pod。
主要包含两类服务:
RuntimeService:管理 Pod 和容器的生命周期(创建、启动、停止、删除等)。
ImageService:管理镜像(拉取、查看、删除等)。
任何实现了这些 gRPC 接口的程序,都可以作为 Kubernetes 的容器运行时。