Kubernetes弃用Dockershim,转向Containerd:影响及如何应对

news2024/9/29 1:19:04

Kubernetes1.24版本发布时,正式宣布弃用Dockershim,转向Containerd作为默认的容器运行环境。Kubernetes以CRI(Container Runtime Interface)容器运行时接口制定接入准则,用户可以使用Containerd、CRI-O、CRI- Dockerd及其他容器运行时作为Kubernetes的容器引擎。

Kubernetes为何弃用Dockershim?

Docker在早期没有实现Container Runtime Interface (CRI),而CRI是Kubernetes后来增加的对额外运行时的支持标准。Dockershim的存在是为了支持将Docker硬编码到Kubernetes中,但随着容器化成为行业标准,Kubernetes项目增加了对额外运行时的支持,比如通过Container Runtime Interface (CRI)容器运行时接口来支持运行容器。因此,在Kubernetes1.20版本发布的时候提到未来会弃用Dockershim引擎,而在Kubernetes1.24版本发布时, 正式弃用之。

什么是 Containerd ?

containerd是一种容器运行时引擎,原属于Docker的组件的一部分,主要提供容器生命周期管理(从创建到销毁容器)、拉取和推送镜像、存储管理(管理镜像及容器数据的存储)、调用runc容器运行等,现已由开源社区拆分脱离出来单独作为容器运行时项目。

在Kubernetes中,Containerd作为容器运行环境,负责管理Pod的生命周期,包括容器的创建、启动、停止和删除等操作。与Dockershim相比,Containerd具有更好的性能、更强的可扩展性以及更简洁的架构。

容器运行底层组件有哪些关系?

Docker Client和Docker Daemon:Docker Client是Docker的客户端,它可以通过命令行或API向Docker Daemon发送请求。Docker Daemon是Docker的核心组件,负责管理镜像、容器、网络和卷等资源,并将Docker API暴露给客户端。

Docker镜像和Docker容器:Docker镜像是只读的模板,包含了所有用于运行应用程序所需要的代码、库文件、环境变量和配置文件等内容。Docker容器是基于Docker镜像创建的可运行实例。每个容器都是一个独立的、轻量级的操作系统,它们之间相互隔离并且可以共享主机的内核。

CRI(Container Runtime Interface)和容器运行时:CRI是Kubernetes的容器运行时标准接口,满足这个标准的所有容器运行时都可以被使用。容器运行时则提供了一个轻量级的容器运行环境,用于创建、启动和停止容器。

OCI(Open Container Initiative)和runc:OCI是一个开放的容器组织,它制定了容器运行时的规范,包括运行时规范、容器镜像规范等。runc是OCI标准的一个参考实现,它与容器所依赖的cgroup/linux kernel等进行交互,是容器最终运行的形态之一。

图片

Containerd在Kubernetes的运行变化

在Kubernetes 1.24版本以前,Kubernetes通过调用Docker命令来创建容器。具体来说,Kubernetes将任务发送给Docker客户端,然后Docker客户端通过与Docker守护进程(daemon)通信来创建容器。Docker守护进程会通过Image模块下载镜像并保存,然后通过client调用containerd创建并运行容器。在这个过程中,如果需要给容器添加持久化存储,可以使用volume参数;如果需要配置容器网络,可以通过network参数来实现。

然而,Kubernetes提供了更强大的卷挂载能力和集群级别的网络能力。在集群中,kubelet只会使用到Docker提供的镜像下载和容器管理功能,而编排、网络、存储等功能都不会用到。

在Kubernetes 1.24版本以后,Containerd作为容器运行时被引入,带来了创建Pod所需的所有功能。与之前的方案相比,这不仅带来了更纯粹的功能模块,而且缩短了调用链,提高了系统的效率和稳定性。因此,用户可以使用Containerd、CRI-O、CRI-Dockerd及其他容器运行时作为Kubernetes的容器引擎。

图片

Containerd在Kubernetes中的工作流

  1. Kubelet通过CRI运行时服务API调用CRI插件来创建Pod。

  2. CRI创建一个特殊的沙箱容器(pause容器),并将其放置在Pod的Cgroups和NameSpace命名空间中。

  3. CRI使用CNI配置Pod的网络命名空间。

  4. Kubelet随后通过CRI镜像服务API调用CRI插件来拉取应用容器镜像。如果镜像不存在于节点上,CRI会进一步使用Containerd来拉取镜像。

  5.  Kubelet通过CRI运行时服务API调用CRI,并使用拉取的容器镜像在Pod内创建和启动应用程序容器。

  6. CRI创建应用程序容器,将其放入Pod的Cgroups和NameSpace中,然后启动Pod的新应用容器。

在这些步骤之后,一个Pod及其相应的应用程序容器被创建并运行。

图片

Kubernetes弃用Dockershim的影响

容器镜像,由于Docker镜像符合OCI规范,因此可以直接使用而不受影响。此外,原镜像打包方式仍然可用,即使用docker build方式打包镜像。这意味着用户在构建和打包镜像时不需要做出任何改变

Kubernetes中的运行过程,作为终端用户(Kubernetes使用者)基本也不会有任何影响,因为Kubernetes的使用逻辑没有任何变化。然而,与Dockershim相关的API接口已经弃用,如果创建了此类CRD,需要注意修改相关代码。

运维方式,节点后端运维时使用的命令由docker命令改为containerd。如果旧环境使用的是Dockershim引擎,需要先改为containerd运行时再进行升级。运维人员则需要适应新的命令行工具和运行时环境。

Kubernetes弃用Dockershim而采用containerd作为容器运行时对用户和运维方式会有一些影响,但对于已经符合OCI规范的镜像和使用docker build方式打包镜像的用户来说,基本无感知。

Kubernetes用户如何应对?

用户需要按照Kubernetes官方提供的迁移指南进行操作。这包括更新Kubernetes版本、修改Pod配置文件、调整部署流程、更换镜像管理工具以及重新配置监控和日志采集工具等步骤。在迁移过程中,用户还需要注意测试新环境的稳定性和性能,确保迁移成功。

在迁移过程中,用户可能会遇到各种问题,如配置错误、兼容性问题、性能下降等。为了解决这些问题,用户可以参考Kubernetes官方文档和社区资源,或者向灵雀云的服务团队寻求帮助和支持。此外,用户还可以在测试环境中模拟迁移过程,提前发现和解决问题。

迁移到Containerd后,用户可以对系统进行一系列优化和改进,以提高性能和稳定性。例如,优化Pod的配置和部署流程、使用更高效的网络配置方式、改进监控和日志采集策略等。此外,用户还可以关注Kubernetes和Containerd的最新版本和功能更新,及时跟进技术发展趋势。

图片

结论与展望

Kubernetes弃用Dockershim并转向Containerd已经成为一个明显的趋势信号。对于现有的Kubernetes用户来说,应尽快了解这一变化的影响和应对策略,找到适合自己的方案并尽早进行改进。未来,Kubernetes与Containerd的发展趋势将更加紧密地结合在一起,共同推动容器技术的不断创新和发展。

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

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

相关文章

在分布式环境中使用状态机支持数据的一致性

简介 在本文中,我们将介绍如何在分布式系统中使用transaction以及分布式系统中transaction的局限性。然后我们通过一个具体的例子,介绍了一种通过设计状态机来避免使用transaction的方法。 什么是数据库transaction Transaction是关系型数据普遍支持的…

如何利用WebRTC构建点对点的即时通讯工具

在当今竞争激烈的商业环境中,企业越来越需要构建自己的即时通讯工具来提升内部沟通效率和信息安全,减少第三方工具依赖带来的潜在风险,并能与自身的行业业务深入融合。 拥有专用的通讯平台能够加快信息的流动,提升工作协同和任务执…

【C语言】【时间复杂度】Leetcode 153. 寻找旋转排序数组中的最小值

文章目录 题目时间复杂度概念时间复杂度的计算 解题思路代码呈现 题目 链接: link 时间复杂度 概念 时间复杂度是一种函数,定量地描述了该算法运行的时间。既然是一种函数,就涉及到自变量与因变量。因变量代表是时间复杂的规模,自变量是…

HTTP代理的特性、功能作用是什么样的?

在当今互联网时代,HTTP代理作为网络通信中的一项重要技术,在各行各业都有着广泛的应用。然而,对于许多人来说,HTTP代理的特性和功能作用并不十分清晰。在本文中,我们将深入探讨HTTP代理的各种特性和功能,帮…

Linux系统Docker部署Plik系统结合内网穿透实现公网访问本地文件

文章目录 1. Docker部署Plik2. 本地访问Plik3. Linux安装Cpolar4. 配置Plik公网地址5. 远程访问Plik6. 固定Plik公网地址7. 固定地址访问Plik 本文介绍如何使用Linux docker方式快速安装Plik并且结合Cpolar内网穿透工具实现远程访问,实现随时随地在任意设备上传或者…

jenkins+maven+gitlab自动化构建打包、部署

Jenkins自动化部署实现原理 环境准备 1、jenkins已经安装好 docker安装jenkins 2、gitlab已经安装好 docker安装gitlab 一、Jenkins系统配置 1.Global Tool Configuration 任务构建所用到的编译环境等配置,配置参考: jdk配置(jenkins自带…

C# ListView 控件使用

1.基本设置 listView1.Columns.Add("序号", 60); //向 listView1控件中添加1列 同时设置列名称和宽度listView1.Columns.Add("温度", 100); //下同listView1.Columns.Add("偏移", 100);listView1.Columns.Add("分割", 50);listView1…

广州虚拟动力 | AI智能交互型虚拟数字人解决方案

广州虚拟动力整合自研的AI数字人技术与AI大语言模型技术,推出AI智能交互型虚拟数字人解决方案,面向旅游景区、博物馆、银行、医院、营业厅、酒店住宿、大型商场等,以AI数字人为载体,承担公共服务职能,根据各行业特性和…

学习Java的第十天

本章来讲一下什么是字符串 一、什么是字符串 在Java中,最常见的基本类型就是字符串了,哪哪都能见到,如输入语句,输出语句等!那么,什么是字符串呢,字符串就是String类,String类是Ja…

1361:产生数(Produce)

【解题思路】 1、将数字拆分保存在数组中,而后转换每一位。 2、将数字变化规则保存在x、y两个一维数组中,x[i]到y[i]是一种转换规则。 3、从n的初始值开始搜索,对n做数字拆分,将拆分后的各位数字保存在一个数组中。针对数组中的每…

使用timm库的一些知识点

timm(Torch Image Models)是一个在PyTorch上构建的图像模型库,它提供了一系列预训练的深度学习模型,使得研究人员和开发者可以方便地进行图像分类、目标检测等任务。 使用timm库创建模型时,如何确定模型的名字 使用…

3-14八股文学习

八股学习是看别人面试被问到的问题,然后把它发给GPT,让gpt讲一讲,自己再理解一下,真的很想拿offer,想去暑期实习啊啊啊啊啊 你用过什么 SpringBoot 里的什么注解?Spring Boot 中有很多常用的注解&#xff…

Ele admin pro和iView Admin pro的用户管理页面对比

Ele admin pro和iView Admin pro都是非常优秀的B端框架,功能大同小异,本文就着重比对一下二者的用户案例页面,让老铁们感知一些细节。 一、用户列表 用户列表 用户列表 二、用户编辑 三、用户添加 四、角色管理 五、权限分配 六、角色添加

Web前端开发学习路线图

Web前端开发学习路线图可以为你提供一个明确的学习路径,帮助你逐步掌握Web前端开发的各项技能。以下是一个基本的学习路线图,你可以根据自己的实际情况进行调整和补充。 一、基础阶段 HTML:学习HTML的基本语法,了解HTML文档的结构…

【Linux网络】应用层协议——http协议

目录 HTTP协议 认识URL urlencode和urldecode HTTP协议格式 HTTP请求协议格式 获取浏览器的HTTP请求 HTTP响应协议格式 构建HTTP响应给浏览器 构建处理HTTP请求类及代码完善 HTTP的方法 GET方法和POST方法 HTTP的状态码 HTTP常见Header Cookie&Session HTT…

c++ 常用函数 集锦 整理中

c 常用函数集锦 目录 1、string和wstring之间转换 1、string和wstring之间转换 std::string convertWStringToString(std::wstring wstr) {std::string str;if (!wstr.empty()){std::wstring_convert<std::codecvt_utf8<wchar_t>> converter;str converter.to_b…

java 数据结构 优先级队列(PriorityQueue)

目录 优先级队列 堆的概念 堆的性质 堆的存储方式 堆的创建 堆的插入 堆的删除 用堆模拟实现优先级队列 PriorityQueue的特性 PriorityQueue常用接口介绍 堆排序 优先级队列 前面介绍过队列&#xff0c;队列是一种先进先出(FIFO)的数据结构&#xff0c;但有些情况下…

【BUG 弹药库】Tortoise git 绿色的勾 ✔ 和 红色的 !突然不见了该如何解决呢?

文章目录 1. 出现的问题描述如下所示&#xff1a;2. 如何解决这个问题呢 &#xff1f; 1. 出现的问题描述如下所示&#xff1a; 用 TortoiseGit 提交代码的时候&#xff0c;红色的 ! 和 绿色的 ✔ 突然消失了&#xff1b; 2. 如何解决这个问题呢 &#xff1f; ① 首先按住快…

新版Android Studio火烈鸟 在新建项目工程时 无法选java的语言模板解决方法

前言 最近下载最新版androidstudio时 发现不能勾选java语言模板了 如果快速点击下一步 新建项目 默认是kotlin语言模板 这可能和google主推kt语言有关 勾选1 如图所示 如果勾选 No Activity 这个模板 是可以选java语言模板的 但是里面没有默认的Activity 勾选2 和以前的用法…

SL6015B 耐压60V高调光比LED驱动IC 支持1.5A 输出30W功率

SL6015B是一款耐压60V、高调光比LED驱动IC&#xff0c;支持1.5A输出电流&#xff0c;最大输出功率达到30W。这款驱动IC专为LED照明应用而设计&#xff0c;具有出色的性能表现和广泛的应用前景。 首先&#xff0c;SL6015B的高耐压能力使其能够适用于各种高电压的LED照明场合。无…