从容器和Kubernetes技术看现代云计算的发展轨迹

【编者的话】本文选自 Google Cloud Platform Blog,是一个主要介绍容器技术的系列博客的开篇。文中通过对容器技术和kubernetes的大致介绍,阐述了容器技术的优势以及Google对于容器技术的理解。基于单台服务器的容器虚拟化技术可以为测试和部署提供方便,但是在生产环境中,客户往往面对的是整个集群的资源。Google的kubernetes产品为容器的集群化部署和管理提供了解决方案,kubernetes从另一个角度对资源进行了抽象,把每一个服务当作一个整体来对待。作者认为容器技术仅仅是当前计算模型演变的一个开端,而Google将会在这场新的技术革命中扮演重要的角色。

在接下来的几周,我们将会发布一个新的系列博客,在这个系列中,我们想阐述Google对于容器技术的一些观点,此外我们还会和读者分享Google在过去十年间,在容器中运行服务的一些经验。我们是一支由Google的产品经理、一线技术员以及架构师组成的团队,团队共同的目标是要帮助读者了解“容器技术革命”如何能更有效的构建和运行服务。这次我们邀请了“Google 云平台全球解决方案”的专家Miles Ward来做分享,作为这一系列博客的开篇。

各位好!欢迎来到我们新的系列博客,在这个系列中,我们将要为大家介绍当今计算模型创新中最时髦的领域之一:容器化技术(containerization)。

你可能会有很多疑惑:容器到底是什么,它究竟怎样工作?Docker、Kubernetes到底指的是什么,Google Container Engine以及Managed VM又有什么用?它们之间有何关联,我们如何通过容器来构建一个功能强大的服务,并且能让它们在生产环境的大规模集群中使用? 用户采用这种技术,怎样才能获得商业价值?好了,我们不再卖关子,接下来就直入主题。我们首先会对容器技术进行具体的介绍,之后讲述容器技术究竟如何使我们更好地进行工作。

随着计算模型(computing models)的不断发展衍化,我们曾经经历过几次计算模型解决方案的转变。回顾在过去的10年,我们从虚拟化技术的角度可以很清楚看到这种变化的过程。受益于虚拟化技术的发展,我们对整体资源的使用效率有了巨大的提升,与此同时,我们工作的时间价值和为了交付服务所做的重复性工作得到了相应减少。随着多租户、基于API的管理以及公有云计算技术的到来,这一趋势更是被不断加强。这其中,最关键的突破就是资源使用方式所发生的变化。通过虚拟化的方式,我们可以在几分钟之内,虚拟出一个小的、独立的、随需随用CPU内核,这个虚拟的CPU内核感觉像是直接运行在物理机之外。那么问题来了,当你仅仅需要使用一小部分资源的时候,是否还有必要虚拟出一整台机器?

Google在很早的时候就已经遇到了这个问题:我们需要更快、更便宜的方式发布软件,并且支撑服务运行所需要的计算资源的规模也是以前从未有过的,那么这一问题应该如何解决?为了满足这一需求,我们需要对已有资源进行更高级别的抽象,使得服务可以通过更细的粒度对资源进行控制。为此,我们为Linux内核添加了新的技术,这便是众所周知的cgroup,我们通过这一技术来对服务运行时的环境进行隔离,这种被隔离起来的运行时的环境就被称为容器。这是一种新的虚拟化技术,通过这一技术,我们简化了Google全部服务运行所需要的底层OS环境。之后的几年一直到现在,容器相关的技术不断发展,随着Docker的出现,这一技术的影响得到了进一步扩大,Docker也正是通过使用这一技术为基于容器的应用创建了一种可互操作的格式(interoperable format)。

为何使用容器?

Docker

网上已经有很多的对于容器技术和Docker相关技术如何实现的细致的介绍文档,特别是这里这里这里。这些文档已经足够说明,Docker是一个“很棒的解决方案”,也就是说,目前可能还没有其它方案能够和它相媲美。

容器技术增强了对资源控制的力度,这一点确实有很高的实用价值,但是对于那些需要上千台服务器一起来运行的服务而言,单纯的容器技术并没有从本质上提高任何工作负载的运行效率。如今的Docker仅仅是为了在单一的机器操作而设计,于是我们又可以提出一连串的问题:这些在集群上所运行的容器和容器中运行的工作负载应该被如何分配和协调,它们怎样才能按照资源的消耗量来进行管理?它们如何在多租户的网络环境下进行运行?它们的安全性能又该如何被保证?

或许从系统设计的角度来看,我们可以提出一个更本质的问题:当前我们所讨论的到底是不是正确的资源抽象方式?与我交流过的大多数开发者以及公司的赞助商,他们对在指定的机器上的指定容器并不感兴趣,他们真正想要的是自己的服务如何能被启动运行,产生价值,并且易于监管和维护,他们并不想了解全部的琐碎细节(至少他们希望这样),例如指定个机器上的指定个容器到底在做什么。

Kubernetes

Container Engine

Google Container Engine在Google的云平台上引入了“容器即服务”的理念。基于Kubernetes的技术,容器引擎为开发者提供了快速构建和运行容器的方法,此外,容器引擎还可以对容器进行部署、管理、并且使容器按着设定的边界进行扩展。在接下来的文章中我们会对容器引擎进行更多的介绍。

Deployment options

我们可以看到,容器化技术已经成为了计算模型演化的一个开端,Google在这场技术革命中扮演重着要的角色。随着读者开始逐渐接触容器,并对容器部署方式了解不断深入,在实际服务部署中,可以对下面几种方式进行调研,并从中选出最适合的一种:

如果你打算运行一个被管理的集群或者启动几十个容器,使用Google Container Engine试一试。如果你想要在共有的基础设施上或者是自己的系统中构建自己的集群,可以使用Kubernetes来操作。想要在已经被管理好的基础设施上运行一个容器,可以尝试使用Google App Engine或者是Managed VMs

最后,我们要说明的是,我们对你的使用容器技术的经历,对容器技术的需求以及想法(甚至你在github中提出的每个请求)都很感兴趣。不要犹豫,请联系我们,我们会尽所能举办尽量多的会议和Meetup。我们期望能与你联系。让我们一起讨论关于容器技术如何给你的工作带来改变。期待与你交流!

Kubernetes 的详细介绍请点这里
Kubernetes 的下载地址请点这里



原文链接:An introduction to containers, Kubernetes, and the trajectory of modern cloud computing (翻译:王哲 校对:李颖杰)

猜你喜欢

转载自www.linuxidc.com/Linux/2015-12/125753.htm