首页 > 其他分享 >K8s 为什么会抛弃 docker

K8s 为什么会抛弃 docker

时间:2023-01-07 16:44:24浏览次数:56  
标签:容器 CRI containerd 抛弃 kubelet docker K8s Docker

为什么 K8s 会抛弃 docker

前言

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

CRI

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

k8s

为什么要引入 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。

k8s

参考

【深入剖析 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/

标签:容器,CRI,containerd,抛弃,kubelet,docker,K8s,Docker
From: https://www.cnblogs.com/ricklz/p/17032914.html

相关文章

  • docker-Volume
    volume:提供独立于容器之外的持久化存储一、持久化地址dockerrun-d--namenginx-v2-v/usr/share/nginx/htmlnginxinspect检查返回容器的所有信息(Mounts.Source......
  • Docker 系列(3) —— 切换 Docker 镜像源Docker 系列(3) —— 切换 Docker 镜像源
    Docker添加国内镜像源windows版Step1打开Dockerforwindows{"registry-mirrors":["https://7bezldxe.mirror.aliyuncs.com/","https://dock......
  • DockerFile
    一个简单的示例FROMalpine:latestMAINTAINERsongyanCMDecho'hellodocker'创建镜像dockerbuild-thello_docker-ftest.dockerFile.运行这个镜像docke......
  • Docker镜像的基本操作总结
    摘要容器化是上个十年比较火的技术.现在看起来在进行总计有点晚了.不过linux是三十年前的,我依旧没有总结好道理是一样的.技术不在于新旧,重要的是学习到原理.Doc......
  • docker开启远程访问
    说明如果你的服务器是公网IP,并且开放了docker的远程访问,如果没有进行保护是非常危险的,任何人都可以向你的docker中推送镜像、运行实例。我曾开放过阿里云服务器中docker的......
  • Docker(一):Linux安装Docker
    参考地址:https://blog.csdn.net/weixin_43526371/article/details/125811270下载DockerEnginehttps://docs.docker.com/engine/install/centos/查看系统版本$cat/etc......
  • Docker(二):镜像、容器 - 基础命令
    参考地址:https://blog.csdn.net/weixin_43526371/article/details/125811320镜像命令#基础信息$dockerinfo#镜像列表$dockerimages#image全部列表$dockerimage......
  • Docker(四):privileged、数据卷、继承volumes-from
    参考地址:https://blog.csdn.net/weixin_43526371/article/details/126326614privileged-(一般不推荐)是否给容器最高权限,这意味着容器内应用将不受权限的控制,一般不推荐......
  • Docker(五):Dockerfile基础指令
    参考地址:https://blog.csdn.net/weixin_43526371/article/details/126332507  构建三部曲编写Dockerfile使用dockerbuild命令从Dockerfile构建图像dockerrun......
  • Docker(三):镜像仓库 - 公共仓库、私有仓库 - commit、tag、push
    参考地址:https://blog.csdn.net/weixin_43526371/article/details/125828194镜像分层和UnionFSdocker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统就是Unio......