咱们来看看,有了 CRI 之后, Kubernetes 的架构图:



我们可以看到, CRI 机制能够发挥作用的核心,在于每一个容器项目现在都可以自己实现一个 CRI shim ,自行对 CRI 请求进行处理.这样, Kubernetes 就有了一个统一的容器抽象层,使得下层容器在运行的时候,可以自由地对接,从而进入 Kubernetes 当中去.

作为一个 CRI shim , container 对 CRI 的具体实现,又是怎样的呢?这个时候,我们就需要去看看 CRI 这个接口的定义里面都有什么了.

  • 我们能够看到, CRI 待实现接口,主要有两类:
    • RuntimeService .它提供的接口,主要就是和容器有关的操作.比如,创建和启动容器,删除容器,执行 exec 命令等.
    • ImageService .它提供的接口,主要是和容器镜像相关的操作,比如 拉取镜像,删除镜像等等.
  • 咱们主要来看 RuntimeService 这一部分.在这里, CRI 设计的一个重要原则,就是确保这个接口本身,只关注容器,不关注 Pod .之所以这样的原因有两个:第一, Pod 是 Kubernetes 的编排概念,而不是容器运行时的概念,所以就不能假设所有的下层容器项目,都能够暴露出可以直接映射为 Pod 的 API .第二,如果 CRI 里面引入了 Pod 的概念,那么只要 Pod API 对象的字段发生变化,那么 CRI 就很有可能需要变更.基于以上原因, CRI 设计中,并没有一个直接创建 Pod 或者启动 Pod 的接口.

    CRI shim 还有一个重要的工作,就是如何实现 exec , logs 等接口.这些接口不同在于, gRPC 接口调用期间, kubelet 需要和容器项目维护一个长连接来传输数据.这种 API ,就称之为 Streaming API .

    CRI shim 中对 Streaming API 的实现,依赖于一套独立的 Streaming Server 机制,如下:



    当对一个容器执行 kubectl exec 命令时,这个请求首先会交给 API Server , 然后 API Server 就会调用 kubelet 的 Exec API .此时, kubelet 会调用 CRI 的 Exec 接口,而负责响应这个接口的,就是 CRI shim .但是在这一步, CRI shim 并不会直接去调用后端的容器项目(比如 Docker )来进行处理,而只会返回一个 URL 给 kubelet .这个 URL ,就是该 CRI shim 对应的 Streaming Server 的地址和端口.

    kubelet 在拿到这个 URL 之后,就会把它以 Redirect 的方式返回给 API Server .所以这个时候, API Server 就会通过重定向来向 Streaming Server 发起真正的 /exec 请求,和它建立长连接.

    Stream Server 这一部分具体怎么实现,完全可以由 CRI shim 的维护者自行决定.

    所以, CRI 这个接口的设计,实际上还是比较宽松的.这就意味着,作为容器项目的维护者,在实现 CRI 的具体接口时,往往拥有着很高的自由度,这个自由度不仅包括了容器的生命周期管理,也包括了如何将 Pod 映射成自己的实现,还包括了如何调用 CNI 插件来为 Pod 设置网络的过程.

    基于此,当你对容器这一层有特殊的需求时,优先建议考虑实现一个自己的 CRI shim .

    以上就是关于 CRI 的设计与工作原理的一些内容了.

    以上内容来自我学习<深入剖析Kubernetes>专栏文章之后的一些见解,有偏颇之处,还望指出.

    感谢您的阅读~

    [Kubernetes] CRI 的设计与工作原理的更多相关文章

    1. CSI 工作原理与JuiceFS CSI Driver 的架构设计详解

      容器存储接口(Container Storage Interface)简称 CSI,CSI 建立了行业标准接口的规范,借助 CSI 容器编排系统(CO)可以将任意存储系统暴露给自己的容器工作负载.Ju ...

    2. Linux内核设计第一周 ——从汇编语言出发理解计算机工作原理

      Linux内核设计第一周 ——从汇编语言出发理解计算机工作原理 作者:宋宸宁(20135315) 一.实验过程 图1 编写songchenning5315.c文件 图2 将c文件汇编成32位机器语言 ...

    3. Linux内核设计第二周——操作系统工作原理

      Linux内核设计第二周 ——操作系统工作原理 作者:宋宸宁(20135315) 一.实验过程 图1 执行效果 从图中可以看出,每执行my_ start_ kernel函数两次或一次,my_ time ...

    4. Linux内核设计(第一周)——从汇编语言出发理解计算机工作原理

      Linux内核设计(第一周)——从汇编语言出发理解计算机工作原理 计算机工作原理 汇编指令 C语言代码汇编分析 by苏正生 原创作品转载请注明出处 <Linux内核分析>MOOC课程htt ...

    5. Linux内核设计(第二周)——操作系统工作原理

      Linux内核设计(第二周)--操作系统工作原理 by苏正生 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/U ...

    6. CPU GPU设计工作原理《转》

      我知道这非常长,可是,我坚持看完了.希望有幸看到这文章并对图形方面有兴趣的朋友,也能坚持看完.一定大有收获.毕竟知道它们究竟是怎么"私下勾搭"的.会有利于我们用程序来指挥它们... ...

    7. Kubernetes网络之Flannel工作原理

      目录 1.Docker网络模式 1.1 bridge网络的构建过程 1.2 外部访问 2.Kubernetes网络模式 2.1 同一个Pod中容器之间的通信 2.2 不同Pod中容器之间的通信 2.3 ...

    8. SaltStack 的基本概念与工作原理 架构设计

      随着云计算技术的快速普及与发展,越来越多的企业开始学习和搭建自己的云平台代替传统的 IT 交付模式,企业的 IT 环境也随之越来越复杂,常规的运维方法与技术已经无法满足现在云环境中系统的配置与变更.基 ...

    9. kubelet工作原理

      在调度这一步完成后,Kubernetes 就需要负责将这个调度成功的 Pod,在宿主机上创建出来,并把它所定义的各个容器启动起来.这些,都是 kubelet 这个核心组件的主要功能. kubelet ...

    随机推荐

    1. IP防护等级简介

      IP(INGRESS PROTECTION)防护等级系统是由IEC(INTERNATIONAL ELECTROTECHNICAL COMMISSION)所起草,将电器依其防尘防湿气之特性加以分级 IP ...

    2. Acdream1201 SuSu's Power

      题目:SuSu's Power 链接:http://acdream.info/problem?pid=1201 题意:一个人站在x轴原点上,初始方向向x轴正方向,由一个字符串来控制其运动,字符串由A. ...

    3. MRP没生成MRP汇总表

      设置:工作日历延长

    4. 【JMeter】(1)---入门

      JMeter入门 https://www.cnblogs.com/qdhxhz/p/9222105.html 一.概述 JMeter是Apache下一款在国外非常流行和受欢迎的开源性能测试工具,JMe ...

    5. Python进阶10---魔术方法*

      特殊属性 查看属性 #animal.py class Animal: x = 123 def __init__(self,name): self._name = name self.__age = 1 ...

    6. sh -c

      在Linux使用 echo 并配合命令重定向是实现向文件中写入信息的快捷方式. 比如要向 test.asc 文件中随便写入点内容,可以: $ echo "信息" > test ...

    7. java核心卷笔记--P48字符串3.6.5

      一定不要使用 == 运算符检测两个字符串是否相等 ! 这个运算符只能够确定两个字串是否放置在同一个位置上 . 当然 , 如果字符串放置在同一个位置上 , 它们必然相等. 但是 ,完全有可能将内容相同的 ...

    8. [LOJ3086][GXOI/GZOI2019]逼死强迫症——递推+矩阵乘法

      题目链接: [GXOI/GZOI2019]逼死强迫症 设$f[i][j]$表示前$i$列有$j$个$1*1$的格子的方案数,那么可以列出递推式子: $f[i][0]=f[i-1][0]+f[i-2][ ...

    9. found 12 vulnerabilities (7 moderate, 5 high) run `npm audit fix` to fix them, or `npm audit` for details

      npm 安装包之后,如果出现类似下面的信息 found 12 vulnerabilities (7 moderate, 5 high) run `npm audit fix` to fix them, ...

    10. <TCP/IP原理> (二) OSI模型和TCP/IP协议族

      1.OSI参考模型 1)作用 2)各层的名称和功能 2.对分层网络协议体系的理解 1)不同节点:层次组成不同,作用不同 2)横向理解:虚通信.对等实体.协议.PDU 3)纵向理解:封装与解封.服务.接 ...