云计算 频道

Kubernetes风头正盛,Docker何去何从?

让部署容器化应用更简单、高效,正是这样的特性,让Kubernetes风靡一时,其发展势头大有超过Docker的气势。很多人一提到Docker ,立刻会想到kubernetes。那是不是代表着,Kubernetes已能替代Docker了呢?显然,这是技术概念过度热炒的结果!

什么是Docker?


 

虽然,我们一直在谈论容器,探讨基于容器的基础设施建设,但其实并没有理解容器技术的真正内涵,不知道这一技术是如何解决企业业务问题的。在笔者看来,容器技术其实就是“服务器管理技术”。为什么这样说?因为容器技术之所以诞生,最根本原因是服务器管理带来的挑战,尤其是基于Linux系统的服务器。

当然,并不是说Linux服务器有多复杂,而是因为Linux是当今唯一和互联网服务相关的服务器系统,我们需要考虑如何基于互联网服务运行服务器,并确保不受攻击。然而,有时候,太多的服务器支撑是一种资源浪费,因此我们又提出微服务概念。微服务是一个新兴的软件架构,是把一个大型的单个应用程序和服务拆分为数十个微服务。

针对微服务概念,Linux在2006年推出了一项被称为“cgroups”的技术。Cgroups是controlgroups的缩写,是Linux内核提供的一种可以限制、记录、隔离进程组(processgroups)所使用的物理资源(如:cpu,memory,IO等等)的机制。cgroups为容器实现虚拟化提供了基本保证,是构建Docker等一系列虚拟化管理工具的基石。但是,如果你不太熟悉Linux内核技术,那么使用cgroups其实并不是一件特别容易的事,这也是Cgroups为什么不为人所知的根本原因之一。

Docker的出现,提供了一个比cgroups更方便的Linux服务器管理工具。Docker太好用了,以至于很多人都没有意识到自己使用的正是Linux内核技术。借助Docker,开发者可以在一台服务器上运行多个应用,所有应用完全使用沙箱机制,相互之间不会有任何接口,这种隔离机制大大确保了各个应用之间的安全性。其中,Docker Swarm是Docker的最核心工具之一,该应用可以把不同的服务器组合成一个集群。当管理多个服务器时,这种集群效应就开始发挥作用。

所以,当我们谈容器,尤其是Docker时,其实我们基本上谈论的是Linux内核技术。

什么是Kubernetes?

那么,Kubernetes又是什么?我们为什么需要它?要想更好地理解这一点,你可以假设一个应用场景:有一个数据中心,有数以千计的服务器,运维人员不只是维护一个微服务,而是成千上万个,这时我们必须借助一个大的操作平台来管理。因此,Kubernetes才有了成长沃土。

Kubernetes是Google开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。在生产环境中部署一个应用程序时,通常要部署该应用的多个实例以便对应用请求进行负载均衡。在Kubernetes中,我们可以创建多个容器,每个容器里面运行一个应用实例,然后通过内置的负载均衡策略,实现对这一组应用实例的管理、发现、访问,而这些细节都不需要运维人员去进行复杂的手工配置和处理。

为什么要用Docker,而不是Kubernetes?

我们为什么要使用Docker,而不是Kubernetes。如前文所述,当我们在谈论容器技术时,其实重点是Linux内核技术。如果你希望在项目中使用容器,那么应该对Linux有一点经验。Docker容器整合了cgroups技术,提供了一个更理想的工具集,实现了container的资源的隔离和控制。

Kubernetes这项技术并不适用于小型公司,更不适合单个web项目的运营。尽管, 理论上也能用,但是会“大材小用”,就像我们不会乘着火箭去度假一样。当然,我们不是要打压Kubernetes,这是一项很棒、还免费的技术,但是并不是所有的技术都适合自己。我们要扪心自问下,是否真的需要这钟技术。Kubernetes更适用于一个架构庞大、且应用不断增长的环境,比如:谷歌、亚马逊、微软这样大的互联网公司。

另外,相比Kubernetes,构建一个轻量级Docker群集环境更容易,其中有很多酷炫的功能和特性。

总之,我们不能只是跟风。到底什么是Docker,什么Kubernetes,及我们为什么要使用Docker?解决了这些基本问题,也就不会盲从于各种概念了。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31547

0
相关文章