0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

什么是Kubernetes容器运行时CRI

汽车电子技术 来源: 码农与软件时代 作者: 码农与软件时代 2023-02-20 16:22 次阅读

一、CRI标准

起初,Docker是事实上的容器技术标准,Kubernetes v1.5之前的代码中直接调用Docker API,实现容器运行时的相关操作。

后来,为了标准化下层容器运行时的差异(docker\\rkt\\kata containers),2016年,Kubernetes提出了CRI(Container Runtime Interface,容器运行时接口)标准,制定了Kubernetes kubelet与容器运行时的交互接口。容器运行时如果想要集成到Kubernetes平台,就需要实现这套接口。如图所示,CRI shim负责实现CRI接口,并将CRI请求转换为容器运行时的请求。

图片

CRI接口包括RuntimeService和ImageService两个服务,前者提供管理Pod和容器生命周期的gRPC接口,后者提供提取、检查和删除镜像的gRPC接口。

service RuntimeService {
//容器操作rpc
 CreateContainer (...) returns (...) {}
 rpc ListContainers  (...) returns (...) {}
 rpc RemoveContainer (...) returns (...) {}
 rpc StartContainer  (...) returns (...) {}
 rpc StopContainer (...) returns (...) {}
 //Pod沙箱操作,可能对应多个容器
 rpc ListPodSandbox (...) returns (...) {}
 rpc RemovePodSandbox(...) returns (...) {}
 rpc RunPodSandbox (...) returns (...) {}
 rpc StopPodSandbox (...) returns (...) {}
 }

二、CRI实现方案

1. Dockershim

标准提出之后,Docker并未实现CRI接口(如日中天,不合作),Kubernetes将CRI接口转换为Docker API,以支持Docker容器。这部分适配工作由shim(垫片)来完成,称为dockershim,并内置在kubelet模块中(kubernetes原生支持)。

此时的调用关系为:

Kubelet-->dockershim-->dockerd(daemon)-->containerd-->containerd-shim-->runc。

不难看出,这个调用链很长,可以直接调用containerd来实现相关功能。

2020年,Kubernetes计划移除dockershim。

2022年,Kubernetes v1.24版本,将dockershim移除(不再提供原生支持)。

需要注意到dockershim也调用了CNI接口。

图片

更为具体的CNI接口调用为:

图片

2. CRI-containerd/containerd

containerd提供了容器的生命周期管理、镜像管理等功能。在Docker 1.11中引入,containerd会为每个容器创建一个containerd-shim,以用来管理相应容器的生命周期。2016年12月,Docker公司将其拆分为独立组件,并于2017年3月捐赠给CNCF。

图片

由dockershim部分可知,kubernetes CRI接口调用过长,可采用直接调用containerd的方式。

图片

kubernetes分两个版本进行了实现:containerd1.0版本中,通过CRI-containerd进行CRI的适配。

图片

containerd 1.1版本直接将把适配逻辑写到了containerd进程中,完成CRI Services到Meta services、Runtime service、Storage service的适配。

图片

这里的containerd提供了CRI shim的能力:将CRI请求转换成3个服务的调用,创建出runc容器。

3. CRI-O

CRI-O也就是Container Runtime Interface和Open Container Initiative的组合,源于Kubernetes孵化器项目Open Container Initiative Daemon(OCID)。

作为Kubernetes CRI的一种实现方案,本质上是封装了OCI接口,对外提供CRI 服务。功能包括容器运行时的管理和镜像的管理。

三、小结

图片

四、参考资料

https://github.com/containerd/containerd/blob/main/docs/getting-started.mdhttps://github.com/containerd/containerd/blob/main/docs/historical/cri/proposal.mdhttps://cri-o.io/https://github.com/cri-o/cri-ohttps://developer.aliyun.com/article/1010319https://mp.weixin.qq.com/s/--t74RuFGMmTGl2IT-TFrghttps://iximiuz.com/en/posts/journey-from-containerization-to-orchestration-and-beyon
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • API
    API
    +关注

    关注

    2

    文章

    1382

    浏览量

    60992
  • 容器
    +关注

    关注

    0

    文章

    481

    浏览量

    21883
  • Docker
    +关注

    关注

    0

    文章

    437

    浏览量

    11603
收藏 人收藏

    评论

    相关推荐

    如何缩短Vivado的运行时

    在Vivado Implementation阶段,有时是有必要分析一下什么原因导致运行时间(runtime)过长,从而找到一些方法来缩短运行时间。
    的头像 发表于 05-29 14:37 1.4w次阅读
    如何缩短Vivado的<b class='flag-5'>运行时</b>间

    Kubernetes架构和核心组件组成 Kubernetes节点“容器运行时”技术分析

    Kubernetes 架构简介 Kubernetes架构如下图所示: 在这张系统架构图中,我们把服务分为运行在工作节点上的服务和组成集群级别控制板的服务。Kubernetes节点有
    的头像 发表于 09-25 15:53 2943次阅读
    <b class='flag-5'>Kubernetes</b>架构和核心组件组成 <b class='flag-5'>Kubernetes</b>节点“<b class='flag-5'>容器</b><b class='flag-5'>运行时</b>”技术分析

    各种容器运行的作用是什么

    容器技术中,容器运行时可以分为三种类型:低级运行时、高级运行时以及沙盒或虚拟化运行时
    发表于 09-20 11:42 379次阅读
    各种<b class='flag-5'>容器</b><b class='flag-5'>运行</b>的作用是什么

    Kubernetes之路 2 - 利用LXCFS提升容器资源可见性

    工具如free/top或遗留应用还依赖上述文件内容获取资源配置和使用情况。当它们在容器运行时,就会把宿主机的资源状态读取出来,引起错误和不便。LXCFS简介社区中常见的做法是利用 lxcfs来提供
    发表于 04-17 14:05

    A5347 IO运行时序电路图

    A5347 IO运行时序电路图
    发表于 07-03 12:03 446次阅读
    A5347 IO<b class='flag-5'>运行时</b>序电路图

    紫金桥组态软件新的功能_运行时组态

    运行时组态是组态软件新近提出的新的概念。运行时组态是在运行环境下对已有工程进行修改,添加新的功能。它不同于在线组态,在线组态是在工程运行的同时,进入组态环境,在组态环境中对工程进行修改
    发表于 10-13 16:17 2次下载
    紫金桥组态软件新的功能_<b class='flag-5'>运行时</b>组态

    CRI 与 ShimV2:一种 Kubernetes 集成容器运行时的新思路

    年,由 containerd 社区主导的 shimv2 API 的出现,在 CRI 的基础上,为用户集成自己的容器运行时带来了更加成熟和方便的实践方法。本次演讲分享了关于 Kubernete
    发表于 12-20 17:05 129次阅读

    k8s容器运行时演进历史

    运行时接口(Container Runtime Interface),这一步中,Kubelet 可以视作一个简单的 CRI Client,而 dockershim 就是接收请求的 Server。目前 dockershim 的代码其实是内嵌在 Kubele
    的头像 发表于 02-02 13:50 1713次阅读
    k8s<b class='flag-5'>容器</b><b class='flag-5'>运行时</b>演进历史

    Go运行时:4年之后

    自 2018 年以来,Go GC,以及更广泛的 Go 运行时,一直在稳步改进。近日,Go 社区总结了 4 年来 Go 运行时的一些重要变化。
    的头像 发表于 11-30 16:21 530次阅读

    怎样避免电力电容器运行时漏油

    电力电容器运行中,会因为各种因素出现故障。在电力电容器运行时遇到的故障中,出现渗油和漏油的概率非常大。那么如何避免电力电容器
    的头像 发表于 04-07 16:01 559次阅读

    iSulad+Kuasar:管理面资源消耗锐减99%的新一代统一容器运行时解决方案

    容器引擎(Container Engine)主要负责容器运行环境的创建、容器资源的配置和容器生命周期的管理,北向接收来自于
    的头像 发表于 04-27 15:00 712次阅读
    iSulad+Kuasar:管理面资源消耗锐减99%的新一代统一<b class='flag-5'>容器</b><b class='flag-5'>运行时</b>解决方案

    JVM运行时数据区之堆内存

    说一下 JVM 运行时数据区吧,都有哪些区?分别是干什么的?
    的头像 发表于 08-19 14:35 430次阅读
    JVM<b class='flag-5'>运行时</b>数据区之堆内存

    ch32v307记录程序运行时

    ch32v307记录程序运行时间 在程序开发中,很重要的一项任务就是对程序的运行时间进行评估。对于大型的程序系统来说,它们通常需要处理大量的数据或进行复杂的计算操作。因此,如果程序的运行时间过长
    的头像 发表于 08-22 15:53 473次阅读

    Xilinx运行时(XRT)发行说明

    电子发烧友网站提供《Xilinx运行时(XRT)发行说明.pdf》资料免费下载
    发表于 09-14 10:01 0次下载
    Xilinx<b class='flag-5'>运行时</b>(XRT)发行说明

    如何保证它们容器运行时的安全?

    紧密耦合的容器运行时继承了主机操作系统的安全态势和攻击面。运行时或主机内核中的任何漏洞及其利用都会成为攻击者的潜在切入点。
    的头像 发表于 11-03 15:24 299次阅读