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

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 的发展趋势将更加紧密地结合在一起,共同推动容器技术的不断创新和发展。

参考文档:

  • https://kubernetes.io/zh-cn/blog/2022/02/17/dockershim-faq/

  • https://kubernetes.io/zh-cn/blog/2020/12/02/dont-panic-kubernetes-and-docker/

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

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

相关文章

DDC和PLC的区别

前言 PLC与DDC控制器的比较,一直以来在相关领域内受到广泛关注。每个人站在不同的角度分析,都会有不同的结论,我们今天聊聊这个话题。 基本定义和功能 可编程控制器PLC与直接数字控制器DDC,两者都由CPU模块、I/O模块、显示模块…

工业智能网关:plc数据采集对接mes系统

在工业自动化领域,制造执行系统(MES)与可编程逻辑控制器(PLC)之间的实时通信对于提高生产效率、确保产品质量和实现智能化生产至关重要。工业智能网关作为连接两者的关键设备,正在发挥着越来越重要的作用。…

DDAE: Denoising Diffusion Autoencoders are Unified Self-supervised Learners

DDAE: Denoising Diffusion Autoencoders are Unified Self-supervised Learners Paper:https://arxiv.org/abs/2303.09769 Code:https://github.com/FutureXiang/ddae TL; DR:扩散模型的训练其实就是训练一个去噪模型,考虑到类似…

浅了解一下『微前端』

1 什么是微前端 微前端的核心理念是将前端应用程序看作是一个整体,由多个独立的部分组成。每个部分被视为一个微前端应用,它们可以具有自己的技术栈、开发流程和团队组织。这种方式使得团队可以独立开发和部署各个子应用,减少了协调和合并的…

析构和友元函数

1. 类的析构函数 析构函数的作用,用于释放该类所占用的资源(或者说释放对象)在类的对象使用完时(当类的对象超出了作用域),会自动调用析构函数;如果是在堆区实例化的对象,那么当手动…

二分查找——OJ题(一)

📘北尘_:个人主页 🌎个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上,不忘来时的初心 文章目录 一、二分查找1、题目讲解2、算法原理3、代码实现 二、在排序数组中查找元素的第一个和最后一个…

Mini MyBatis-Plus(下)

作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO 联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬 最核心的内容前两篇已经…

docker 安装可视化工具 Protainer 以及 汉化

一、创建保存数据的卷 安装网址:Install Portainer BE with Docker on Linux - Portainer Documentation docker pull portainer/portainer二、根据portainer镜像创建容器 docker run -d -p 8000:8000 -p 9000:9000\ --name portainer --restartalways \ -v /var/r…

深入ArkUI:深入实战组件text和text input

文章目录 Text组件介绍Text组件的属性方法Text:文本显示组件4.3TextInput组件实战案例:图片宽度控制页面本文总结要点回顾在今天的课程中,我们将深入学习ArkUI提供的基础组件,着重探讨text和text input两个组件。 Text组件介绍 Text组件是一个用于显示文本的组件,其主要作…

VSCode安装Go环境

VSCode安装Go 1.点击Go官网,根据自己环境下载go安装包,我这里为Windows 2.双击安装包,一直点击【Next】即可 VSCode配置Go基础环境 1.创建Go的工作目录: C:\Code\GoCode 2.创建Go的环境变量: GOPATH (1)右键【此电脑】,点击…

C/C++转WebAssembly及微信小程序调用

上一篇文章讲了C/C如何转WebAssembly,并测试了在Web端调用。本篇内容和上篇一样,介绍C/C包转的.wasm包如何在小程序中调用。 说明 本篇是在上一篇步骤1-4的基础上,再做修改,供微信小程序端调用的方法和步骤。 本篇操作手册可以…

Python自动化测试:选择最佳的自动化测试框架

在开始学习python自动化测试之前,先了解目前市场上的自动化测试框架有哪些? 随着技术的不断迭代更新,优胜劣汰也同样发展下来。从一开始工具型自动化,到现在的框架型;从一开始的能用,到现在的不仅能用&…

鸿蒙问题之本地模拟器无法识别

今天按例打开本地模拟器,发现DevEco Studio不能检测到我的本地模拟器了。 重启了DevEco Studio和模拟器多次都无果。果断删除模拟器 然后创建一个新的,就可以成功检测到了。这应该是idea的一个bug

关于python解析mf4中二维信号数据的注意事项

python解析mf4中的信号数据一般用np.ndarray存储,但是mf4中的一个信号有时不一定是一维数据,有时会是一个二维的,没错,就是一个信号数据就是二维的,这时候,np数组的每个元素也是一个数组,这个时…

【揭秘】如何制作推拉门电子画册,轻松成为行业大咖!

​在当今数字化时代,电子画册已成为企业展示产品、服务的重要手段。与传统印刷画册相比,电子画册具有诸多优势,如易于传播、易于更新、环保低碳等。更重要的是,通过电子画册,企业可以更好地与目标受众互动,…

天津医科大学临床医学院专升本药学专业有机化学考试大纲

天津医科大学临床医学院高职升本科专业课考试大纲药学专业《有机化学》科目考试大纲 一、考试基本要求 本考试大纲主要要求考生对《有机化学》基本概念有较深入的了解,能够系统地掌握各类化合物的命名、结构特点及立体异构、主要性质、反应、来源和合成制备方法等…

相对于一般的统计学,计量经济学的特色是什么?谈Stata与计量经济学

Stata作为一种数据分析软件,高度适用于依托计量经济学的研究领域,如宏观经济学、财政学等,当然在医学等学科应用也较为广泛,在处理面板数据方面也深具特色。计量经济学是指运用概率统计方法对经济变量之间的因果关系进行定量分析的…

idea的pom.xml文件灰色删除线解决办法

以上是点击了移除module后就变成这样 如果再次对着已移除的module右键会发现有个delete,点击这个是真删了,要谨慎备份哦 解决方案:恢复误操作remove module的解决方法 idea最右边,有个Maven控件,找到要恢复的module&a…

vscode连接linux服务器

目录 下载vscode,这是微软开源软件,打开后到下载扩展页面 在下载扩展页面下载中文和ssh远程连接扩展 安装后会在左边新生成一个图标点击齿轮 选择第一个 配置连接信息 远程隧道右边刷新,等刷出来hostname的主机后 连接ip出来后&#x…

mybatisX自动生成sql语句,尝试测试方法报错

今天我使用mybatisx自定义mapper方法生成sql语句后,在测试时报错 错误是MyBatis 无法找到映射的语句(Statement)引起的 我是这样操作的,在mapper接口自定义了一个方法 然后alt加enter,自动生成sql 结果 mapper.xml文件…