kubernetes还是docker
随着kubernetes作为一种容器编排方案的日渐流行,关于“kubernetes还是docker”的比较之声也逐渐不绝于耳。
然而,“kubernetes还是docker”其实是种错误的提法。当你仔细去分析这些词语的时候,会发现这其实并不是人们想要表达的意思,因为Docker和Kubernetes并不是直接的竞争者。
本文旨在澄清一些关于Kubernetes和Docker的常见误区,并解释清楚人们在说“kubernetes还是docker”的时候到底想要表达什么。
容器化的崛起与Docker
容器及容器平台相较于传统的虚拟化技术有很多优势。隔离在内核级别已经完成了,无需客体操作系统的介入,因此容器会更高效、快速以及轻量。允许应用程序封装在自包含的环境中会带来许多优点,比如说快速部署,伸缩性,以及更等价的开发环境。
Docker是目前最流行的容器平台。尽管环境隔离的想法由来以久,并且过去也出现过许多其它的容器软件,但Docker出现在市场的时机恰逢其时,并且是从一开始就开源的,这些对它如今的市场支配地位帮助很大。
Docker的亮点是Docker引擎,它是用来构建和运行容器的运行时环境,同时还包含Docker Hub,这是用来存储和分享镜像的服务。
编排式系统的诉求
当Docker提供了打包及分发容器应用的开放标准后,新的问题也随之而来了。所有的这些容器该如何协作及调度?应用程序中的不同容器该如何互相通信?容器实例如何进行伸缩?
编排容器的方案也随之浮现了。 Kubernetes,Mesos和Docker Swarm都是比较流行的选择,它们可以提供一层抽象,能让一个集群的机器表现得和单机一样,这在大规模机器的环境中是至关重要的。
大家所提的“kubernetes还是docker”其实指的是“Kubernetes还是Docker Swarm”。后者是Docker为了自家的容器提供的原生的解决方案,优点在于它和Docker的生态系统紧密集成到一起了,用的也是自已的API。Docker Swarm和其它调度器一样,也提供了一种管理跨服务器集群的大批量容器的方法。其过滤和调度系统可以选择集群中的最佳节点来部署容器。
Kubernetes则是Google研发并捐赠给CNCF的容器编排器,目前已经开源。它的优势在于借鉴了Google多年来在容器管理方面的丰富专业知识。它是一个全能的系统,可以自动部署,调度并扩展容器化应用,并支持包括Docker在内的多种容器化工具。
目前来看,Kubernetes是市场的领军者,定义了容器编排及分布式应用部署的标准方法。Kubernetes同时支持在公有云上或者本地部署,高度模块化且开源,并有着一个非常活跃的社区。各种规模的公司都在它上面有投入,许多云厂商还把它作为服务提供出来。Sumo Logic公司是为各种编排技术提供支持的,也包含Kubernetes应用在内。
Kubernetes和Docker有什么关系?
在智能化管理容器化应用及提供丰富能力方面来看,Kubernetes和Docker都是事实上的整体解决方案,正是因为这点造成了一些混淆。“Kubernetes”如今也被用作基于Kubernetes之上部署的一整个容器环境的简称。事实上这两者是没法直接比较的,它们有着不同的定位,解决的是不同的问题。
Docker是编译,分发及运行Docker容器的平台及工具。它提供了自己原生的集群管理工具,可以在集群机器上编排及调度容器。而Kubernetes则是Docker容器的编排系统,和Docker Swarm相比,它的功能要更强大,可以在生产环境高效地协调大规模的集群节点。它是基于Pods的之上来运行的,这是Kubernetes生态系统中的调度单元(一个Pod可以包含一个或多个容器),不同的Pods分布在众多节点上以提供高可用性。你可以在Kubernetes集群上很容易地运行一个Docker实例,但Kubernetes本身并不是一套完整的解决方案,它需要定制化的插件来帮助完成。
从本质上来讲,Kubernetes和Docker是不同的技术,但它们可以很好地协同工作,并有助于分布式架构下容器的管理和部署。