首页 > 其他分享 >k8s“弃用docker”是怎么回事儿?(chrono《kubernetes入门实战课》笔记整理)

k8s“弃用docker”是怎么回事儿?(chrono《kubernetes入门实战课》笔记整理)

时间:2022-11-15 19:46:01浏览次数:73  
标签:容器 弃用 kubernetes chrono containerd CRI 镜像 docker k8s

 

 

来自俺自己的一句话:这是一个扩展了解,个人觉得对于理解docker,k8s关系,还有各厂之间的竞争、技术演化的理解是有帮助的。所以还是做了一篇笔记。

 

2014年,docker在容器领域内没有任何对手,这时候k8s刚刚诞生,虽然有google和borg的支持,但还是比较弱小的。所以k8s很自然地选择了在docker上运行,慢慢养精蓄锐壮大自己。

2016年,k8s发布了1.0版本,可以正式用于生产环境,标志着k8s已经成长起来了。此时,CNCF已经成立了一年(CNCF:全称Cloud Native Computing Foundation(云原生计算基金会),成立于2015年12月11日,是一个开源软件基金会,它致力于云原生(Cloud Native)技术的普及和可持续发展),于是K8s加入CNCF,成为了第一个CNCF托管项目,想要联合其他厂商,一起“扳倒”docker。具体k8s是这样做的:

1、准备解耦条件:2016年底发布的1.5版本中,k8s引入了新的接口标准CRI(container runtime interface),CRI规定k8s该如何调用容器运行时去管理容器和镜像,但这是一套全新接口,与docker调用完全不兼容。由于docker已经非常成熟,有着数目众多且稳定的用户群体,各大云厂商不可能立刻就把docker全部换掉。因此k8s在k8s和docker中间加入一个中间人做适配(shim),用来把docker的接口转为CRI接口,如下图所示。这样k8s和docker还可以继续兼容一段时间:

 

2、逼迫docker与自己解耦:眼看着k8s有和自己分道扬镳的架势,docker决定把原本单体架构的docker engine(docker的使用有两种形式,docker desktop(桌面化,可装在win系统上,一般要收费)和docker engine(实验环境,咱们都用的这个,直接跑在linux上)),拆分成多个模块,其中docker daemon(就是docker engine中真正处理事务的部分,docker engine分为docker命令客户端、docker engine、registry)捐献给了CNCF,形成了containerd。containerd作为CNCF托管项目,自然需要符合CRI标准。但docker只是在docker engine里调用了containerd,外部接口仍然保持不变,所以docker与CRI依然不兼容。

于是,k8s就出现了两种调用链。本质都是通过containerd来管理容器的,只不过方法二明显效能更好,这对于云厂商也是有很大的诱惑力的:

  • 用CRI接口调用dockershim,然后dockershim调用docker,docker再走containerd去操作容器
  • 用CRI直接调用containerd操作容器

 

3、正式弃用docker:有了CRI和containerd,加上效能的对比,k8s基本已经稳操胜券了。但由于docker拥有庞大的用户群体,大家普遍会担心适配性以及镜像迁移的问题,所以接受度还是比较差。实际上,k8s只是弃用了dockershim,也就是无法直接支持让docker去调用containerd了,而是直接操作containerd,所以对于容器的运行,本质上没有任何变化。即只是弃用了上面第一种调用链。唯一的影响,就是不能通过docker ps这些docker的客户端命令来操作容器了,但如果你一直都用kubectl来操作,其实对使用者来说,毫无变化。至此,所有的准备工作和对用户的心理安慰都做完了,k8s在1.24版本,直接把dockershim代码删除了,和docker彻底分道扬镳了。

 

其他的一些担心:

1、docker hub的镜像,还能用么?由于docker镜像也是遵守OCI规范(open container initiative)的,所以docker镜像依然可以在k8s使用,即可以直接拉取docker hub的镜像来使用;

2、docker是不是彻底没用了?docker是一个完整的软件产品线,不止有containerd,还有镜像构建、分发、测试等服务,甚至docker desktop还内置了k8s。用dockerfile去制作镜像也依然是制作镜像的一个很好的方式;

3、docker是不是再也不能用在k8s了?k8s删除了dockershim的代码,但是docker公司却把这段代码接管过来了,建立了一个cri-dockerd项目,就是把docker engine适配成CRI接口,这样依然可以用k8s来操作docker了。

 

综上,k8s已经完成了对docker的解耦,甚至说是“弃用了对docker的支持”,但是docker由于拥有众多忠实用户,以及庞大的应用镜像,所以docker依然有很强的生命力。且docker方便易用,是很成熟的容器产品,对于我们学习和理解容器化技术,也是很有帮助的。今天这节主要就是一个扩展,后面还是会继续看k8s+docker的内容啦~

 

标签:容器,弃用,kubernetes,chrono,containerd,CRI,镜像,docker,k8s
From: https://www.cnblogs.com/1234roro/p/16892031.html

相关文章

  • kubernetes强制删除namespace
    1、执行命令删除namespace后一直显示Terminating,无法删除namespace[root@k8s-master1~]#kubectlgetnsNAMESTATUSAGEdefault......
  • 2-2、kubernetes安装
    kubernetes安装:master,etcd:node:前提:基于主机名通信;时间同步;关闭firewalld和iptables.serviceOS:centos7.3,extra步骤:etcdcluster,仅maste......
  • 1-1、kubernetes(k8s)-介绍
    kubernetes(k8s)-安装(二)什么是Kubernetesk8s组件介绍:http://docs.kubernetes.org.cn/703.htmlKubernetes是一个开源平台,用于跨主机群集自动部署,扩展和操作应用程序......
  • 1-6、kubernetes常用命令
    kubernetes常用命令1、查看类命令kubectlcluster-info----查看集群信息kubectl-shttp://localhost:8080getcomponentstatuses----查看各组件信息kubectl......
  • 2-1、kubernetes基础
    kubernetes基础master/node:master:APIserver,Scheduler,Controller-Manager,etcdnode:kubelet,docker,kube-proxyPOD,Label,LabelSelectorLabel:key=v......
  • 甩掉容量规划炸弹:用 AHPA 实现 Kubernetes 智能弹性伸缩
    作者:子白AHPA介绍背景Kubernetes中应用实例数设置有固定实例数、HPA和CronHPA三种策略。使用最多的是固定实例数,但是很多业务都存在波峰波谷,如果采用固定实例数的方式......
  • 甩掉容量规划炸弹:用 AHPA 实现 Kubernetes 智能弹性伸缩
    作者:子白AHPA介绍背景Kubernetes中应用实例数设置有固定实例数、HPA和CronHPA三种策略。使用最多的是固定实例数,但是很多业务都存在波峰波谷,如果采用固定实例数的......
  • k8s工作原理(chrono《kubernetes入门实战课》笔记整理)
     【架构理解】k8s可以编排容器,也可以对服务器进行监管。在k8s,不会区分dev(开发人员)和ops(运维人员),而是devops(提倡开发时就要考虑运维,运维也要尽早开始考虑如何对应用进行运......
  • kubernetes-002
    6、添加NFS存储卷[root@k8s-master01~]#vimmydb-nfs.yamlapiVersion:v1kind:Podmetadata:labels:app:mydbname:mydbspec:containers:-image:mysql:8.0......
  • 部署Kubernetes 1.25.4初始ipvs模式
    1、环境准备主机名IP地址系统版本k8s-master01k8s-master01.wang.org​kubeapi.wang.orgkubeapi192.168.100.201Ubuntu2004k8s-master02k8s-master02.wang.org192.168.1......