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 ...
随机推荐
- MyBatis进阶--接口代理方式实现Dao 和动态SQL
MyBatis接口代理方式实现Dao层 接口代理方式-实现规则 传统方式实现Dao层,我们既要写接口.还要写实现类.而MyBatis框架可以帮助我们省略写Dao层接口实现类的步骤.程序员只需要编写接口 ...
- MSSQL·CLI执行T-SQL
阅文时长 | 0.44分钟 字数统计 | 480.8字符 主要内容 | 1.引言&背景 2.详细步骤&排坑指南 3.中途执行异常处理方式 4.声明与参考资料 『MSSQL·CLI执行T ...
- $(cd "$(dirname "$0")",pwd) 解析
xx.sh 文件内容如下: #!/bin/bash BIN_FOLDER=$(cd "$(dirname "$0")";pwd) echo $BIN_FOLDE ...
- 002.Python数据类型
一 python语言注释 就是对代码的解释, 方便大家阅读代码用的 1.1 注释的分类 (1)单行注释 # print 在python2.x print "1" # print 在 ...
- 设置添加SSH-(转自破男孩)
很多朋友在用github管理项目的时候,都是直接使用https url克隆到本地,当然也有有些人使用 SSH url 克隆到本地.然而,为什么绝大多数人会使用https url克隆呢? 这是因为,使用 ...
- tar压缩文件 .tar.gz
打包并压缩文件 tar -zcf ansible.tar.gz ansible/* z gzip属性 c 建立压缩文件 f 指定文件名 v 显示过程 解压文件 tar xzf ...
- scrapy奇技淫巧1
Request传递值到callback回调函数 def parse(self, response): request = scrapy.Request('http://www.example.com/ ...
- 让ThreadPoolExecutor的workQueue占满时自动阻塞submit()方法
public class BlockingSubmitExecutor { private ExecutorService executor = new ThreadPoolExecutor(2, 2 ...
- 人脸真伪验证与识别:ICCV2019论文解析
人脸真伪验证与识别:ICCV2019论文解析 Face Forensics++: Learning to Detect Manipulated Facial Images 论文链接: http://o ...
- ISP算法高水平分析(下)
ISP算法高水平分析(下) 十.LSC(Lens Shade Correction)------镜头阴影矫正 Lens Shading指画面四角由于入射光线不足形成的暗角,同时,由于不同频率的光折射 ...