咱们来看看,有了 CRI 之后, Kubernetes 的架构图:
我们可以看到, CRI 机制能够发挥作用的核心,在于每一个容器项目现在都可以自己实现一个 CRI shim ,自行对 CRI 请求进行处理.这样, Kubernetes 就有了一个统一的容器抽象层,使得下层容器在运行的时候,可以自由地对接,从而进入 Kubernetes 当中去.
作为一个 CRI shim , container 对 CRI 的具体实现,又是怎样的呢?这个时候,我们就需要去看看 CRI 这个接口的定义里面都有什么了.
- 我们能够看到, CRI 待实现接口,主要有两类:
- RuntimeService .它提供的接口,主要就是和容器有关的操作.比如,创建和启动容器,删除容器,执行 exec 命令等.
- ImageService .它提供的接口,主要是和容器镜像相关的操作,比如 拉取镜像,删除镜像等等.
咱们主要来看 RuntimeService 这一部分.在这里, CRI 设计的一个重要原则,就是确保这个接口本身,只关注容器,不关注 Pod .之所以这样的原因有两个:第一, Pod 是 Kubernetes