Kubernetes将弃用docker?
1.前言
近日,Kubernetes 官方发布公告,宣布自 v1.20 起放弃对 Docker 的支持,届时用户将收到 Docker 弃用警告,并需要改用其他容器运行时。并在1.23后不再支持docker。
但Docker目前作为容器镜像构建工具的作用将不受影响,用其构建的容器镜像将一如既往地在集群中与所有容器运行时正常运转。

- 维护dockershim已成为Kubernetes维护人员的一种负担。创建CRI标准就是为了减轻这种负担,并提升不同容器运行时的可移植性性。Docker本身目前没有实现CRI,但Containerd实现了CRI接口。Dockershim一直是一种临时解决方案,此外,与dockershim不兼容的特性,如cgroups v2和用户命名空间,实现CRI接口的运行时也在慢慢探索并实现上述特性。
- Kubelet中对Docker支持被弃用,并将在以后的版本中删除。Kubelet使用一个名为
dockershim的模块,该模块实现了对Docker的CRI支持,在此PR后续版本将删除dockershim。删除了dockershim,那么就不支持了。 - Kubectl弃用
--delete-local-data参数。
2.名词解释
上面中提到两个名词,分别为CRI和dockershim。下面分别解释一下:
2.1 CRI
大家在看到CRI时就会想起OCI,这两个名词概念容易混淆。
CRI:容器运行时接口container runtime interface,CRI 中定义了容器和镜像两个接口,实现了这两个接口目前主流的是:CRI-O、Containerd。(目前 PCI 产品使用的即为 Containerd)。
其主要的作用:
1.针对容器操作的接口,包括容器的创建、启动和停止等
2.针对镜像的操作,拉去、删除镜像等
3.针对 podsandbox(容器沙箱环境)
4.以上全是接口
2.2 OCI
OCI:开放容器标准open container initiative,OCI 中定义了两个标准:容器运行时标准和容器镜像标准,实现了这一标准的主流是:runc(也即我们日常说的 Docker)、Kata-Container。
主要作用,制作容器:
1.容器镜像制作内容,即ImageSpec
2.容器需要接收哪些指令,即runtimeSpec
2.3 Dockershim
dockershim作用:把外部收到的请求转化成Docker Daemon能听懂的请求,让 Docker Daemon 执行创建、删除等容器操作。
3.Kubelete 创建容器步骤

1.Kubelet通过 CRI 接口(gRPC)调用 dockershim,请求创建一个容器。CRI 即容器运行时接口,这一步中,Kubelet 可以视作一个简单的 CRI Client,而dockershim 就是接收请求的Server。目前dockershim 的代码其实是内嵌在Kubelet中的,所以接收调用就是Kubelet进程。
2.dockershim收到请求后,转化成Docker Daemon 能听懂的请求,发到Docker Daemon 上请求创建一个容器。
3.Docker Daemon早在1.12 版本中就已经将针对容器的操作移到另一个守护进程 containerd 中,因此 Docker Daemon仍然不能帮我们创建容器,而是要请求containerd 创建一个容器。
4.containerd收到请求后,并不会自己直接去操作容器,而是创建一个叫做 containerd-shim的进程,让containerd-shim 去操作容器。是因为容器进程需要一个父进程来做诸如收集状态,维持stdin等fd 打开等工作。而假如这个父进程就是containerd,那每次containerd 挂掉或升级,整个宿主机上所有的容器都得退出了。而引入了 containerd-shim 就规避了这个问题(containerd 和 shim 并不是父子进程关系)。
5.我们知道创建容器需要做一些设置 namespaces 和 cgroups,挂载 root filesystem 等等操作,而这些事该怎么做已经有了公开的规范,那就是 OCI。它的一个参考实现叫做 runC。于是,containerd-shim 在这一步需要调用 runC 这个命令行工具,来启动容器。
6.runC 启动完容器后本身会直接退出,containerd-shim 则会成为容器进程的父进程,负责收集容器进程的状态,上报给containerd,并在容器中pid为1的进程退出后接管容器中的子进程进行清理,确保不会出现僵尸进程。
通过上面来看,Docker Daemon和dockershim看上去就是两个不干活的东西,Kubelet 为啥不直接调用containerd呢?其实和容器历程有关,这里不在阐述。
尽管现在已经有CRI-O,containerd-plugin这样更精简轻量的Runtime架构,但dockershim这一套作为经受了最多生产环境考验的方案,迄今为止仍是Kubernetes默认的 Runtime实现。不过Containerd逐渐被人们所知晓。
4.展望
虽然未来Kubelet删除dockershim支持,但并不说明Docker马上就不能在 Kubernetes 中使用,目前容器市场 Docker 还是占用很大的比例。这中间会有一个过渡期,大家可以关注Containerd或者Podman。Centos8开始,仓库源默认容器已经从Docker切换为Podman。
参考链接: https://blog.csdn.net/easylife206/article/details/110602496
Kubernetes将弃用docker?的更多相关文章
- Kubernetes将弃用Docker!与 containerd容器引擎
时间戳:2022-06-07 20:32:19 星期二 撰写文档参考:(阿良-腾讯课堂)Kubernetes将弃用Docker 参考博客k8s入坑之路(3)containerd容器 container ...
- Kubernetes弃用Docker后怎么办?
本文转自Rancher Labs 近期,Kubernetes在其最新的Changelog中宣布,自Kubernetes 1.20之后将弃用Docker作为容器运行时.这一消息在云原生领域激起了不小的水 ...
- 系列好文 | Kubernetes 弃用 Docker,我们该何去何从?
作者 | 张攀(豫哲) 来源 | 尔达 Erda 公众号 导读:Erda 作为一站式云原生 PaaS 平台,现已面向广大开发者完成 70w+ 核心代码全部开源!**在 Erda 开源的同时,我们计划编 ...
- Centos7上安装Kubernetes集群部署docker
一.安装前准备1.操作系统详情需要三台主机,都最小化安装 centos7.3,并update到最新 [root@master ~]# (Core) 角色 主机名 IPMaster master 192 ...
- Kubernetes 集群升级docker版本
Kubernetes 集群升级docker版本 原则:升级完一台正常后再接着升下一台. Work Node 一.迁移上的pod(保证业务,但期间会出现抖动) kubectl drain $NODE ...
- K8S为什么要弃用Docker?Dockershim将移除
一.背景由于最近知道了 K8s 新版本(v1.20)确定弃用 Docker 的消息,为了明确是否会对现有系统架构产生响,所以对涉及到的相关技术进行了一定的梳理(索性的是对现有的系统架构基本无影响:&g ...
- Kubernetes容器运行时弃用Docker转型Containerd
文章转载自:https://i4t.com/5435.html Kubernetes社区在2020年7月份发布的版本中已经开始了dockershim的移除计划,在1.20版本中将内置的dockersh ...
- kubernetes实战篇之docker镜像的打包与加载
系列目录 前面我们讲到了使用nexus搭建docker镜像仓库,操作还是有点复杂的,可能有的童鞋仅仅是想尝试kubernetes功能,并不想在搭建仓库上花费过多时间,但是又想在不同的主机之间传递镜像. ...
- Windows玩转Kubernetes系列2-Centos安装Docker
接上一章,Windows玩转Kubernetes系列1-VirtualBox安装Centos,我们开始学习如何在Centos中安装Docker 准备 关闭防火墙 防火墙一定要提前关闭,否则在后续安装K ...
随机推荐
- [bug] @Test注解无法使用
参考 https://blog.csdn.net/lixiangxiang666/article/details/83745901
- [其他] vscode 快速教程
概述 vs:集成开发环境,包括软件生命周期中需要的大部分工具,如UML,代码管控,IDE等 vs code:代码编辑器,支持插件扩展,对网页和云端开发做了优化 快捷键 F1/ctrl+shift+p: ...
- head元素的内容
一.head元素 head元素的内容用来向浏览器提供一些文档信息,此外还可以包含js脚本和css层叠样式单.head中一般包含title.meta.css.js等内容,head中元素的内容在浏览器中不 ...
- iozone的使用与介绍-20191105
https://www.jianshu.com/p/faf82e400aa6 iozone的使用与介绍 0.0722017.05.10 07:40:41字数 550阅读 1817 iozone的使用与 ...
- Linux占用swap分区过高,物理内存还有剩余
Linux占用swap分区过高,物理内存还有剩余 问题分析 Swap配置对性能的影响 分配太多的Swap空间会浪费磁盘空间,而Swap空间太少,则系统会发生错误.如果系统的物理内存用光了,系统就会跑得 ...
- mysql有关配置
mysql有关配置 mysql安装 mysql安装方式有三种 源代码:编译安装 二进制格式的程序包:展开至特定路径,并经过简单配置后即可使用 程序包管理器管理的程序包: rpm:有两种 OS Vend ...
- 攻防世界(二)Training-WWW-Robots
攻防世界系列:Training-WWW-Robots 1.查看robots.txt的要求 补充: 什么是robots.txt协议? Robots.txt是放在网站根目录下的一个文件,也是搜索引擎在网 ...
- Python3统计gitlab上的代码量
import threading import gitlab import xlwt #获取所有的user def getAllUsers(): usersli = [] client = gitla ...
- centos 7安装freescale交叉编译工具链
方法1:可以直接下载gcc包,把文件夹放到/usr/local下即可,然后修改PATH环境变量,既可以使用 方法2:可以下载.rpm包,在本地进行安装,下载地址为(http://www.panduod ...
- Sparse R-CNN: End-to-End Object Detection with Learnable Proposals 论文解读
前言 事实上,Sparse R-CNN 很多地方是借鉴了去年 Facebook 发布的 DETR,当时应该也算是惊艳众人.其有两点: 无需 nms 进行端到端的目标检测 将 NLP 中的 Transf ...