Docker将从Kubernetes中移除,我该怎么办?

The `mirrors` property of `[plugins.“io.containerd.grpc.v1.cri“.registry]` is deprecated解决方案 以下这种配置在1.5版本就弃用了,预计在2.1版本彻底移除。 阅读详情

Docker将从Kubernetes中移除,我该怎么办?

对开发者而言

不必惊慌,Docker 容器和镜像依然在,Docker 将不会有任何的改变。
这两篇文章值得大家去阅读:
Don’t Panic: Kubernetes and Docker
Dockershim Deprecation FAQ

对K8S管理员而言

仔细阅读下面的内容并且开始思考 Docker 的替代方案。

是真的吗?

确实如此!Docker 现在不推荐在 K8S 中使用。

Docker support in the kubelet is now deprecated and will be removed in a future release. The kubelet uses a module called “dockershim” which implements CRI support for Docker and it has seen maintenance issues in the Kubernetes community. We encourage you to evaluate moving to a container runtime that is a full-fledged implementation of CRI (v1alpha1 or v1 compliant) as they become available.

摘自 K8S GitHub

简而言之,由于 Docker 不支持 CRI (Kubernetes Runtime API)。K8S 的工程师使用了一个种桥接的方式,我们称之为 “Docker-Shim”,它的作用是将 CRI 转换为 Docker API,但是它在 K8S 后面的发行版本中不在提供。

实话实说,Docker 在本地是一个非常有力的工具去创建开发环境,但是要去理解为什么 K8S 要在以后的发现版本中移除 Docker ,你需要去理解 Docker 在当前的 K8S 环境中做了什么事情。

K8S 是一个底层的编排工具,它的目的是能够对许多不同的虚拟机或者是物理机进行组合,使之看起来是一个巨大的计算资源,提供资源让应用程序运行和相互访问。在这个体系下面,Docker 或者说是其他的容器运行时,被用作在指定的某台主机并且被 K8S 的控制面调度。
在这里插入图片描述
可以从上面的这张架构图看到,每个 K8S 节点都和控制面交互。kubelet 在每个节点上获取元数据并且通过执行 CRI 去创建或删除容器。

但是为什么 Docker 要被移除呢?

再强调一遍!K8S 只能通过 CRI 的方式去交互并且 Docker 需要一种桥接服务 Docker-Shim 才能支持。这是第一个原因。

为了去阐述下一个原因,我们有必要去看一下 Docker 的架构图,如图:
在这里插入图片描述
可以看到 Docker 的功能非常丰富,但是 K8S 真正需要的只有红框部分。例如 Docker 的网络、卷等都没有在 K8S 中被用到。
有很多的特性没有被采用,但是这些特性又会有安全隐患。有更少的特性,则会有更小的攻击面。
所以这就是你需要开始思考的替代方式,称之为:CRI runtimes。

CRI runtimes

目前有两个主要的 CRI runtime 实现方式。

containerd

如果你仅仅想从Docker迁移,containerd 是最好的选择,因为它本来就作为 Docker 的一部分被采用去做所有的运行时工作,就如上图红色框部分的功能。他由 Docker 完全提供 CRI 实现。

containerd 是完全开源的,所以你能够在 GitHub 查看文档,甚至可以去贡献代码。

containerd GitHub 地址

CRI-O

CRI-O 是一个由 Red Hat (红帽) 开发的 CRI 运行时。事实上,这个运行时正在被 Red Hat OpenShfit 使用。这个方式就一点都不依赖 Docker 了。

有趣的是,RHEL 7 也不正式支持 Docker 了,取代方案是 Podman、Buildah 和 CRI-O 作为容器环境。

CRI-O GItHub地址

CRI-O 的有点在我看来就是极简主义的,因为它被创建来作为 “CRI”运行时。因为 containerd 是作为 Docker 的一部分尝试去做更多的开源,但是 CRI-O 是纯的 CRI 运行时,它的内容都是 CRI 所需要的。

它仍然可以提供在 K8S 上运行应用程序所需要的功能,但是从 Docker 迁移到 CRI-O 可能会更具挑战性。

还有一件事…

当我们在谈论容器运行时的时候,我们需要注意在谈论的是那种类型。我们需要知道有两种类型,分别是 CRI runtimes 和 OCI runtimes。

CRI runtimes

正如我前面提到的那样,CRI 是一个 K8S 提供的 API,目的是为了与容器运行时交互,达到创建和删除容器化应用程序的目的。

他们以 kubelet 为单位通过 gRPC 方式调用并且容器运行时在和 kubelet 相同的主机上。CRI runtimes 的作用就是去获取 kubelet 的请求并且执行 OCI 容器运行时去运行容器。我觉得用一个图能够更好的解释。如图:
在这里插入图片描述
所以 CRI 做的事情如下:

  1. 获取从 kubelet 的 gRPC 请求
  2. 创建 OCI json 配置文件参考链接
OCI runtimes

OCI runtimes 的作用是使用 Linux 内核系统调用(例如cgroups和namespace)创建容器。你可能听说过 runc 或 gVisor。下面就是有关他们内容:

附录一:runC 是如何工作的

在这里插入图片描述
CRI 通过调用 Linux 系统调用执行二进制文件后,runC 创建容器。这表明runC依赖Linux机器上运行的内核。
这也意味着,如果您发现runC的漏洞使您获得了主机的root特权,那么容器化的应用程序也可以这样做。一个糟糕的黑客可能会使您的主机根深蒂固!事情肯定会变糟的。这就是为什么您也应该不断更新Docker(或任何其他容器运行时)的原因之一,而不仅仅是容器化的应用程序。

附录二:gVisor 是如何工作的

在这里插入图片描述
gVisor是最初由Google员工创建的OCI运行时。它实际上在其基础架构上运行以运行其云服务,例如Google Cloud Run,Google App Engine(第二代)和Google Cloud Functions(甚至更多!。

有趣的是,gVisor具有“来宾内核”层,这意味着容器化的应用程序无法直接接触主机内核层。即使他们认为确实如此,他们也只会接触gVisor的来宾内核。
gVisor的安全模型实际上非常有趣,值得一读gVisor官网

与runC的显着差异如下:

  1. 性能较差
  2. Linux内核层不是100%兼容的,参考阅读gVisor官网
  3. 默认不支持

总结

1. Kubernetes 确定会弃用 Docker。因此,如果您是K8s管理员,则应开始考虑采用CRI运行时(例如 containerd 和 CRI-O)
a. containerd 与 Docker 兼容的,其中核心组件是相同的。
b. CRI-O可以是你想要的 Kubernetes 更多的最小功能强大的选项。

2. 了解 CRI 和 OCI 运行时职责和范围的区别
根据您的工作负载,runC可能并不总是使用最好的选择!

参考文章

Wait, Docker is deprecated in Kubernetes now? What do I do?

【学习笔记 - Kubernetes(k8s)】CentOS 安装kubernetes CentOS 安装kubernetes 机器配置要求: 3台 机器 第1台:my-master 这台机必须配置2个cpu以上, 2G内存以上 第2台:my-node-1(1核2G) 第2台:my-node-2(1核2G) 系统Cent OS 7.6 或ubuntu 安装docker (安装过docker的可以跳过此步骤) 设置 yum repository # 在 master 节... 阅读详情

相关推荐

【kubernetes】通过外置CRI-DOCKER建立起新版K8s与Docker间的桥梁

kubernetes 从1.24版本开始,正式移除了内置的dockershim组件,这个组件是kubernetes官方开发和维护的一个容器运行时接口组件(即Container Runtime Interface),CRI的作用主要有两方便,一个是镜像的操作,如:下载、删除等,另一方面是对于容器的操作,包括容器的创建、停止和删除等。dockershim被移除后,意味着需要使用第三方的dockershim组件,如:cri-docker、containerd,才能继续在k8s集群中使用docker。

cnskylee的博客 4983

flink 经常发生 remove container

将一些维表加载到内存中,因为数据量过大导致节点加载时间长,worker节点与master节点的心跳超时,导致container被remove掉 解决办法: 1、减少加载到内存中的数量量 2、默认每个节点发送一份数据,可以将全量数据分散到不同的worker节点上,减少单节点加载数据的压力 ...

weixin_47894524的博客 427

【Cadence】 ADS Dynamic Link使用教程

在Cadence617上使用ADS Dynamic Link

乾巽的博客 6074

k8s1.20 搭建-抛弃docker使用containerd

前言: k8s动不动就要抛弃docker,好吧,让我们体验一下没有docker的k8s。 1.环境准备 【所有节点上执行】 1.1 关闭无用服务 关闭selinux # sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/sysconfig/selinux # sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config 关闭交换分区 # sed -i "/s.

架构+开发+运维 3392

ShardingSphere分库分表教程,java后端开发面试题

???? 简介:Java领域优质创作者????、优快云哪吒公众号作者✌ 、Java架构师奋斗者???? ???? 扫描主页左侧二维码,加入群聊,一起学习、一起进步 ???? 欢迎点赞 ???? 收藏 ⭐留言 ???? 目录 一、分库分表 二、分库分表的方式 1、垂直分表 2、垂直分库 3、水平分表 4、水平分库 三、分库分表带来的问题 1、学习成本问题 2、事务问题 3、跨节点join问题 4、跨节点的count、order by、group by以及聚合函数问题 5、数据迁移、容量规划、扩

m0_64205716的博客 3015

Landsat 9 数据预处理第一步:在ENVI里正确加载影像的保姆级指南(含MTL文件处理)

本文详细介绍了Landsat 9数据在ENVI中的预处理流程,重点讲解了MTL文件的关键修改与正确加载方法,帮助遥感新手快速掌握数据加载技巧。通过辐射定标、大气校正等步骤,确保数据达到分析就绪状态,适用于土地覆盖分类等高级应用。

weixin_29201313的博客 207

【Docker记录】Docker容器杀不掉,一直自动重启?

工作中我遇到一个问题,有几个docker容器docker rm -f 或者docker kill 后,会自动重启。 解决:因为kubelet没有关闭,容器删掉后,自动被k8s拉起了,删除kubelet,然后再删除容器就可以了。 ps -ef | grep kubelet kill -9 1949 rm -rf /usr/bin/kubelet ...

每一步,都在缩短你与梦想的距离。 5658

Win10如何使用BC3.1精简版

Win10如何使用BC3.1精简版 使用Borland C++3.1 学习μC/OS—Ⅱ几乎是现在的普遍做法,但是由于Win10系统不能直接使用BC3.1,所以需要用到DOSBox。 1、解压bc3.1精简版压缩包,本文将BC3.1文件夹复制在D盘下,DOSBOX按照默认路径安装。下图为两者安装目录图示: 2、修改DOSBOX的配置文件,找到DOSBox文件安装路径,记事本方式打开DOSBox 0.74-3 Options.bat文件,在此文件末尾添加: MOUNT C D:\BC//意为把D:\BC目录

qq_45547236的博客 2376

Conmi的正确答案——K8S删除pod后又自动创建一个的问题的解决方案(示例:删除mariadb)

系统:ubuntu20.04 K8S版本:v1.23.1 docker版本:20.10.12 1、先查出全部内容 kubectl get pods,service,jobs,replicasets,statefulsets,deployments,rs,rc -A 这条指令执行完后我只在这里找到相关信息(mariadb的) 2、开始进行删除操作 直接删pod又会新建,所以要先删其他内容 # 先测试删除statefulsets下的test-bitnami-mariadb-mariadb-galera ku

Conmi的博客 2720

EEMD算法原理及应用

本博客主要概括EEMD算法的背景、原理以及应用,利用EEEMD对信号进行分解,然后选择有用的IMF分量进行叠加以完成信号的重构,从而实现对信号降噪。本文配套的源代码见文中链接,可供大家免费下载。

总结论文中的算法并给出论文的复现代码 4万+

Simulink开发项1000例实战专栏--实例17:基于 Simulink 的 BLDC 电机驱动系统的设计与实现

项目背景无刷直流电机(BLDC)因其高效、可靠、低维护的特点,广泛应用于电动汽车、无人机、工业自动化等领域。基于 Simulink 的 BLDC 电机驱动系统可以实现对电机的精确控制,包括速度控制、位置控制和转矩控制。通过仿真和测试,可以优化控制算法,提高系统的性能和可靠性。

xiaoheshang_123的博客 561

K8s宣布弃用Docker,Dockershim将移除

参考文章: K8s宣布弃用Docker,千万别慌! K8S为什么要弃用Docker?Dockershim将移除 一、背景 由于最近知道了 K8s 新版本(v1.20)确定弃用 Docker 的消息,为了明确是否会对现有系统架构产生响,所以对涉及到的相关技术进行了一定的梳理(索性的是对现有的系统架构基本无影响:>)。 二、K8s(版本 < 1.20) 与 Docker 的关系 首先,通过一张图片来说明 K8s(版本<1.20)与 Docker 之间的关系。为了能够更好的理解下边的

justlpf的专栏 3360

【PINN高级教程】范式融合与前沿应用 第5讲:贝叶斯推断与生成式建模的深度融合

正规化流(Normalizing Flow, NF)通过一系列可逆变换把简单分布映射为复杂后验,从而获得更好的表达能力。算子学习保持映射的物理正确性。贝叶斯推断给出了自然的框架,但直接对高维函数空间做采样(如 MCMC)几乎不可行。1️⃣ 在自己的 PDE 上跑一遍完整的 Bayesian PINN 流模型。的学习机制深度融合,以在保持物理一致性的前提下,高效地从后验分布中采样。2️⃣ 将每个 θ 直接映射到 FNO 权重,得到不同解的采样。的后验 p(θ∣x,y)p(θ∣x,y) 进行近似。

u012133341的博客 474

k8s 1.24 及以后版本如何对接 docker

关注 k8s 的小伙伴门都知道在 k8s 1.24 版 dockershim 代码正式的从 k8s 移除了。这也就意味着k8s 与 docker 的对接再也不像以前那么丝滑了。这篇文档记录一下我在使用 docker 作为 CRI 插件时部署 k8s 的步骤。我依然借助 kubeadm 来部署 k8s,关于 kubeadm 的使用可以参考我前面的文档,和这篇文档重复的步骤我就不在这儿写了,我们只关注和 docker 相关的部分。............

yjf147369的博客 9753

使用SIMD思想进行memcpy的优化

arm64平台的memcpy的性能优化,相比C库提升30~40%,SIMD优化思路

zhaoxin1989的博客 1万+

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

cosmos3-nano-libero10-sdg-export-D5 架构深度解析:Qwen3-VL 8B 语言主干 + 扩散专家的 Mixture-of-Transformers 设计完全指南

`cosmos3-nano-libero10-sdg-export-D5` 是 NVIDIA Cosmos3-Nano 系列中一个面向机器人操作的视觉-动作(VLA)策略模型:它以 **Qwen3-VL 8B** 为语言主干,通过 **Mixture-of-Transformers(MoT)** 设计并联一个**扩散生成专家**,在 LIBERO-10 基准上后训练得到。标准场景成功率 **93.

gitblog_00408的博客 357

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

一口气搞清楚K8S的CRI接口(以及Docker、containerd、cri-o)

解耦 Kubernetes 和容器运行时,支持多种容器运行时。

weixin_74867108的博客 2760

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

k8s 抛弃弃用docker

K8s决定在 1.20 开始放弃 Docker,并在1.21完全抛弃 Docker 的支持。2020 年 12 月,Kubernetes 社区决定着手移除仓库中 Dockershim 相关代码,对于k8s和 Docker 两个社区来说都意义重大。 如上图所示,Kubernetes节点代理 Kubelet为了访问Docker提供的服务需要先经过社区维护的 Dockershim,Dockershim 会将请求转发给管理容器的 Docker 服务。Kubernetes 通过下面的一系列接口为不同模块提供扩展性:

神棍之路 4632

K8s为什么要放弃Docker

Docker 于 2013 年发布,解决了开发人员在端到端运行容器时遇到的许多问题。下面是他包含的所有东西:● 容器镜像格式● 一种构建容器镜像的方法(Dockerfile/docker build);● 一种管理容器镜像(docker image、docker rm等);● 一种管理容器实例的方法(docker ps, docker rm 等);● 一种共享容器镜像的方法(docker push/pull);● 一种运行容器的方式(docker run);

Levin的技术工厂 1万+

Docker Shim被移除,K8s v1.24升级该怎么办

Kubernetes v1.24 将于今年 4月正式发布,Docker Shim 被移除了,CRI Dockerd 登场。

DaoCloud_daoke的博客 829

【笔记】解决断电后k8s和docker起不来的问题

解决断电后docker和k8s起来不了的问题

weixin_48819467的博客 2772

k8s源码分析 pdf_深究k8s弃用docker的背后

作者:叶苇背景近日,Kubernetes官方发布公告,宣布自 v1.20 起放弃对 Docker 的支持,届时用户将收到 Docker 弃用警告,并需要改用其他容器运行时。但 Docker 作为容器镜像构建工具的作用将不受影响,用其构建的容器镜像将一如既往地在集群中与所有容器运行时正常运转。在这里,日常使用docker和k8s的大家,是不是会有这样的疑问:现有打包的景象要怎么迁移?会不会...

weixin_33019705的博客 711

kubeadm部署kubernetes 1.24版本集群

kubeadm 安装docker支持的k8s环境

u011415722的博客 2904

k8s卸载

在卸载K8s组件前,先执行kubeadm reset命令,清空K8s集群设置卸载管理组件 kubeadm reset 卸载管理组件 yum erase -y kubelet kubectl kubeadm kubernetes-cni docker全部清理 docker rm $(docker ps -a -q) docker rmi $(docker images -q) docker 重启 systemctl daemon-reload systemctl restart do..

zhongjl的博客 6879

Kubernetes (K8s) 底层早已不再直接使用 Docker 引擎了

K8s 底层跑的是什么?是containerd(最常见) 或CRI-O。Docker 死了吗?没死。它依然是开发阶段构建和运行容器的王者,只是退出了生产环境编排运行的舞台。你需要做什么?继续用 Docker 写Dockerfile和构建镜像。在部署 K8s 集群时,选择默认集成containerd的方案(如 K3s, Kubeadm + containerd, 或云厂商托管服务)。不要再尝试在新版 K8s 中安装和配置 Docker Engine 作为运行时。

lpfasd123的博客 496

Kubernetes 弃用 Docker 对程序员有什么影响?

首先来说结论,Kubernetes 弃用 Docker 对程序员没有什么影响。原因很简单,程序员可以继续使用 Docker Image,因为 Docker 的容器镜像 (Image) 遵循 OCI 标准,这是 Docker 在 2015 年发起的标准。Kuberenetes 的容器镜像就是支持的 OCI 标准。 为什么 K8s 要宣布不支持 Docker? 这是因为 K8s 只需要 Docker 的容器功能,而 Docker 本身包含了下面的几大功能。 Container Runtime API CLI

surfirst的博客 594
上一篇: VirtualBox 安装 Ubuntu 虚拟机
下一篇: git clone unable to connect的排错记录
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值