k8s之CRI(容器运行时接口)
归根结底,Kubernetes Node(kubelet)的主要功能就是启动和停止 容器的组件,我们称之为容器运行时(Container Runtime),其中最知 名的就是Docker了。为了更具扩展性,Kubernetes从1.5版本开始就加入 了容器运行时插件API,即Container Runtime Interface,简称CRI。
每个容器运行时都有特点,因此不少用户希望Kubernetes能够支持 更多的容器运行时。Kubernetes从1.5版本开始引入了CRI接口规范,通 过插件接口模式,Kubernetes无须重新编译就可以使用更多的容器运行 时。CRI包含Protocol Buffers、gRPC API、运行库支持及开发中的标准 规范和工具。Docker的CRI实现在Kubernetes 1.6中被更新为Beta版本, 并在kubelet启动时默认启动。
可替代的容器运行时支持是Kubernetes中的新概念。在Kubernetes 1.3发布时,rktnetes项目同时发布,让rkt容器引擎成为除Docker外的又 一选择。然而,不管是Docker还是rkt,都用到了kubelet的内部接口,同 kubelet源码纠缠不清。这种程度的集成需要对kubelet的内部机制有非常 深入的了解,还会给社区带来管理压力,这就给新生代容器运行时造成 了难于跨越的集成壁垒。CRI接口规范试图用定义清晰的抽象层清除这 一壁垒,让开发者能够专注于容器运行时本身。在通向插件式容器支持 及建设健康生态环境的路上,这是一小步,也是很重要的一步。
kubelet使用gRPC框架通过UNIX Socket与容器运行时(或CRI代 理)进行通信。在这个过程中kubelet是客户端,CRI代理(shim)是服 务端,如图2.3所示。
图2.3 CRI的主要组件
Protocol Buffers API包含两个gRPC服务:ImageService和
RuntimeService。
ImageService提供了从仓库拉取镜像、查看和移除镜像的功能。
RuntimeService负责Pod和容器的生命周期管理,以及与容器的交互 (exec/attach/port-forward)。rkt和Docker这样的容器运行时可以使用一 个Socket同时提供两个服务,在kubelet中可以用--container-runtime- endpoint和--image-service-endpoint参数设置这个Socket。
文章来源于k8s指南
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
2018-06-09 Kubernetes集群部署篇( 一)
2018-06-09 Kubernetes集群(概念篇)