K8s容器运行时,移除Dockershim后存在哪些疑惑?

news2024/12/25 13:16:14

K8s容器运行时,移除Dockershim后存在哪些疑惑?

大家好,我是秋意零。

K8s版本截止目前(24/09)已经发布到了1.31.x版本。早在K8s版本从1.24.x起(22/05),默认的容器运行时就不再是Docker了或者说Dockershim。

发行版本 | Kubernetes

Patch Releases | Kubernetes

最直接的原因,就是影响了性能。因为K8s调用Docker中Containerd容器运行时需要一个中间层Dockershim,造成了多余的性能和系统稳定性问题。具体是怎么个事呢,这里就来捋上一捋!同时介绍runc、ctr、crictl、nerdctl都是怎么个事!

内心OS:1.24第一版本早在22/05就发布了,距今已经过去2年多了。现在才来捋属实感觉有点晚了,不知有没有朋友和我一样一直没有捋明白呢😬!

如果是 那就接着往下看,有用点个赞、评论明白了😘!

Containerd 简介

官方解释:containerd 是一种行业标准的容器运行时,强调简单性、健壮性和可移植性。它可作为 Linux 和 Windows 的守护进程使用,可以管理其主机系统的完整容器生命周期:镜像传输和存储、容器执行和监督、底层存储和网络附件等。

一句话总结:Containerd 是一种基于 CRI 的容器运行时,用于管理容器的生命周期。

PS:

  • 容器运行时:是负责运行容器的软件

  • CRI:这个接口是 Kubernetes 与容器运行时交互的标准接口

K8s架构理解:【探索 Kubernetes|容器基础进阶篇 系列 4】理解现代云原生时代的引擎

捋上一捋

1)为什么不继续使用Docker作为运行时

Docker并不是一个“物件”,他是一个完整技术栈。它技术栈中有一个叫做 “containerd” 的部件本身,才是一个容器运行时。

执行yum install docker-ce,验证Docker是否包含Containerd,最简单的方式。

Docker 它提供了很多用户体验增强功能,而这简化了我们用户开发工作时的操作。然而 Kubernetes 用不到这些增强的用户体验,毕竟它并非人类。

因为这个用户友好的抽象层,Kubernetes 集群不得不引入一个叫做 Dockershim 的工具来访问它真正需要的 containerd。 这不是一件好事,因为这引入了额外的运维工作量,同时影响性能与稳定性,而且还可能出错。

2)为什么K8s不直接访问Docker中的Containerd组件,为什么需要Dockershim呢?

Docker Engine 没有实现(CRI)接口,因此 Kubernetes 项目创建了特殊代码来帮助过渡, 并使 Dockershim 代码成为 Kubernetes 的一部分。Dockershim 代码一直是一个临时解决方案(因此得名:shim 垫片)。

如果 Docker 兼容 CRI,就不需要这个 Dockershim 了。

3)Docker构建/拉取的镜像,K8s还能使用嘛?

Docker 构建的镜像并不是 Docker 特有的镜像,它是一个基于 OCI 的镜像。任一以 OCI 为标准构建的镜像,K8s都是可以使用的。

PS:

  • OCI:定义了容器运行时的规范和镜像格式规范

K8s架构理解:【探索 Kubernetes|容器基础进阶篇 系列 4】理解现代云原生时代的引擎

Containerd 与 runc 关系

官方解释:runc是一个 CLI 工具,用于根据 OCI 规范在 Linux 上生成和运行容器。

GitHub - opencontainers/runc

1)Containerd 与 runc 关系

Containerd 的运行时要求非常低。与 Linux 和 Windows 容器功能集的大多数交互都是通过 runc 和特定于操作系统的库处理的。所有Containerd 依赖于 runc 来实现具体功能。

  • runc 是一个低级别的工具,用于创建、运行和管理容器的进程。它是容器运行时(container runtime)的一部分,主要用于执行容器内的应用程序。runc 实现了 OCI(Open Container Initiative)规范,允许开发者以标准化的方式创建和运行容器。
  • Containerd 是一个更高层次的容器管理系统,它负责管理容器的整个生命周期,包括容器的创建、启动、停止以及镜像的管理等。Containerd 提供了一个稳定、可插拔的架构,允许开发者以高度可定制的方式管理和编排容器。

**总结:**Containerd 和 runc 之间的关系可以类比为主管与执行者的关系。Containerd 作为主管,负责高层次的管理工作,如容器和镜像的生命周期管理,而 runc 作为执行者,负责具体容器进程的创建和运行。

ctr、crictl、nerdctl 分不清?

1)ctr 是 containerd 的原生自带命令行客户端工具,主要用于与 containerd 进行低级别的交互。它提供了对 containerd 的全面管理能力,包括镜像管理、容器管理、沙箱管理等。

2)crictl 是 Kubernetes Container Runtime Interface (CRI) 的客户端工具,用于与实现了 CRI 接口的容器运行时(如 containerd 或 Docker)进行交互。它提供了类似于 docker 命令的高级功能,使得用户可以方便地管理容器和镜像。

3)nerdctl 是 containerd 的另一个命令行工具,它的设计目标是提供一个与 docker 命令相似的体验,使得用户可以无缝地从 Docker 迁移到 containerd。nerdctl 提供了许多与 docker 命令相同的子命令,使得迁移更加简便。但只支持 containerd 容器运行时。

常用操作指令

Containerd容器运行时,存在NameSpace的概念。创建好K8s集群后Containerd中存在两个名称空间default与k8s.io

NameSpace就好比,Windows系统中的文件夹,每个NameSpace内容相互隔离。

注意:与K8s的名称空间类似,不过不要搞混了。K8s名称空间是隔离资源,Containerd名称空间是隔离镜像。

ctr、crictl、nerdctl

  1. ctr 默认采用 default 名称空间

    切换名称空间:-n参数选择不同的名称空间ctr -n k8s.io images ls

  2. crictl 默认采用 k8s.io 名称空间

  3. nerdctl 默认采用 default 名称空间

    切换名称空间:在 /etc/nerdctl/nerdctl.toml 中添加或修改配置 namespace = "k8s.io"

1)Ctr(不常用,可忽略,了解即可)

镜像管理

1. 查看镜像
ctr images ls # images可以简写为i。如:ctr i ls 
查看指定名称空间镜像
ctr -nk8s.io images ls
2. 下载镜像
ctr image pull <镜像名称>
3. 删除镜像
ctr image rm <镜像名称>
4. 镜像导出
ctr i export <导出名称> <需要导出的源镜像名称>
5. 镜像导入
ctr i import <镜像被导出时的镜像名称>
6. 修改tag
ctr images tag <源镜像名称> <>
7. 查看名称空间
ctr ns ls

容器管理

1. 查看运行的容器
ctr container ls  # container可以简写为c。如:ctr c ls 
2. 创建容器
ctr container create <镜像名称> <容器名称>
3. 查看容器中跑的进程
ctr task ls
4. 停止容器
ctr tasks kill <容器名称>
5. 删除容器
ctr tasks delete <容器名称>

crictl、nerdctl常用指令,就不列出来,网上可以找到很多。

2)crictl

crictl 常见的命令大全 (aliyun.com)

3)nerdctl

简单的nerdctl命令使用,操作手册-CSDN博客

参考

容器运行时 | Kubernetes

GitHub - containerd/containerd:开放可靠的容器运行时

End

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2156294.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

车载测试项目实操学习:CAN通信测试、UDS诊断测试、自动化测试、功能安全测试、CAN一致性测试、HIL测试:9-20

FOTA模块中OTA的知识点&#xff1a;1.测试过程中发现哪几类问题&#xff1f; 可能就是一个单键的ecu&#xff0c;比如升了一个门的ecu&#xff0c;他的升了之后就关不上&#xff0c;还有就是升级组合ecu的时候&#xff0c;c屏上不显示进度条。 2.在做ota测试的过程中&#xff…

【d46】【Java】【力扣】876.链表的中间结点

思路 先获得总体长度&#xff0c; 再得到中间节点 的索引&#xff0c;&#xff0c;这里的索引是从1开始的索引&#xff0c;而不是从0开始的索引(这种理解方式更简单) 排错&#xff1a;另一个思路&#xff1a;将链表都放进list&#xff0c;获得中间的数字&#xff0c;然后遍历…

AIGC8: 高通骁龙AIPC开发者大会记录B

图中是一个小男孩在市场卖他的作品。 AI应用开发出来之后&#xff0c;无论是个人开发者还是企业开发者。 如何推广分发是面临的大问题。 做出来的东西一定要符合商业规律。否则就是实验室里面的玩物&#xff0c;或者自嗨的东西。 背景 上次是回顾和思考前面两个硬件营销总的…

【PSINS工具箱】159联邦滤波器|优化后的MATLAB代码

文章目录 程序说明概述主要功能代码结构关键函数 运行结果与解析程序代码 程序说明 概述 该程序实现了一个联邦滤波器的仿真&#xff0c;结合了惯性导航系统&#xff08;SINS&#xff09;、全球导航卫星系统&#xff08;GNSS&#xff09;和中央导航系统&#xff08;CNS&#…

Gin框架入门(2)--异常捕获与日志实现

异常捕获 Go语言的异常捕获采用的是延迟处理的方法实现的&#xff0c;实际上就是利用defer&#xff0c;panic和recover三个关键字和函数来实现的。 关键字 defer关键字(函数) 这个关键字在控制语句中就有所涉及&#xff0c;本质上是采用一个栈的存储结构&#xff0c;在整个…

ffmpeg面向对象——参数配置机制探索及其设计模式

目录概览 0.参数配置对象流程图0.1 用到的设计模式0.2 与朴素思想的对比 1.参数传递部分1.1 AVDictionary字典容器类1.1.1 类定义及类图1.1.2 构造函数1.1.3 析构函数1.1.4 设置/读取等配置参数 1.2 参数配置实例 2.参数配置生效部分2.1 参数过滤模块2.1.1 AVOption类2.1.1.1 类…

2024-09-18 实操层面理解进程

一、进程初探 # ps ajx | head -1PPID PID PGID SID TTY TPGID STAT UID TIME COMMANDroothcss-ecs:~# ps ajx | head -1; ps ajx | grep procPPID PID PGID SID TTY TPGID STAT UID TIME COMMAND24696 24707 24707 24679 …

串的存储实现方法(与链表相关)

一、 定义 字符串是由零个&#xff08;空串&#xff09;或多个字符组成的有限序列。 eg:S"Hello World!" 串相等&#xff1a;两个串长度相等并且对应位置的字符都相等时&#xff0c;两个串才相等。 二、串的存储实现 2.1 定长顺序串 2.2 堆串 和定长顺序串的…

【速成Redis】01 Redis简介及windows上如何安装redis

前言&#xff1a; 适用于&#xff1a;需要快速掌握redis技能的人&#xff08;比如我&#xff09;&#xff0c;在b站&#xff0c;找了个课看。 01.课程简介_哔哩哔哩_bilibili01.课程简介是【GeekHour】一小时Redis教程的第1集视频&#xff0c;该合集共计19集&#xff0c;视频…

乐橙云平台接入SVMSPro平台

乐橙云平台接入SVMSPro平台 步骤一&#xff1a;进入乐橙开放平台&#xff1a;https://open.imoulife.com/ &#xff0c;点右上角的登陆&#xff0c;填写自己的用户名密码&#xff0c;进入控制台&#xff1b; 步骤二&#xff1a;登陆进去后&#xff0c;我的应用—>应用信息&a…

Fyne ( go跨平台GUI )中文文档- 架构 (八)完结

本文档注意参考官网(developer.fyne.io/) 编写, 只保留基本用法 go代码展示为Go 1.16 及更高版本, ide为goland2021.2 这是一个系列文章&#xff1a; Fyne ( go跨平台GUI )中文文档-入门(一)-CSDN博客 Fyne ( go跨平台GUI )中文文档-Fyne总览(二)-CSDN博客 Fyne ( go跨平台GUI…

Java集合HashSet——HashSet在底层原理

可点击此处&#xff1a;HashSet在底层原理 创建一个默认长度16&#xff0c;默认加载因子为0.75的数组&#xff0c;数组名table 16*0.75 12&#xff0c;如果存入的数据达到12&#xff0c;则数组自动扩容为原来的2倍 根据元素的哈希值跟数组的长度计算出应存入的位置 int index…

JAVA基础:正则表达式,String的intern方法,StringBuilder可变字符串特点与应用,+连接字符串特点

1 String中的常用方法2 1.1 split方法 将字符串按照指定的内容进行分割&#xff0c;将分割成的每一个子部分组成一个数组 分割内容不会出现在数组中 实际上该方法不是按照指定的简单的符号进行分割的&#xff0c;而是按照正则表达式进行分割 1.2 正则表达式 用简单的符号组合…

思维商业篇(4)—产业上下游定

思维商业篇(4)—产业上下游定位(微笑曲线) 产业上下游定位&#xff0c;帮助我们去观察一个企业在产业上下游中处于一个什么样的生态位。 上游 处于产业链开始端&#xff0c;百川东到海&#xff0c;百川的的起始端就是上游&#xff0c;东到海的海就是下游。 处在上游的企业一…

用友网络交付总监刘伟伟受邀为第四届中国项目经理大会演讲嘉宾

全国项目经理专业人士年度盛会 用友网络科技股份有限公司区域交付总监刘伟伟先生受邀为PMO评论主办的全国项目经理专业人士年度盛会——2024第四届中国项目经理大会演讲嘉宾&#xff0c;演讲议题为“如何有效提升项目经理领导力”。大会将于10月26-27日在北京举办&#xff0c;主…

UE学习篇ContentExample解读-----------Blueprint_Overview

文章目录 总览描述批次阅览1.1 Blueprint- Hello World1.2 Blueprint- Components1.3 Blueprint- Variables1.4 Blueprint- ConstructionScript1.5 Blueprint- Event Graph1.6 Blueprint- Simple Math1.7 Blueprint- Flow Control 概念总结致谢&#xff1a; 总览描述 打开关卡后…

机械设计中倒角与倒圆角

我们常说&#xff0c;机械设计要做到“一切尽在掌握中”。 包含两层意思&#xff1a;一是所有的结构细节都是仔细思考过并且完整表达&#xff0c;不能靠在制造过程中猜测设计意图、由制造人员再设计或自由发挥。 二是所有的设计都是有根据的&#xff0c;不能靠拍脑袋任意发挥…

【路径规划】自动泊车的 Simulink 模型

摘要 本文介绍了一个用于自主机器人路径规划和导航的 Simulink 模型&#xff0c;该模型结合了路径跟踪算法&#xff08;如 Pure Pursuit&#xff09;和动态机器人模型&#xff0c;实现了复杂环境中的路径跟随和导航控制。实验结果表明&#xff0c;模型能够在给定路径上精确控制…

【neo4j】neo4j和Cypher 查询语言相关知识点

【neo4j】neo4j和Cypher 查询语言相关知识点 1.什么是neo4j Neo4j 是一个广泛使用的图形数据库管理系统&#xff08;Graph Database Management System&#xff09;。它是一种NoSQL数据库&#xff0c;专为存储和查询图形数据而设计。Neo4j 支持图形数据模型&#xff0c;允许用…

误差评估,均方误差、均方根误差、标准差、方差

均方根误差 RMSE/RMS 定义 RMSE是观察值与真实值偏差的平方&#xff0c;对于一组观测值 y i y_i yi​ 和对应的真值 t i t_i ti​ R M S E 1 n ∑ i 1 n ( y i − t i ) &#xff0c;其中n是观测次数 RMSE\sqrt{\frac1n \sum_{i1}^n (y_i-t_i)} \text{&#xff0c;其中n是…