什么是Kubernetes的CRI - 容器运行时接口
我们都知道Kubernetes不会直接和容器打交道,Kubernetes的使用者能接触到的概念只有pod,而pod里包含了多个容器。当我们在Kubernetes里用kubectl执行各种命令时,Kubernetes工作节点如何悄悄地为我们生成底层的容器呢?
这一切是通过Kubernetes工作节点里所谓“容器运行时”的软件在起作用。大家最熟悉的容器运行时软件当然是Docker,然而Docker只是Kubernetes支持的容器运行时技术的一种。
为了让Kubernetes不和某种特定的容器运行时技术绑死,而是能无需重新编译源代码就能够支持多种容器运行时技术的替换,和我们面向对象设计中引入接口作为抽象层一样,在Kubernetes和容器运行时之间我们引入了一个抽象层,即容器运行时接口。
在CRI还没有问世的Kubernetes早期版本里,比如1.3版本里,添加了对另一个容器运行时技术rkt的支持,即rktnetes项目。
这个项目虽然让Kubernetes增加了除Docker之外的另一种容器运行时的支持,然而这种增强的实现方式是通过直接修改kubelet实现源代码进行的,需要贡献者非常熟悉kubelet内部原理,开发门槛较高。
为了实现一个真正支持可插拔替换的容器运行时的机制,Kubernetes引入了CRI的概念。
有了CRI后,kubelet不再直接和容器运行时交互,而是通过CRI这个中间层。
如上图所示,kubelet和CRI通过Unix 套接字或者gRPC框架进行通信。
上图中的CRI protobuf意思是protocol buffers API,包含了两个gRPC服务:ImageService和RuntimeService。
首先什么是gRPC呢?
这个链接里有介绍:
https://hub.docker.com/r/grpc/go
gRPC是一个高性能开源的通用RPC(Remote Procedure Call)框架,优先考虑和充分利用了移动和HTTP/2.0, 在很多编程语言里都有对应的实现。
ImageService提供了从镜像仓库拉取、查看、和移除镜像的RPC。如此一来,kubelet根本不用操心底层容器使用的是Docker还是rkt还是其他容器,kubelet只需要调用gRPC客户端,gRPC客户端再进行RPC调用,从ImageService那里执行容器镜像操作,并将应答返回给kubelet。通过引入这个中间层,容器运行时的具体实现对kbelet就是完全透明的了。
ImageService解决了容器镜像管理这一静态需求,而另一个RuntimeSerivce,故名思议,包含了Pods和容器生命周期管理(增删改查)的RPC,以及跟容器交互的调用(exec/attach/port-forward)等等。
这个问题的解决思路再次体现了《代码大全2》里提到的那句经典名言:
any problem in computer science can be sloved by another layer of indirecition
计算机科学领域的任何问题都可以通过增加一个中间层来解决
相信这种引用抽象层来隔离变化,隔离实现细节的思路对大家平时工作做设计也一定大有帮助。
要获取更多Jerry的原创文章,请关注公众号"汪子熙":
什么是Kubernetes的CRI - 容器运行时接口相关推荐
- 课时 28:理解容器运行时接口 CRI(知谨)
CRI 是 Kubernetes 体系中跟容器打交道的一个非常重要的部分.本文将主要分享以下三方面的内容: CRI 介绍 CRI 实现 相关工具 CRI 介绍 在 CRI 出现之前(也就是 Kuber ...
- 从零开始入门 K8s | 理解容器运行时接口 CRI
作者 | 知谨 阿里云工程师 本文整理自<CNCF x Alibaba 云原生技术公开课>第 28 讲,点击直达课程页面. 关注"阿里巴巴云原生"公众号,回复关键词** ...
- 【容器运行时】一文理解 OCI、runc、containerd、docker、shim进程、cri、kubelet 之间的关系
参考 docker,containerd,runc,docker-shim 之间的关系 Containerd shim 进程 PPID 之谜 内核大神教你从 Linux 进程的角度看 Docker R ...
- 关于容器和容器运行时的那些事
转载本文需注明出处:微信公众号EAWorld,违者必究. 前言: 容器,容器编排,微服务,云原生,这些无疑都是当下软件开发领域里面最热门的术语.容器技术的出现并迅速的广泛应用于软件开发的各个领域里,主 ...
- 1.Containerd容器运行时初识与尝试
0x00 前言简述 1.基础介绍 2.专业术语 3.架构简述 0x01 安装配置 1.Ubuntu安装Containerd.io流程 0x02 简单使用 1.镜像拉取与运行 2.创建和使用网络 3.与 ...
- 云原生钻石课程 | 第1课:容器运行时技术深度剖析
点击上方"程序猿技术大咖",关注并选择"设为星标" 回复"加群"获取入群讨论资格! 本篇文章来自<华为云云原生王者之路训练营>钻 ...
- 部署一个 Containerd 容器运行时的 Kubernetes 集群
前面我们介绍了 containerd 的基本使用,也了解了如何将现有 docker 容器运行时的 Kubernetes 集群切换成 containerd,接下来我们使用 kubeadm 从头搭建一个使 ...
- Colima:MacOS 上的极简容器运行时和 Kubernetes
作者 | Addo Zhang 来源 | 云原生指北 Colima 是一个以最小化设置来在MacOS上运行容器运行时和 Kubernetes 的工具.支持 m1,同样也支持 Linux. Colima ...
- 课时 30:理解 RuntimeClass 与使用多容器运行时(贾之光)
本文将主要分享以下三方面的内容: RuntimeClass 需求来源 RuntimeClass 功能介绍 多容器运行时示例 RuntimeClass 需求来源 容器运行时的演进过程 我们首先了解一下容 ...
最新文章
- 利用Powershell SSH-Session 工具管理 linux或网络设备
- macsv服务器状态,和利时macs问题(启动服务器无法读出控制器的点名)
- python在读写文件之前需要创建文件对象-python基础教程:文件读写
- IOS开发之下拉刷新和上拉加载更多
- 如何滚动更新 Service?- 每天5分钟玩转 Docker 容器技术(102)
- L2-035 完全二叉树的层序遍历 (25 分)-PAT 团体程序设计天梯赛 GPLT
- bzoj 1627: [Usaco2007 Dec]穿越泥地(BFS)
- 读取android项目assets目录下的txt文件.
- ASP.NET 控件开发速成教程:生成复合控件
- python爬虫之BeautifulSoup4基础教程
- win10系统安装虚拟机
- Microsoft SQL Server 2008 R2出现索引超出数组界限
- 【每日函数】每日函数(2021.08.22)
- 打游戏 cpu占用率多少是正常的_游戏玩家的CPU选择
- HTML和css页眉制作,静态网页制作(Dreamweaver) 设计和制作网站首页 0203-静态网页制作(Dreamweaver)-设计制作网站首页页眉、导航栏.doc...
- android热修复技术tinker,Android热修复方案第一弹——Tinker篇
- CAD怎么进行给水计算?CAD给水计算教程
- 计算机加入域的一种方法
- JavaSE学习笔记-08
- nvcc fatal : No input files specified; use option --help for more information
热门文章
- 使用mvn插件surefire 执行工程单元测试 出现OOM的解决分析
- 文献记录(part84)--A nearest neighbor-based active learning method and its application to time ...
- 探索Julia(part9)--字符串处理
- python基础(part12)--模块
- pymysql(part4)--mysql存储图片信息
- GIT项目管理工具(part4)--提交文件暂存记录及同步文件至本地仓库
- python质数n以内_用Python寻找前n个质数
- SAP Spartacus 中的 Commands and queries
- 关于 ng-template 通过 @input 传入另一个 Component 不能工作的问题调试
- Rxjs of() 和 of({}) 的区别