今天我主要想跟各位探讨一下在容器这方面尤其是Google2014年推向Kubernetes开源管理的工具。我本人在Google负责Kubernetes的网络产品,包括容器之外的网络产品。我们在国外有这样一个比喻集装箱,支持(英文)开发应用下,把一个大的应用具体细分成小块独立运营,部署一个封装好的产品,把容器部署在物理机上、虚拟机上只可意部署到云端。在Google的实际经验来讲,容器在过去十年给行业界包括Google本身提供了很大帮助。从这两个曲线可以看出来,第一个蓝色曲线是Google这些年在人员设置上,在维护自己数据中心人员的增长需求,相对来说是低速增长。第二个绿色快速增长曲线,是我们在Google自己开发自己应用,针对用户端应用的时候采用容器的方式,Google整个里面有800多条容器。
容器使得Google可以在扩容的情况下,在不增加人员成本的下,把人员精力真正放在开发对客户有价值的,包括人工智能、识别、广告、搜索等这方面,对其他行业,对于企业、事业、用户来讲这是最重要的,你可以把你精力放在企业最核心的价值上,而不是放在怎么样运营好你的数据中心。
我介绍一下我们Kubernetes这方面的基本情况。Kubernetes是2014年Google决定将Google自己一套内部管理数据的工具对外开放。当时有几种选择,第一种传统方式,自己做自己一套希望外界采用。另外以开放方式来做,开放方式今天上午跟很多同仁进行交流,大家为什么要做开放?其实大同小异,所有人推动开放,包括华为也好、阿里、京东也好,去推动开放最核心的应用就是开源,更多怎么样增速创新发展的速度,促进发展速度长期来讲对你自己本身企业是有利的,可以发展你企业核心的商业业务,而不是整天想技术底层的问题。
说白了Kubernetes作为传统上,把你应用包装在一个类似物理机的东西里面,可以移动。同样作为大应用还是要管理集群,想怎么样部署这个集群,这个还要想怎么监控?这部分牵扯维护人员DeoOps,运营的精力。Kubernetes就是使用这样一套架构帮助开发人员部署你的东西,这样可以把你从这部分解脱出来。
我们2014年推动Kubernetes,platform Flexibility推动。用户是我们服务的目标,用户需要有自己的选择,可以决定限制性的方向,可以继续维护自己的数据中心,可以选择维护自己的数据中心,我们看到运单这么多年的技术发展,迅速如何给企业提供利益,就是开源,开源我们希望达到什么?不管客户用自己的物理机房、还是用亚马逊的也好、Google也好、阿里也好、腾讯的也好,不管哪一家可以有这样的选择,可以把服务从自己家迁到别人家,或者从别人家迁回自己家。
全球来讲有1500多开发人员积极介入这个项目,我们算一下大概相当于400年的开发,一个人要花400年的时间做完之前的工作,100个人团队全职做这个工作也需要200年,你一个人推动一个行业一个整体很难,其他开源项目也有同样的经验,有大家的介入整个全球开发者也好,业界公司也好,能积极介入,减少对自己本公司的投入,同时带来了开放性给最终用户使用。
这里刚才说的Commtinity社区里面积极的参与的公司,国内有华为、腾讯,前段时间跟COREOS接触,在考虑加入,国内大概有十几家其他的云端,有一些相关公司也在积极介入Commtinita这个社区。
技术部分本身也经历了考验,这里举个例子,大规模应用Kubernetes,达到支持互联网、B2C.第一个是游戏公司做了一个小鬼进入的游戏,当时在Google上面,这个很成功,当时它推出这个游戏没有人觉得它会超过一百万的用户量,我们接触这样客户也希望他提供一个预期,你不管从带宽还是物理机和虚拟机数量也好,提供一个预期,我们确保有足够的扩容。当时给一个数据,结果实际发现在两周三周之内,真正在Google云上达到了50倍的增长。这个证明什么?证明就是说Kubernetes在扩容、灵活性部署这方面经受这样的考验。还有像沃尔玛等。
接下来我简单说一下几个核心的Kubernetes的概念。第一个概念在Kubernetes里面核心概念就是pods,刚才你看到的大的集装箱,pods你看到小的白色的牌子,pods你可以放很多东西,你可以把多个容器多个主机放在pods里面,在pods里面通信,你不用考虑是不是延时很缓慢,在pods里面延时性很低的。
第二个从容器这方面做得Kubernetes和其他方向不一样的,每一个pods真正有自己一个IP,这样你有一个好处,用户作为开发人员来讲,你不用想做一些转换,你开发一个业务,这个业务可以默认一个端口,这样你对每一个pods都有一个固定的IP.
怎么实现,这个东西在linux提供的,实际上提供了物理机,同一个CBR有两个pod2,有两个虚拟网端,另外ITboy也是起到了核心作用。
NODE,就是说在你集群里面,单独的机器,物理机也好、虚拟机也好,你可以有很多NODE在里面。
Depoyment,作为一个开发人员你可以不用再想怎么单独监控各个系统,或者怎么部署这些版本,跑在一百台机器,一千台机器,你只要考虑你用什么资源,需要多少节点,需要在什么地点,IP地址上运行,变成了文本的描述方式。你作为一个程序开发人员,应用开发人员,你想得这个机器怎么运行。
另外一个概念叫做Service,想想怎么样把大的应用分割成更小的块,每个不同的小块这个单独的部署,在Service实现方式,你定义这个模块,这个模块里面你可以选择有标签,标签你可以随便写标签叫什么,最后你通过标签选择具体的信息。
这是每一个PODS和Service有IP地址的。
之前说扩容,我描述一个Service需要五千个节点,五千个podS,传统情况会用到负载均衡这套系统,在Kubernetes是自动实现的。你有一个应用,刚开始比较小的人群,第二天你游戏非常火增加一百倍,这时候Kubernetes自动扩容。
Kubernetes作为开发人员通过API调动进行控制,你小的改动的话可以部分受理。Kubernetes本身提供一些基本的监控,Google自己这方面云服务是叫做container engine,谷歌集群管理方式,我建立一千个BM的集群,一旦建立好这个集群之后,这个集群上可以用Container进行操作。有一些企业有一些用户,不需要去维护,虽然计算机本身提供。另外单独提供了跟Google云的负载均衡网络和其他方面,包括身份认证这方面的集成服务,这样建立你应用而不是单单某个方面可以采用其他服务。
另外最新1.6版本住来,GKE本身实现了集群里面Kubernetes的扩展,实现了在集群本身进行自动扩展节点。最开始你把你集群建立100,建立过程中可能超过,你可以设置自动扩容,集群可以自动扩容,这部分我们没有作为GKE,在1.6版本已经做到了cluster autoscaling.
另外对负载均衡这部分的兼容可以有很多方式,跟Google网络自带负载均衡实现。在Client上,首先通过Google云自己的负载均衡决定分发到哪个虚拟机上,来决定在这个pod之间是怎么分配的,Pod不局限于GEK.今天时间有限,我分享到这里,谢谢大家。