Kubernetes 之 kubelet 与 CRI、CNI 的交互过程
序言
当一个新的 Pod 被提交创建之后,Kubelet、CRI、CNI 这三个组件之间进行了哪些交互?
Kubelet -> CRI -> CNI

如上图所示:
Kubelet从 kube-api-server 处监听到有新的 pod 被调度到了自己的节点且需要创建。Kubelet创建 sandbox 并配置好 Pod 的环境,其中包括:Kubelet通过 gRPC 调用CRI组件创建 sandbox。CRI通过命令行调用CNI设置 pod 的网络。
Kubelet创建 container 阶段:- 调用
CRI拉取镜像。 - 调用
CRI创建 container。 - 调用
CRI启动 container。
- 调用
注意:
- 先创建一个 sandbox 就是为了先设置好 pod 的网络命名空间,因为用户容器可能面临启动失败等各种异常情况。
- 从 kubernetes v1.24 版本开始,
Kubelet不再管理CNI,而是由CRI负责调用CNI。
CRI 的具体实现有 containerd,cri-o,docker 等几种。
containerd 的架构图如下:

cri-o 的架构图如下:

从图中也可以看到 CNI 由 CRI 负责调用。
再进一步看看细节一点的流程:

Kubelet 在 SyncPod 阶段同步 Pod:
- 创建 sandbox,其中会进行两个 gRPC 方法的调用:
Kubelet调用RuntimeService.RunPodSandbox,CRI开始创建 pod 的各种命名空间(隔离环境),然后再拉起 sandbox 容器,接着CRI调用CNI设置 pod 网络环境,包括分配 pod IP 地址。Kubelet调用RuntimeService.PodSandboxStatus确认 pod sandbox 状态。
- 进行容器创建阶段(按照 ephemeral、init、normal 的顺序),此时涉及三个 gRPC 调用:
Kubelet调用ImageService.PullImage由CRI拉取镜像。Kubelet调用RuntimeService.CreateContainer由CRI创建容器,这里主要是配置好环境。Kubelet调用RuntimeService.StartContainer由CRI启动容器,至此容器才跑起来。
新建 Pod 时 Kubelet 与 CRI、CNI 之间的交互大致如上所述。
CRI & CNI
Kubernetes 通过定义标准接口的方式,与下层具体实现进行了解耦。其中 CRI 是容器运行时接口,通信协议使用的是 gRPC;CNI 是容器网络接口,交互方式则是命令行二进制可执行文件。
CRI 的 gRPC proto 如下,定义了 RuntimeService 和 ImageService 两种服务以及多种方法:

CNI 则只有六种操作:

总结
其实不管是新建 Pod 还是其它场景,Kubelet、CRI、CNI 的调用过程都是 Kubelet 调用 CRI,CRI 调用 CNI。
参考资料:
- https://kubernetes.io/docs/concepts/extend-kubernetes/compute-storage-net/network-plugins/
- https://github.com/kubernetes/cri-api/blob/master/pkg/apis/runtime/v1/api.proto
- https://github.com/containernetworking/cni/blob/main/SPEC.md
相关文章:
Kubernetes 之 kubelet 与 CRI、CNI 的交互过程
序言 当一个新的 Pod 被提交创建之后,Kubelet、CRI、CNI 这三个组件之间进行了哪些交互? Kubelet -> CRI -> CNI 如上图所示: Kubelet 从 kube-api-server 处监听到有新的 pod 被调度到了自己的节点且需要创建。Kubelet 创建 sandbo…...
【python】OpenCV—Age and Gender Classification
文章目录 1、任务描述2、网络结构2.1 人脸检测2.2 性别分类2.3 年龄分类 3、代码实现4、结果展示5、参考 1、任务描述 性别分类和年龄分类预测 2、网络结构 2.1 人脸检测 输出最高的 200 个 RoI,每个 RoI 7 个值,(xx,xx&#x…...
python安装换源
安装 python 使用演示的是python 3.8.5 安装完成后,如下操作打开命令行:同时按 “WindowsR” > 输入 “cmd” -> 点击确定 python换源 临时换源: #清华源 pip install markdown -i https://pypi.tuna.tsinghua.edu.cn/simple # 阿里…...
JavaScript练手小技巧:利用鼠标滚轮控制图片轮播
近日,在浏览网站的时候,发现了一个有意思的效果:一个图片轮播,通过上下滚动鼠标滚轮控制图片的上下切换。 于是就有了自己做一个的想法,顺带复习下鼠标滚轮事件。 鼠标滚轮事件,参考这篇文章:…...
搭建Eureka高可用集群 - day03
全部代码发出来了 搭建服务提供者 步骤: 1.创建项目,引入依赖 2.添加Eureka相关配置 3.添加EnableEurekaClient注解 4.测试运行 步骤1:创建项目,引入依赖 使用Spring Initializr方式创建一个名称为eureka-provider的Sprin…...
并行程序设计基础——并行I/O(2)
目录 一、显式偏移的并行文件读写 1、阻塞方式 1.1 MPI_FILE_READ_AT 1.2 MPI_FILE_WRITE_AT 1.3 MPI_FILE_READ_AT_ALL 1.4 MPI_FILE_WRITE_AT_ALL 2、非阻塞方式 2.1 MPI_FILE_IREAD_AT 2.2 MPI_FILE_IWRITE_AT 3、两步非阻塞组调用 3.1 MPI_FILE_READ_AT_ALL_BEG…...
Java三种创建多线程的方法
线程是什么: 进程是程序的一次动态执行的过程,线程是进程中执行运算最小单位,一个进程在其执行过程中可以产生多个线程,而线程必须在某个进程内执行。 如果在一个进程中同时运行了多个线程(必须包含一个主线程&#…...
828华为云征文 | 云上私人数据管家,jMalCloud个人网盘在华为云Flexus的Docker化部署实践
华为云服务器Flexus X实例介绍 华为云Flexus云服务器X实例,是由国家科技进步奖获得者、华为公司Fellow、华为云首席架构师顾炯炯牵头研发。它基于擎天QingTian架构、瑶光云脑、盘古大模型等根技术创新,是业界首款应用驱动的柔性算力云服务器,…...
C# 开源教程带你轻松掌握数据结构与算法
目录 前言 项目介绍 项目特点 项目展示 1、内容导图 2、部分目录 3、源码示例 项目地址 最后 前言 在项目开发过程中,理解数据结构和算法如同掌握盖房子的秘诀。算法不仅能帮助我们编写高效、优质的代码,还能解决项目中遇到的各种难题。 给大家…...
由一个 SwiftData “诡异”运行时崩溃而引发的钩深索隐(五)
概述 在 WWDC 24 中,苹果推出了数据库框架 SwiftData 2.0 版本。其新加入的历史记录追踪(History Trace)机制着实让秃头码农们“如痴如醉”了一番。 我们在之前的博文中已经介绍了 History Trace 是如何处理数据新增操作的。而在这里,我们将再接再厉来完成数据删除时的全盘…...
python爬虫基础:了解html
编辑器vscode <!DOCTYPE html> <html><head><title>第一个网页</title></head><body><h1>字体</h1><h2>字体</h2><h3>字体</h3><p>Lorem, ipsum dolor sit amet consectetur adipisicing…...
spring security OAuth2 客户端接入gitee
一、简介 OAuth 是一个开放标准,该标准允许用户让第三方应用访问该用户在某一网站上存储的私密资源(如头像、照片、视频等),并且在这个过程中无须将用户名和密码提供给第三方应用。通过令牌(token)可以实现这一功能,每一个令牌授权一个特定的…...
阿里云镜像报错 [Errno 14] HTTP Error 302 - Found 问题解决记录
1、问题背景和解决思路 在本地安装 CentOS7 后,网络已调通可正常上网,但切换阿里云镜像后,使用 yum 安装软件时出现 “[Errno 14] HTTPS Error 302 - Found Trying other mirror.” 报错,原因是 yum 源配置问题。给出了详细的解决…...
《Linux运维总结:基于X86_64+ARM64架构CPU使用docker-compose一键离线部署consul 1.18.1容器版分布式ACL集群》
总结:整理不易,如果对你有帮助,可否点赞关注一下? 更多详细内容请参考:《Linux运维篇:Linux系统运维指南》 一、部署背景 由于业务系统的特殊性,我们需要面向不通的客户安装我们的业务系统&…...
深入剖析嵌套调用和链式访问,以及函数的声明和定义(超全面覆盖)
1. 前情提要 在上一篇博客中,我们大致了解了函数的种类,以及自定义函数中形参和实参的具体区别 我们知道实参是需要传递给形参的,但其实形参和实参占据的是完全独立的内存空间 x,y在执行过程中会得到a和b的值,但是x…...
浏览器百科:网页存储篇-IndexedDB介绍(十)
1.引言 在现代网页开发中,数据存储需求日益增多和复杂,传统的客户端存储技术如localStorage和sessionStorage已难以满足大型数据的存储和管理需求。为了解决这一问题,HTML5 引入了 IndexedDB,在本篇《浏览器百科:网页…...
Java语言程序设计基础篇_编程练习题*18.22 (将十进制數转换为十六进制数)
题目:*18.22 (将十进制數转换为十六进制数) 编写一个递归方法,将一个十进制数转换为一个十六进制数的字符串。方法头如下: public static String dec2Hex(int value)编写一个测试程序,提示用户输入一个十进制数,然后显示等价的十…...
蓝桥杯3. 压缩字符串
题目描述 实现一个算法来压缩一个字符串。压缩的要求如下: 需要判断压缩能不能节省空间,仅在压缩后字符串比原字符串长度更短时进行压缩。 压缩的格式是将连续相同字符替换为字符 数字形式,例如 "AAABCCDDDD" 变为 "A3BC2D…...
Java设计模式之责任链模式详细讲解和案例示范
在本文中,我们将详细讲解Java设计模式中的责任链模式,探讨其基本概念、使用场景、常见问题和解决方式。同时,我们还会介绍责任链模式与策略模式的区别,并结合电商交易系统的示例进行说明。此外,我们还会探讨责任链模式…...
ubuntu_如何解决apt install时报错:Waiting for cache lock: Could not get lock
当你在 Ubuntu 上运行 apt 时,遇到类似 Waiting for cache lock: Could not get lock 错误,通常是因为另一个进程正在使用 apt 或者类似的包管理器工具。你可以按照以下步骤来查找并解决这个问题: 1. 查询哪个进程正在使用锁 系统中的锁文件…...
OpenClaw隐私保护设计:GLM-4.7-Flash本地处理医疗笔记整理
OpenClaw隐私保护设计:GLM-4.7-Flash本地处理医疗笔记整理 1. 为什么医疗数据必须留在本地? 去年帮家人整理慢性病就诊记录时,我遇到一个两难选择:要么手动整理上百张化验单和处方笺,要么使用云端OCR工具自动处理。当…...
别再死记硬背!用拖拽和右键菜单玩转汇川CodeSys网络与硬件组态
汇川CodeSys图形化组态实战:拖拽与右键菜单的高效玩法 第一次打开汇川CodeSys的组态界面时,那些密密麻麻的菜单和复杂的参数设置确实让人望而生畏。但当我发现可以用鼠标拖拽完成90%的配置工作时,整个PLC编程体验彻底改变了——就像从DOS命令…...
基于遗忘因子递推最小二乘法的电池模型参数在线辨识与优化
1. 电池模型参数辨识为什么需要FFRLS算法 我第一次接触电池参数辨识是在开发一款智能硬件时,当时发现传统最小二乘法有个致命问题——它会把所有历史数据同等对待。这就像用算盘计算平均数时,不管数据是昨天还是去年的,都按相同权重处理。但在…...
算力虚拟化技术:如何实现算力的高效分配与复用
算力虚拟化技术:如何实现算力的高效分配与复用📚 本章学习目标:深入理解如何实现算力的高效分配与复用的核心概念与实践方法,掌握关键技术要点,了解实际应用场景与最佳实践。本文属于《云原生、云边端一体化与算力基建…...
终极指南:如何快速实现CocoaHTTPServer自定义连接处理
终极指南:如何快速实现CocoaHTTPServer自定义连接处理 【免费下载链接】CocoaHTTPServer A small, lightweight, embeddable HTTP server for Mac OS X or iOS applications 项目地址: https://gitcode.com/gh_mirrors/co/CocoaHTTPServer CocoaHTTPServer是…...
奇偶判断算法的极端实现与优化
1. 奇偶判断算法的极端实现:从40亿条if语句到机器码优化1.1 项目背景与设计动机在计算机科学领域,判断数字奇偶性通常采用取模运算这一经典方法。然而,一个看似荒谬的想法引发了技术人员的深入思考:是否可以通过穷举所有可能的数字…...
保姆级教程:在Ubuntu 22.04物理机上,从开启SSH到配置IPv6防火墙的完整流程
Ubuntu 22.04物理机从SSH配置到IPv6防火墙的完整安全指南 当你拿到一台全新的Ubuntu物理机时,如何安全地配置远程访问并启用IPv6连接?本文将带你从零开始,一步步完成从系统初始化到防火墙配置的全过程。无论你是搭建家庭服务器、开发测试环境…...
Zotero插件生态:从翻译到效率提升的进阶配置指南
1. Zotero插件生态全景:从翻译到全流程优化 第一次接触Zotero时,我和大多数人一样,只是把它当作一个简单的文献管理工具。直到某天深夜赶论文,连续手动整理了47篇参考文献后,手指酸痛的我突然意识到:这绝对…...
别再死记硬背了!用矢量网络分析仪实测PA的P1dB和OIP3(附详细步骤与曲线解读)
矢量网络分析仪实战:PA的P1dB与OIP3测量全流程解析 在射频放大器设计与测试领域,P1dB和OIP3是两个无法绕开的性能指标。许多工程师虽然能背诵定义,但面对实验室里的矢量网络分析仪(VNA)时却无从下手。本文将彻底改变这…...
别再只盯着RTK了!聊聊GNSS/INS组合导航里,紧耦合如何用1颗卫星‘吊住’你的定位
1颗卫星的逆袭:紧耦合技术如何在极端环境下守护你的定位精度 想象一下,你正驾驶一辆L4级自动驾驶汽车穿越曼哈顿的钢铁森林。高楼间的"城市峡谷"让GPS信号时断时续,传统导航系统已经开始报警——"卫星信号丢失"。但你的车…...
