• Docker与Kubernetes介绍


    ##介绍

    本文从 Docker 公司的发展阶段进行简单总结。

    初期

    2013 年的后端技术领域,已 CLoud Foundry 为代表的 Paas 项目正在大力发展。

    当时名字还叫 dotCloud 的Docker公司,开源了自己的容器项目 Docker。

    当时的Pass只是做到的底层机器资源的分配能力,但是上层的实际可运行的各种类型的应用部署发布的功能(打包和分发)并不是他们的主要发展点。

    虽然当时 Cloud Foundry 定义了一种打包方式,并通过 CgroupsNamespace 技术为单个应用创建一个叫作 “沙盒”的隔离环境,也就是所谓的 “容器”。

    实际上 Docker 跟 Cloud Foundry 的容器并没有太大的不同。Docker 一个重要的创新 “镜像” 让他日后脱颖而出。

    因为当时 使用 Cloud Foundry 发布应用,”发布包“只带上了应用和启动脚本,并没有”操作系统“导致,部署起来跟本地的环境无法完全一致,这导致了部署的大量成本。

    但是 ”Docker 镜像“ 确是直接由一个完整操作系统的所有文件和目录构成的,所以这个压缩包里的内容跟你本地开发和测试环境用的操作系统是完全一样的。

    这,正是 Docker 镜像的精髓。

    所以,Docker 项目给 PaaS 世界带来的“降维打击”,其实是提供了一种非常便利的打包机制。这种机制直接打包了应用运行所需要的整个操作系统,从而保证了本地环境和云端环境的高度一致,避免了用户通过“试错”来匹配两种不同运行环境之间差异的痛苦过程。

    不过,Docker 项目固然解决了应用打包的难题,但正如前面所介绍的那样,它并不能代替 PaaS 完成大规模部署应用的职责。

    成长期

    实际上,Docker 项目一日千里的发展势头。他们心里明白,虽然 Docker 项目备受追捧,但用户们最终要部署的,还是他们的网站、服务、数据库,甚至是云计算业务。

    这就意味着,只有那些能够为用户提供平台层能力的工具,才会真正成为开发者们关心和愿意付费的产品。而 Docker 项目这样一个只能用来创建和启停容器的小工具,最终只能充当这些平台项目的“幕后英雄”。

    所以 2014发布了Swarm

    Swarm 项目则是以一个完整的整体来对外提供集群管理功能。而 Swarm 的最大亮点,则是它完全使用 Docker 项目原本的容器管理 API 来完成集群管理。

    之后很快又收购了Fig,收购后改名为 Compose。
    Fig 项目之所以受欢迎,在于它在开发者面前第一次提出了“容器编排”(Container Orchestration)的概念。

    Fig 就会把这些容器的定义和配置交给 Docker API 按照访问逻辑依次创建,你的一系列容器就都启动了;而容器 A 与 B 之间的关联关系,也会交给 Docker 的 Link 功能通过写入 hosts 文件的方式进行配置。更重要的是,你还可以在 Fig 的配置文件里定义各种容器的副本个数等编排参数,再加上 Swarm 的集群管理能力,一个活脱脱的 PaaS 呼之欲出。

    此时Docker收购的公司。比如,专门负责处理容器网络的 SocketPlane 项目(后来被 Docker 公司收购),专门负责处理容器存储的 Flocker 项目(后来被 EMC 公司收购),专门给 Docker 集群做图形化管理界面和对外提供云服务的 Tutum 项目(后来被 Docker 公司收购)等等。

    这里在提一个公司:Mesos 和它背后的创业公司 Mesosphere。
    早在几年前,Mesos 就已经通过了万台节点的验证,2014 年之后又被广泛使用在 eBay 等大型互联网公司的生产环境中。

    在这种思路的指导下,Mesosphere 公司发布了一个名为 Marathon 的项目,而这个项目很快就成为了 Docker Swarm 的一个有力竞争对手。

    而这次通过 Marathon 实现了诸如应用托管和负载均衡的 PaaS 功能之后,Mesos+Marathon 的组合实际上进化成了一个高度成熟的 PaaS 项目,同时还能很好地支持大数据业务。

    2014 年注定是一个神奇的年份。就在这一年的 6 月,基础设施领域的翘楚 Google 公司突然发力,正式宣告了一个名叫 Kubernetes 项目的诞生。而这个项目,不仅挽救了当时的 CoreOS 和 RedHat,还如同当年 Docker 项目的横空出世一样,再一次改变了整个容器市场的格局。

    尘埃落定

    在 2014~2015 年间,整个容器社区可谓热闹非凡。

    Docker 项目此时已经成为 Docker 公司一个商业产品。而开源,只是 Docker 公司吸引开发者群体的一个重要手段。不过这么多年来,开源社区的商业化其实都是类似的思路。

    这里Docker发布了一个容器运行时库 Libcontainer。这次匆忙的、由一家主导的、并带有战略性考量的重构,成了 Libcontainer 被社区长期诟病代码可读性差、可维护性不强的一个重要原因

    这种情绪在 2015 年达到了一个小高潮,容器领域的其他几位玩家开始商议“切割”Docker 项目的话语权。而“切割”的手段也非常经典,那就是成立一个中立的基金会。

    2015 年 6 月 22 日,由 Docker 公司牵头,CoreOS、Google、RedHat 等公司共同宣布,Docker 公司将 Libcontainer 捐出,并改名为 RunC 项目,交由一个完全中立的基金会管理,然后以 RunC 为依据,大家共同制定一套容器和镜像的标准和规范。

    这套标准和规范,就是 OCI( Open Container Initiative )。OCI 的提出,意在将容器运行时和镜像的实现从 Docker 项目中完全剥离出来。这样做,一方面可以改善 Docker 公司在容器技术上一家独大的现状,另一方面也为其他玩家不依赖于 Docker 项目构建各自的平台层能力提供了可能

    但Docker 并不会担心 OCI 的威胁,也导致了 OCI 组织效率持续低下的根本原因。原因就在于它的 Docker 项目是容器生态的事实标准,而它所维护的 Docker 社区也足够庞大。可是,一旦这场斗争被转移到容器之上的平台层,或者说 PaaS 层,Docker 公司的竞争优势便立刻捉襟见肘了。

    所以之后 Google、RedHat 等开源基础设施领域玩家们,共同牵头发起了一个名为 CNCF(Cloud Native Computing Foundation)的基金会。这个基金会的目的其实很容易理解:它希望,以 Kubernetes 项目为基础,建立一个由开源基础设施领域厂商主导的、按照独立基金会方式运营的平台级社区,来对抗以 Docker 公司为核心的容器商业生态。

    CNCF主要做了两件事情:
    1,Kubernetes 项目必须能够在容器编排领域取得足够大的竞争优势;
    2,CNCF 社区必须以 Kubernetes 项目为核心,覆盖足够多的场景。

    壮大社区

    Google 公司在容器化基础设施领域多年来实践经验的沉淀与升华。这,正是 Kubernetes 项目能够从一开始就避免同 Swarm 和 Mesos 社区同质化的重要手段。

    CNCF 接下来的任务就是,如何把这些先进的思想通过技术手段在开源社区落地,并培育出一个认同这些理念的生态?所以,RedHat 与 Google 联盟的成立。

    吸引生态

    在之后 CNCF 社区迅速在成员项目中添加了Prometheus, Fluentd、OpenTracing、CNI 等一系列容器生态的知名工具和项目。

    而在看到了 CNCF 社区对用户表现出来的巨大吸引力之后,大量的公司和创业团队也开始专门针对 CNCF 社区而非 Docker 公司制定推广策略。

    面对这样的竞争态势,Docker 公司决定更进一步。在 2016 年,Docker 公司宣布了一个震惊所有人的计划:放弃现有的 Swarm 项目,将容器编排和集群管理功能全部内置到 Docker 项目当中。

    而 Kubernetes 的应对策略则是反其道而行之,开始在整个社区推进“民主化”架构,即:从 API 到容器运行时的每一层,Kubernetes 项目都为开发者暴露出了可以扩展的插件机制,鼓励用户通过代码的方式介入 Kubernetes 项目的每一个阶段。Kubernetes 项目的这个变革的效果立竿见影,很快在整个容器社区中催生出了大量的、基于 Kubernetes API 和扩展接口的二次创新工作。

    1,目前热度极高的微服务治理项目 Istio;
    2,被广泛采用的有状态应用部署框架 Operator;

    面对 Kubernetes 社区的崛起和壮大,Docker 公司也不得不面对自己豪赌失败的现实。只能选择逐步放弃开源社区而专注于自己的商业化转型。

    所以,从 2017 年开始,Docker 公司先是将 Docker 项目的容器运行时部分 Containerd 捐赠给 CNCF 社区,标志着 Docker 项目已经全面升级成为一个 PaaS 平台;紧接着,Docker 公司宣布将 Docker 项目改名为 Moby,然后交给社区自行维护,而 Docker 公司的商业产品将占有 Docker 这个注册商标。

    2017 年 10 月,Docker 公司出人意料地宣布,将在自己的主打产品 Docker 企业版中内置 Kubernetes 项目,这标志着持续了近两年之久的“编排之争”至此落下帷幕。

    2018 年 3 月 28 日,这一切纷争的始作俑者,Docker 公司的 CTO Solomon Hykes 宣布辞职,曾经纷纷扰扰的容器技术圈子,到此尘埃落定。

  • 相关阅读:
    Java学习笔记(二十九)
    python-opencv学习笔记1 opencv中的GUI特征
    SpringMVC之CRUD和文件上传下载
    PL/SQL Some Advanced Fundamental
    实用调试小技巧
    Web前端开发者的福音,这款APP让你更上一层楼
    解决方案|智能制造升级,汽车行业借力法大大电子签进入“快车道”
    猿创征文|HCIE-Security Day52:DDoS和防火墙(附场景和配置)
    transformer论文及其变种
    Redis分布式锁
  • 原文地址:https://blog.csdn.net/df007df/article/details/125571519