胡文成的个人博客

CRI接口介绍

2024-07-26

一、CRI接口(Container Runtime Interface)

1)概念
  • 是一个插件接口,使得kubelet能够使用各种容器运行时,而无需重新编译集群组件

  • 它是kubelet与容器运行时之间通信的主要协议

  • 当通过gRPC连接到容器运行时, kubelet将充当客户端

2)CRI协议定义

参考协议定义

2)实现了CRI接口的容器运行时
  • Containerd

    Containerd最早是Docker Engine中的,后来Docker为了将Docker Engine做得更轻量、快速和健壮。

    2016年,将containerddockerd中独立出来,并完成了与dockerd的集成。独立出来的dockerd全面支持OCI规范,这样containerd也支持除runc依赖的其他OCI实现。

    2017年,Docker将containerd捐献给CNCF基金会

    2019年,containerd毕业

    docker-with-containerd

    containerd独立后,发送给Docker Engine的请求,将经过以下几步:

    1. Docker daemon 完成镜像管理的操作(拉取、更新镜像)
    2. daemon会为创建容器进行准备工作(创建 OCI bundles):镜像的信息和运行时的信息。
    3. daemon 调用 containerd 的 API
    4. 收到请求的 containerd不会直接去操作容器(也就是不直接作为容器的父进程,从而防止 containerd挂掉影响容器),而是先创建一个 container-shim 进程
    5. container-shim 调用 runc cli 来运行容器,并启动 Unix domain socket 暴露 API 提供给 containerd进行容器的管理。
  • CRI-O

    Red Hat牵头,IntelIBMHyperSUSE等公司联合开发的一种容器运行时,它诞生以来就为了完成一项任务:实现Kubernetes CRI接口。

    原理:它在后端利用runc进行基本容器的管理,同时服务器向前端提供gRPC API服务。介于两者之间的所有事情都由CRI-O本身或一些核心库完成。

    img
  • Docker Engine

    就是Docker之前的架构

    img
  • Mirantis Container Runtime

    这是Docker企业版的容器运行时

扫描二维码,分享此文章