为什么 K8s 会抛弃 docker

前言

在这之前先来了解下,k8s 是如何和 docker 进行交互的。

CRI

kubelet 调用下层容器运行时的执行过程,并不会直接调用 Docker 的 API,而是通过 CRI(Container Runtime Interface,容器运行时接口)的 gRPC 接口来间接执行的。

为什么要引入 CRI?

把 kubelet 对容器的操作,统一地抽象成一个接口,这样 kubelet 只需要和这个接口打交道,而不用关心底层容器,底层容器它们就只需要自己提供一个该接口的实现,然后对 kubelet 暴露出 gRPC 服务即可,这样底层容器就能很容器的进行切换了,而不是仅限于 Docker 这种容器了。

同时,引入 CRI 接口,这样就不会受限于 docker 了,可以随时切换到其它的运行时。意味着容器运行时和镜像的实现与 Docker 项目完全剥离,让其他玩家不依赖 Docker 实现自己的运行时成为可能。

containerd

面对挑战,Docker 采取了“断臂求生”的策略,推动自身重构,将原有单一架构的 Docker Engine 拆分成多个模块,其中 Docker daemon 部分捐赠给 CNCF,containerd 形成。

作为 CNCF 的托管项目,containerd 必须符合 CRI 标准。

但是 docker 本身还是没有实现 CRI 标准。所以 k8s 中引入了一个叫作 dockershim 的组件。它会把 CRI 请求里的内容拿出来,然后组装成 Docker API 请求发给 Docker Daemon

kubelet --> dockershim (在 kubelet 进程中) --> dockerd --> containerd

containerd 作为 k8s 容器运行时

kubelet --> cri plugin(在 containerd 进程中) --> containerd

显然都是通过 containerd 来管理容器的,所以这两种的调用效果最终是一样的。第二种,去掉了 dockershim 调用链更短了,性能更好了,同时因为不用维护 dockershim 了,维护性难度也大大减少了。

所以 Docker 被抛弃的原因就很显而易见了。不过弃用 Docker 对 k8s 和 Docker 的影响不大,因为它们都已经将底层改为开源 containerd,原有的 Docker 镜像和容器仍然可以正常运行。唯一的变化是 K8s 绕过了 Docker,直接调用 Docker 内部的 containerd。

参考

【深入剖析 Kubernetes】https://time.geekbang.org/column/intro/100015201?code=UhApqgxa4VLIA591OKMTemuH1%2FWyLNNiHZ2CRYYdZzY%3D

【K8s 为什么要弃用 Docker?】https://mp.weixin.qq.com/s/qEKyEseD370xWI-2yIyUzg

【Docker与k8s的恩怨情仇】https://www.cnblogs.com/powertoolsteam/p/14980851.html

【k8s为什么会抛弃docker】https://boilingfrog.github.io/2023/01/07/k8s为什么会抛弃docker/

K8s 为什么会抛弃 docker的更多相关文章

  1. k8s取节点内docker中的日志

    Kubernetes(k8s)是Google开源的容器集群管理系统(谷歌内部:Borg).在Docker技术的基础上,为容器化的应用提供部署运行.资源调度.服务发现和动态伸缩等一系列完整功能,提高了大 ...

  2. [kubernetes] 使用 Minikube 快速搭建本地 k8s 环境 (基于 Docker 驱动模式)

    一.实验环境 操作系统:Centos 7 x86_64 Docker:1.12.6 二.部署 k8s 步骤 2.1  安装 kubectl cat <<EOF > /etc/yum. ...

  3. k8s集群之Docker安装镜像加速器配置与k8s容器网络

    安装Docker 参考:https://www.cnblogs.com/rdchenxi/p/10381631.html 加速器配置 参考:https://www.cnblogs.com/rdchen ...

  4. k8s 传参给docker env command、args和dockerfile中的entrypoint、cmd之间的关系

    [k8s]args指令案例-彻底理解docker entrypoint     需求: 搞个镜像,可以运行java -jar xxx.jar包,xxx.jar包名称要用参数传 思路1: 打对应运行ja ...

  5. (转)解决k8s集群提示docker login问题(同样适用于Rancher)

    文章转自 https://blog.liv1020.com/ 参考文档:https://kubernetes.io/docs/concepts/containers/images/#configuri ...

  6. 将dubbo框架里的服务提供者迁移进k8s里,以docker提供服务时要注意的细节

    在将dubbo框架里的服务提供者迁移进k8s时,有几个注意事项: 1, 要为默认情况下,dubbo会将k8s里的pod ip地址作为注册服务的地址,所以这个地址需要被改写(ip测试过,行得通,而dns ...

  7. k8s记录-ubuntu安装docker

    sudo apt-get purge docker-ce sudo rm -rf /var/lib/dockerdocker-ce:https://download.docker.com/linux/ ...

  8. k8s注册节点提示Docker SystemdCheck]: detected cgroupfs" as the Docker cgroup dr iver. The r ecommended dr fiver is" systemd"

    本篇就不长篇大论了,直接附上解决办法 提示如上,此提示非必要要求,只是建议,但是看着不爽,那就解决它 这是未解决之前的docker信息,现在输入下面的指令 sudo echo -e "{\n ...

  9. K8s 终将废弃 docker,TKE 早已支持 containerd

    近日 K8s 官方称最早将在 1.23版本弃用 docker 作为容器运行时,并在博客中强调可以使用如 containerd 等 CRI 运行时来代替 docker.本文会做详细解读,并介绍 dock ...

  10. 搭建docker私有仓库,建立k8s集群

    服务器IP角色分布 192.168.5.2 etcd server 192.168.5.2 kubernetes master 192.168.5.3 kubernetes node 192.168. ...

随机推荐

  1. Kafka之 API实战

    Kafka之 API实战 一.环境准备 1)启动zk和kafka集群,在kafka集群中打开一个消费者 [hadoop1 kafka]$ bin/kafka-console-consumer.sh \ ...

  2. JavaScript基础&实战(5)js中的数组、forEach遍历、Date对象、Math、String对象

    文章目录 1.工厂方法创建对象 1.1 代码块 1.2.测试结果 2.原型对象 2.1 代码 2.2 测试结果 3.toString 3.1 代码 3.2 测试结果 4.数组 4.1 代码 5.字面量 ...

  3. VMware16安装RedHat7.6步骤

    1.安装准备 安装好VMware 16 下载好RedHat7.6镜像,本文为 rhel-server-7.6-x86_64-dvd.iso 2.点击"创建新的虚拟机"进入" ...

  4. dubbo的一系列配置与搭建

    dubbo新的版本采用前后端分离技术,在github上下载的时候,不仅仅只是一个dubbo-admin 而是将admin包分离为dubbo-admin-ui前端包和dubbo-admin-server ...

  5. nginx 客户端返回499的错误码

    我们服务器客户端一直有返回错误码499的日志,以前觉得比例不高,就没有仔细查过,最近有领导问这个问题,为什么耗时只有0.0几秒,为啥还499了?最近几天就把这个问题跟踪定位了一下,这里做个记录 网络架 ...

  6. Azure DevOps Server 入门实践与安装部署

    一,引言 最近一段时间,公司希望在自己的服务器上安装本地版的 Azure DevOps Service(Azure DevOps Server),用于项目内的测试,学习.本着学习的目的,我也就开始学习 ...

  7. 加速乐逆向 cookies 参数

    简介 加速乐用于解决网站访问速度过慢及网站反黑客问题. 爬取使用该技术网站时需要携带特定的cookies参数(有的是__jsl_clearance_s,有的__jsl_clearance),本项目以一 ...

  8. java学习之爬虫

    0x00前言 对比与Python的爬虫机制和java的爬虫机制来详解一下java的爬虫,对于一般性的需求无论java还是python都可以胜任. 如需要模拟登陆.对抗防采集选择python更方便些,如 ...

  9. 【翻译】Thymeleaf – Spring Security集成模块

    原文链接:Thymeleaf - Spring Security integration modules 来源:thymeleaf/thymeleaf-extras-springsecurity自述文 ...

  10. 机器学习模型评价指标之ROC 曲线、 ROC 的 AUC 和 投资回报率

    前文回顾: 机器学习模型评价指标之混淆矩阵 机器学习模型评价指标之Accuracy.Precision.Recall.F-Score.P-R Curve.AUC.AP 和 mAP 1. 基本指标 1. ...