作者:化境.丁

  • 原因如下:
  1. docker比k8s发布的早;
  2. Docker 本身不兼容 CRI 接口,官方并没有实现 CRI 的打算,同时也不支持容器的一些新需求,社区想要摆脱Dockershim的高维护成本,。
  3. k8s不能直接与docker通信,只能与 CRI 运行时通信,要与 Docker 通信,就必须使用桥接服务(dockershim),k8s要与docker通信是通过节点代理Kubelet的Dockershim(k8s社区维护的)将请求转发给管理容器的 Docker 服务。
  4. Dockershim 一直都是 Kubernetes 为了兼容 Docker 获得市场采取的临时方案(决定)。
  5. k8s在过去因为 Docker 的热门而选择它,现在又因为高昂的维护成本而放弃它,我们能够从这个过程中体会到容器领域的发展和进步。
  6. 对于已经统治市场的k8s来说,Docker 的支持显得非常鸡肋,移除代码也就顺理成章。
  7. 在集群中运行的容器运行时往往不需要docker这么复杂的功能,k8s需要的只是 CRI 中定义的那些接口。

不用担心,Mirantis公司未来会和Docker共同维护Dockershim,并作为一个开源组件提供;对于正式生产环境还是建议采用兼容CRI的containerd之类的底层运行时。

  • 下面详细聊聊知识点

K8s决定在 1.20 开始放弃 Docker,并在1.21完全抛弃 Docker 的支持。

2020 年 12 月,Kubernetes 社区决定着手移除仓库中 Dockershim 相关代码,对于k8s和 Docker 两个社区来说都意义重大。

如上图所示,Kubernetes节点代理 Kubelet为了访问Docker提供的服务需要先经过社区维护的 Dockershim,Dockershim 会将请求转发给管理容器的 Docker 服务。

可扩展性

  • Kubernetes 通过引入新的容器运行时接口将容器管理与具体的运行时解耦,不再依赖于某个具体的运行时实现。

Kubernetes 通过下面的一系列接口为不同模块提供扩展性:

Kubernetes 在较早期的版本中就引入了 CRD、CNI、CRI 和 CSI 等接口,只有用于扩展调度器的调度框架是 Kubernetes 中比较新的特性。

Kubernetes 早在 1.3 就在代码仓库中同时支持了 rkt 和 Docker 两种运行时。

但这些代码为 Kubelet 组件的维护带来了很大的困难,不仅需要维护不同的运行时,接入新的运行时也很困难。

容器运行时接口(Container Runtime Interface、CRI)是 Kubernetes 在 1.5 中引入的新接口,Kubelet 可以通过这个新接口使用各种各样的容器运行时。

其实 CRI 的发布就意味着 Kubernetes 一定会将 Dockershim 的代码从仓库中移除。

CRI 是一系列用于管理容器运行时和镜像的 gRPC 接口,我们能在它的定义中找到 RuntimeService 和 ImageService 两个服务。

不兼容接口

与容器运行时相比,Docker 更像是一个复杂的开发者工具,它提供了从构建到运行的全套功能。

开发者可以很快地上手 Docker 并在本地运行并管理一些 Docker 容器,然而在集群中运行的容器运行时往往不需要这么复杂的功能,Kubernetes 需要的只是 CRI 中定义的那些接口。

虽然 Docker 中包含 CRI 需要的所有功能,但是都需要实现一层包装以兼容 CRI。

社区提出的很多新功能都没有办法在 Dockershim 中实现,例如 cgroups v2 以及用户命名空间。

Kubernetes 作为比较松散的开源社区,每个成员尤其是各个 SIG 的成员都只会在开源社区上花费有限的时间。

而维护 Kubelet 的 sig-node 又尤其繁忙,很多新的功能都因为维护者没有足够的精力而被搁置。

既然 Docker 社区看起来没有打算支持 Kubernetes 的 CRI 接口,维护 Dockershim 又需要花费很多精力,就能理解为什么 Kubernetes 会移除 Dockershim 了。

Kubelet 之前使用一个名为 dockershim 的模块,用以实现对 Docker 的 CRI 支持。但 Kubernetes 社区发现了与之相关的维护问题,建议大家考虑使用包含 CRI 完整实现(兼容 v1alpha1 或 v1)的可用容器运行时。

Docker 并不支持 CRI(容器运行时接口)这一 Kubernetes 运行时 API,而 Kubernetes 用户一直以来所使用的其实是名为“dockershim”的桥接服务。Dockershim 能够转换 Docker API 与 CRI。

Docker 本身也是一款非常强大的工具,可用于创建开发环境。为了解造成当前状况的原因,需要全面分析 Docker 在现有 Kubernetes 架构中的作用。

Docker公司把containerd和runc拆出来变成了开源项目,docker的底层是containerd+runc .

K8s为什么要弃用docker相关推荐

  1. K8s 为什么要弃用 Docker?

    在写"K8s"系列文章的过程中,很多读者留言询问 K8s 弃用 Docker 的事,担心现在学习 Docker 是否还值得,是不是该切换到 containerd 或其他运行时. 这 ...

  2. K8S Runtime CRI OCI contained dockershim 理解 1.23弃用docker - 含docker containerd通用工具 nerdctl

    一 实践 contained实用管理工具 http://www.ciscoedu.com.cn/details/id/252.html containerd的默认命令行工具(crictl)也不是很好用 ...

  3. Kubernetes 弃用 Docker !

    多年间,Docker.Kubernetes 被视为云计算时代下开发者的左膀右臂. Docker 作为一种开源的应用容器引擎,开发者可以打包他们的应用及依赖到一个可移植的容器中,发布到流行的 Linux ...

  4. Kubernetes弃用Docker?关于Kubernetes、Docker和containerd的那些事

    00 前情提要 作为后端研发工程师,之前的工作中还是涉及到一部分K8S的工作.在当时的工作场景下,我们通过使用Kubernetes(简称k8s)+docker编排部署的架构方案来提供云原生的在线服务. ...

  5. 重磅,Kubernetes 决定弃用 Docker!

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:硬刚一周,3W字总结,一年的经验告诉你如何准备校招! 个人原创100W+访问量博客:点击前往,查看更多 作者 | ...

  6. 不讲武德,Kubernetes 弃用 Docker刷爆了网络,我们公司也慌了!

    点击上方"芋道源码",选择"设为星标" 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 8:55 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | J ...

  7. Kubernetes弃用Docker后怎么办?

    本文转自Rancher Labs 近期,Kubernetes在其最新的Changelog中宣布,自Kubernetes 1.20之后将弃用Docker作为容器运行时.这一消息在云原生领域激起了不小的水 ...

  8. k8s是什么,和docker有啥关系?

    文章目录 1,k8s的作用 2,为什么用k8s? 3,k8s的特性 4,kubernetes集群架构和对应组件 5,k8s核心概念 我们都知道docker靠docker-compose单机编排容器,就 ...

  9. k8s 自定义dns_K8S 生态周报| Docker v19.03.10 正式发布

    「K8S 生态周报」内容主要包含我所接触到的 K8S 生态相关的每周值得推荐的一些信息.欢迎订阅知乎专栏「k8s生态」. Node Exporter v1.0.0 正式发布 Prometheus 是最 ...

最新文章

  1. klee错误汇报二:KLEE的optimize选项的一个困惑
  2. 北哥大话Yii2缓存机制 - File缓存
  3. OpenCV坎尼探测器Canny Detector的实例(附完整代码)
  4. 面向对象分析与设计小结
  5. Duilib教程-HelloDuilib及DuiDesigner的简单使用
  6. 作者:郭鹏(1984-),男,博士,贵阳学院经济管理学院讲师。
  7. 您的618快递正在燃烧?12吨快递货车高速上起火,网友:代入感极强!
  8. matlab求最大公倍数_小学数学最大公因数最小公倍数练习
  9. mysql索引超出范围 index_输入查询条件会报参数索引超出范围的错误
  10. android开启前台服务_Android 知识点必知之ANR与OOM
  11. GJB六性设计---环境适应性实验
  12. 概率统计Python计算:双正态总体均值差的双侧区间估计
  13. linux img文件压缩及解压
  14. Introduce myself
  15. 如何调用外部webservice 接口来发送短信
  16. Python爬虫:头条小姐姐们都来给你拜年啦!
  17. 星光大道视频播放器精品版
  18. 自学python推荐廖雪峰网站
  19. 爬虫----js逆向某宝h5的sign参数
  20. 【从零开始玩量化12】无风险利率

热门文章

  1. 3年300台,新华三高端路由器交卷了
  2. 在dg中建立oracle,Oracle Dg配置过程
  3. 教你申请Hurricane Electric公司免费dns服务
  4. 申请有效期一年的网站免费证书
  5. vmware虚拟机下载地址和虚拟机各种系统win7和win10系统
  6. tomcat 将http协议改为https协议,Websocket请求ws协议修改为wss协议
  7. java date now_Date now=new Date()方法获取时间为什么不对,求大神指教!!!
  8. 对称加密、非对称加密、公钥、私钥究竟是个啥?
  9. 微信小程序案例(最适合新手练手的项目)
  10. 下载软件速度很慢,如何解决