本文首发在OPPO互联网公众号,欢迎点击转载 https://mp.weixin.qq.com/s/wBC4CgAzXeTNURa1YdYmIQ。

伴随着kubernetes 1.20中对于docker的弃用,关于docker的灭亡与kubernetes的兴起的话题再度热了起来。讨论中关于docker灭亡的观点我不敢苟同。docker还远未到达灭亡的程度。相较而言,我觉得更恰当的说法应该是docker的衰落。本文我也就我个人的角度,聊聊我所经历的docker的衰落与kubernetes的兴起。

横空出世——docker的兴起

第一次接触docker,是2014年。当时OpenStack的主要负载还是kvm。而我们也尝试过了更为轻量的lxc,但是以失败而告终了。docker这个集装箱的小图标配上docker container的理念,一下子就吸引住了大家的目光。经历过制作lxc镜像的痛苦,你就会更体会到docker的可贵。繁琐的lxc镜像制作与精简的Dockerfile相比,孰高孰低、孰优孰劣可谓是一目了然。

docker成功的将cgroup、union filesystem、namespace这些较为稳定和成熟的技术结合了起来,辅以docker image的制作工艺,实现了集装箱式的标准交付。这时候的docker,颇有种“举天下之豪杰而莫能与之争”的气势。虽然在生产环节还是或多或少,还有这样那样的问题,但是docker已经跨过了POC(Proof of concept)阶段,进入了pre-product的行列了。在对docker深度定制后,最终我们团队也将OpenStack + docker的组合成功推向了生产。

那两年,知不知道docker、会不会做镜像、懂不懂docker原理成为基础架构领域面试的常见话题。虽然只有少数几个公司敢为天下先,将docker搬上了生产,但是已经没有人可以忽略这颗冉冉升起的新星了。那两年,活跃在各个会议、论坛上的都是docker的话题。大家热衷于讨论生产上docker遇到的坑。大家各出奇招,修修补补,跌跌撞撞,docker总算也是被搬上了生产。而在这时,即使是技术保守、持徘徊观望态度的公司,也都会安排一些人力着手跟进docker的发展与各个公司的实践经验了,这时候的docker真的是风头无两。

生来巨人——kubernetes

时间到了2015年,此时我转而负责进行CaaS(Container as a Service)服务的调研。这时候大家都在说CaaS,但是每个人说的都不一样,其实大家都是摸着石头过河。在此期间,以研究OpenStack的magnum为契机,我接触到了swarm和kubernetes。

swarm是docker公司力推的集群管理方案。docker、swarm和compose组成的三剑客完整覆盖了运行时、集群管理与编排,构成了一个看起来牢不可摧的生态系统。特别是别出心裁的将swarm的api与docker的api进行了拉齐,将集群的管理复杂度与单节点的管理复杂度向用户进行屏蔽,倒是有一种如臂使指的快感。这个设计直到现在我都还觉得立意真的很精巧。

而初出茅庐的kubernetes也来势汹汹。背靠Google的大旗,有Borg的背书,kubernetes在气势上一点不输swarm + compose的组合。伴随着kubernetes 1.0的发布,kubernetes也从幕后走向了台前,开始大规模接受来自全世界的PR提交,在功能、性能和稳定性上快速提升。

到kubernetes 1.2版本,经过我们内部评估,已经具备生产级的品质。而声明式API、简洁的架构、灵活的标签等优秀的设计,在做选型时已经让我们完全没有理由拒绝。而后经过数月紧张的开发,kubernetes + docker的组合被搬上了舞台,并且以极快的速度侵蚀OpenStack + docker的份额。此时的docker已经开始被限制为了容器的运行时和镜像制作工具。捆住了docker的手脚,kubernetes已经没有了可以掰手腕的对手,一统江湖的路上kubernetes再无障碍。

美人迟暮——docker的衰落

时至今日,docker的衰落已经成为了不争的事实。而docker的衰落我觉得是多方面的原因。一部分是docker自身的封闭和固执己见。我曾经记得在当时参与了当时社区多个PR的讨论。新增一个feature的超长的周期,已经可以磨掉多数人的耐心。docker社区在多个观点上略显保守的方式,让大家逐渐失去了参与的热情。

另一方面,也是更为重要的一点,是容器技术本身的门槛已经被突破,已经无法形成技术上的护城河。而对于容器技术之争,已经转化为标准之争。而对于标准上更有发言权的一方,无疑是具有更多用户、更庞大社区和更强大的平台的一方。在短短两三年的时间内,天平就快速地向kubernetes倾斜,其主导的CRI、CNI、CSI标准已经成为了事实上的通行标准。而相较之下,docker力推的CNM等标准则显得曲高和寡。

与此同时,kubernetes并没有放弃主动的进攻。kubernetes的强势和扶植其他容器运行时加速了docker的衰落。在1.6版本弃用docker manager直连docker,转向CRI + dockershim的组合时,就注定了kubernetes会走到完全解耦docker,也就是今天这一步。与此同时,其他容器运行时也开始了瓜分市场份额。如果说gVisor、Kata只是尝试挑战docker在部分场景中的地位,那么红帽的Podman则已经吹响了全面进攻的号角。再结合前两年docker的一些融资和收购传闻,平添了一种英雄末路、美人迟暮的伤感。

世间多少英雄戏,每到收场总伤神

六年回望,其实无论是在当时还是现在来看,docker都是一个革命性的产品。docker的衰落并不是意味着容器运行时不重要了,而是大家越来越习以为常了。时至今日,容器运行时作为一个大部已经被解决的问题,一个相对成熟的模块,已经成为了整个基础架构体系的一部分。而作为上层的平台和更为上层的用户来说,对此将会给予越来越少的关注。这就像现在大多数用户并不会去关心内核了一样。甚至在未来,我预测运行时都有可能会成为一个内核级别的附属模块,会预装到许多的发行版上,其运行也逐渐对大多数用户变得更加透明(实际红帽已经开始向这个方向做了)。而越来越多的用户则会将更多的注意力集中在上层的交付、管理、编排上。至于kubernetes会不会衰落,我觉得在中短期内(五年内)不会。kubernetes已经成为了一个平台级的项目。在这点上,kubernetes作为平台将比工具性质的docker具有更强的生命力。

漫话docker的衰落与kubernetes的兴起的更多相关文章

  1. 视频课程 | Kubernetes的兴起

    视频课程 | Kubernetes的兴起 原创: 京小云 京东云开发者社区  4月3日 京东云开发者社区在3月底于北京举行了以"Cloud Native时代的应用之路与开源创新"为 ...

  2. 搭建基于Docker社区版的Kubernetes本地集群

    Kubernetes的本地集群搭建是一件颇费苦心的活,网上有各种参考资源,由于版本和容器的不断发展,搭建的方式也是各不相同,这里基于Docker CE的18.09.0版本,在Mac OS.Win10下 ...

  3. kubernetes 实战6_命令_Share Process Namespace between Containers in a Pod&Translate a Docker Compose File to Kubernetes Resources

    Share Process Namespace between Containers in a Pod how to configure process namespace sharing for a ...

  4. Docker CMD ENTRYPOING 和Kubernetes command args对比

    Docker CMD ENTRYPOING 和Kubernetes command args对比 exec 模式 使用 exec 模式时,容器中的任务进程就是容器内的 1 号进程 shell 模式 使 ...

  5. 30分钟学会Docker里面开启k8s(Kubernetes)登录仪表盘(图文讲解)

    前言 我们之前搭建了第一个docker项目: windows环境30分钟从0开始快速搭建第一个docker项目(带数据库交互):https://www.cnblogs.com/xiongze520/p ...

  6. openstack,docker,mesos,Kubernetes(k8s)

    作者:张乾链接:https://www.zhihu.com/question/62985699/answer/204233732来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...

  7. 基于docker和cri-dockerd部署kubernetes v1.25.3

    基于docker和cri-dockerd部署kubernetes v1.25.3 1.环境准备 1-1.主机清单 主机名 IP地址 系统版本 k8s-master01 k8s-master01.wan ...

  8. Docker系列(九):Kubernetes架构深度解析

    Kubernetes重要概念 Docker解决了打包和隔离的问题,但我们需要更多:调度的问题,生命周期及健康状况,服务发现,监控,认证,容器聚合. Kubernetes概述 开源DOcker容器编排系 ...

  9. Docker系列(八):Kubernetes横空出世背后的秘密

    Docker与CoreOS的恩怨情仇 2013年2月,Docker建立了一个网站发布它的首个演示版本, 3月,美国加州Alex Polvi正在自己的车库开始 他的 第二次创业 有了第一桶金的Alex这 ...

随机推荐

  1. Innodb之(临时)表空间、段、区、块

    引用连接:https://www.cnblogs.com/duanxz/p/3724120.html 对于innodb存储引擎而言,其数据文件最小的存储单位为页.默认为16KB大小.在页的基础上又分为 ...

  2. linux中suid/sgid/sticky及扩展属性(attr)

    suid只适用于命令文件.(如/usr/bin/passwd) 当命令文件上有suid权限时,则操作用户的权限变成属主权限.命令文件上无suid权限则操作用户的权限不变. 查看suid权限: [roo ...

  3. 西数WD2T硬盘分区对齐的方法

    新购一个西数2T硬盘,也就是绿盘的那种,淘宝500左右,支持高级格式化. 到手以后,分区格式化,前几天格式化完成以后,fdisk -l 发现如下文字 引用 Partition 1 does not s ...

  4. Check Host:实时监控网站或者服务器是否可以访问

    如果你拥有一个网站,那么最重要的事情就是要保证它24小时都能够访问.不过国内的虚拟主机服务非常糟糕,经常会出现各种状况,所以我们需要一个软件,可以让我们第一时间知道网站出现了无法访问的情况,从而通知售 ...

  5. rgw配置删除快速回收对象

    前言 做rgw测试的时候,经常会有删除文件的操作,而用默认的参数的时候,rgw是通过gc回收机制来处理删除对象的,这个对于生产环境是有好处的,把删除对业务系统的压力分摊到不同的时间点,但是测试的时候, ...

  6. windows 无法启动 SQL Server (MSSQLSERVER) 服务(位于本地计算机上)。错误 1069由于登入失败而无法启动 。

    windows 无法启动 SQL Server (MSSQLSERVER) 服务(位于本地计算机上).错误 1069由于登入失败而无法启动. 今天登录测试服务器突然出现无法登录的情况,经排查发现,SQ ...

  7. threading中的其他部分方法

    import threading def wahaha(n): print(n, threading.current_thread()) # 1 <Thread(Thread-1, starte ...

  8. 用JavaScript做精灵图

    用JavaScript做精灵图 精灵图可以不用在给每一个小块一 一的修改位置.主要原理是找到整张的背景图与li的下标的数学关系. 这是一大张背景图,这个背景图的位置其实是有规律的,每两张之间间隔一个固 ...

  9. 微信公众号平台Url Token EncodingAESKey 注意点

    最近公司让我开发微信公众号平台扫码登录,同步用户信息于PC端,所做的过程当中遇到了一些坑,做完了就总结一下需要注意的点,如若大家开发过程中遇到同样的问题,可以借鉴! 第一:配置域名 作用:配置域名为了 ...

  10. exec() has been disabled for security reasons

    1.修改php.ini里面:disable_functions 2.重启服务器 2.如果是虚拟机,就重启虚拟机