APN是什么,apn是什么东西

  

  Kubernetes官网是Kubernetes.io/.从Kubernetes的Logo可以看出是一个舵,是船的方向盘。俗话说,大海航行靠舵手。为什么叫舵?因为Kubernetes刚出现的时候和Docker的Swarm竞争过。作为一个容器管理系统,Docker就是一个容器,我就是装载容器的船,所以Kubernetes就叫舵。   

  

  Kubernetes徽标   

  

  Kubernetes诞生于15年,出来后呈现出一种横扫别人项目的趋势。其他项目基本都是慢慢干涸的。它做过最牛逼的项目是Docker Swarm和Mesos。   

  

  蜂群   

  

  梅索斯   

  

  Mesos在Docker出来之前就开始管理集群了,而且背靠大树,得到了Hadoop社区非常强的支持。Mesos一直被视为Hadoop下一代纱的替代者。   

  

  而且从2018年开始,运维会慢慢不再碰单机。Kubernetes将成为一个集群操作系统的概念。多年来,传统的运维一直是在Linux下。可以了解Linux中的命令,排除Linux操作系统的各种问题,使用Linux下的iptables等工具。但是从2018年开始,以后就不需要登录单机版的Linux了。很有可能一年都不会登录任何机器。可能只登陆了库本内特的中央控制电脑。   

  

  在线服务的部署、监控、运维、添加或删除机器等操作都可以由Kubernetes进行管理和操作。这是一个必然的趋势,因为在过去的一年里,历史已经为我们证明了这一切。例如,360、JD.COM、知乎等大厂都在使用容器技术。   

  

   JD的集装箱化。计算机输出缩微胶片   

  

  360集装箱化   

  

  之前在Linux积累的知识不能说没用,但是会被拉到更低的层次。也就是说在日常操作中不会有别的。Kubernetes已经解决了很多事情。所以在技术研究上一定要有前瞻性和前瞻性。因为这个科技时代的潮流,每一年,技术的浪潮越来越猛,越来越快。很多东西你可能只是听过一句话,语文书就出来了。比如18年春节,我的朋友圈都是扔硬币事件,比如王思聪扔硬币事件,扔硬币事件,周扔硬币事件,冯友生扔硬币事件等等。区块链的浪潮就这样来了。当然,从那个时候开始,Kubernetes浪潮也来了,都是以迅雷不及掩耳之势来的。戈朗也生气了。记得18年,3月左右,某机构发布了一组使用Kubernetes部署超级账本的视频,于是人们更有前瞻性。   

  

  硬币散射   

  

  最起码要学会如何使用和运营Kubernetes,因为Kubernetes是未来的必然趋势,至少是未来三到五年内。也是目前行业生态链中非常重要的锚点。然后它会建立一套基于Kubernetes的东西,一层又一层。我们越早学习Kubernetes,我们就会越早受益,我们的地位也会越好。这种趋势如此之强,即使将来Go语言不流行,Kubernetes也会流行。他的趋势强于围棋语言。就语言而言,Go还在和很多语言合作,作为服务器争夺霸权。但Kubernetes显然已经成为一个国王。所以你有没有想过为什么Kubernetes这么厉害,能秒杀这么多牛逼的项目?而且不是一个接一个,而是一堆项目一出来。不存在我跟你竞争这种概念。两年前还有人比,现在没人比了,因为Kubernetes才是潮流。有一种气场支配着这个世界。   

  

  Kubernetes因为Google的大力支持和重视,投入了大量非常厉害的工程师来开发Kubernetes,所以目前的走势非常牛。而且因为投入了大量的工程师,这个项目做得非常好。很多想法非常非常值得学习。所以,我的主要谈话是基于这样一个事实,即谷歌是令人敬畏的,它在Kubernetes上所做的决定导致了他现在正在做的事情。我会专注于这些事情。以及为什么他的模块是这样设计的。每个模块为什么这么命名,有什么功能。原则上他能做的主要是从这几个方向。如果想学习如何使用,可以参考作者的书《Linux系统架构与运维实战》,Kubern在书的后三章有介绍。   

etes的搭建,管理,运维,部署和监控等方面的知识,如果大家还想更加深入的学习也没有关系,后期笔者会写一本详细介绍Kubernetes的书籍供大家学习和借鉴。从而帮助各位读者可以学到、用到和体会到Kubernetes的神奇之处。

  

Kubernetes目前最新的版本是1.13,在www.Kubernetes.io/网站的首页中可以看到目前最新的版本是多少。在Kubernetes官网上列举了很多的Case Studies,都是哪些公司在用Kubernetes。

  

Kubernetes V1.13

  

为什么Google对Kubernetes这个东西这么重视呢?难以想象是吧?因为Google是一个商业公司。据说Google的Kubernetes项目组里至少有300+大牛在做这件事情。他们是和Google的GCE(Google Compute Engine)团队一起做的。Google Cloud Platform,为什么做这么一件事情呢?这也是Google被气的吐血的一件事,我们都知道在全世界互联网范围内搞云最厉害的是亚马逊,而且这件事情不用想都知道的。但是这件事让Google觉得是一件非常耻辱的事情,因为Google觉得他们才是最牛逼的。我们才是真正的业界大拿,我们在服务端的积累,好多东西都是我们引流潮流搞出来的。居然让一个搞电商的抢了先头。而且,由于这个趋势早就有了,而且由于亚马逊最近从财报上可以看出来,它在云上当然的这些投入,现在开始显现出巨大的威力。每年的收入由云贡献的越来越多,越来越多。这时候,Google肯定是坐不住了,同时坐不住的还有微软。最后更加Google觉得非常丢人的一件事是现在老二是微软的Azure。原来一直看不起的微软都超越了Google,都爬起来了,都翻身了。所以Google这时候就开始反思这件事情,Google在很久很久以前,推出过一个东西叫做GAE(Google Application Engine),GAE当然虽然没火,但是让另外一个厂商火了起来,这个厂商是新浪,新浪诞生了一个SAE(Sina Application Engine)。GAE和SAE表示什么呢?就是说你用它线上的APN,代码丢上去,它会自动的进行托管、自动去扩容。但是GAE就是没火起来,所以Google就觉得这件事是耻辱,微软都起来了,所以Google就去分析微软为什么起来了。然后又发现一件非常诡异的事情,微软之所以站了起来是因为他从它的这些.NET平台上积累的大量的技术人员,这些人员一直苦于单机版的,搞C#这些人。微软搞了一个非常bug的东西,我们不是Windows集群上面不如你们吗,好,我们直接在visual studio上面直接嵌进去。你写C#代码,写网站直接点个按钮一键部署到微软云,自动扩容,数据库什么的都不用你管。你就默认它是一个永远写不满,读不满的数据库。非常省运维,基本上也不需要什么运维人员,就直接部署上去了,所以,微软用这种方式反败为胜。

  

而且你会发现微软这几年一直在业界混的是风生水起。.NET其实还是一个非常大的语言。所以,Google就想你们都这样了,我怎么搞,我难道去卖主机吗?但是我卖主机基本上卖不过亚马逊啊,Google就想了,那我就弯道超车搞个别的吧。所以Google就搞出了GCP(Google Compute Platform)的东西。Google Compute Platform主要来说核心竞争优势就在于它内置了一套Kubernetes一样的东西,Google那个时候就在赌,赌什么呢?赌容器化就必然是以后的趋势。以后大家发布东西都是容器化,所以,以后主机这种东西就会成为最底层的东西,大家都不关心,然后Google就把这个东西弄下来了,Google觉得我自己推这种云肯定不好使啊,大头毕竟在人家亚马逊和微软那边了,所以我就推开源版。我先把里面最核心的东西抽出来,就是这个Kubernetes,我先告诉你Kubernetes能再所有平台上运行,在你们家自己搭一个都是没问题的。开源在加上自己的平台,双管齐下来搞。所以说,为什么投入这么多的人,就是因为Google的这个云想要起来,Google Cloud想要起来他们就要通过开源去把大量的粉丝给聚集起来。它是一个什么样的过程呢?你们有能力的可以用开源,但是你们必须要自己去折腾。没能力,你觉得慕名而来的你就花钱买现成的,有钱的出钱,没钱的出力,就是这么一个过程。Google认为这样才是未来的一个大趋势。

  

所以,还是觉得这件事会成为一个趋势,为什么呢?因为Google如果下定决心想做一件事,很少有说搞不成的,当然这是在技术领域。

  

Google当然也干过很多的烂事,Google曾经觉得火狐写的太烂了。于是,Google找了很多人写了一个Chrome。当时很多人都在哈哈大笑,觉得Google很傻,但是后来这些人都懵了,居然把Firefox给干掉了。

  

Google还觉得诺基亚什么的操作系统太烂了,就搞了一个Android出来,最后诺基亚的塞班、微软的Windows Phone还有黑莓都搞不过它,就被Google给搞死了。现在除了Android就是iOS,已经不存在其他的移动端的操作系统了。这当然都是Google的决心,在这件事情的基础上,Google他们切入Kubernetes这件事,也知道很多人都占了位置,像Mesos和Swarm之类的,而且更恶心的事情是,Swarm是Docker公司的亲儿子。

  

不知道大家听没听过有一个趋势叫做bare metal,最早入行的人都知道,当时是没有虚拟机的,大都是在物理机上面跑程序。后来,有趋势出来了,当时最流行的虚拟机软件叫做XEN,大家都开始用虚拟机来把一个物理机切成很多虚拟机跑程序,这样可以提高很多部署的力度。后来XEN就被另外一个虚拟机技术KVM干掉了。KVM是Linus他们团队搞出来的,Linus觉得XEN写的太烂了,就发明出来了KVM,KVM从效率上已经超越XEN了。但是KVM生不逢时啊,被人抄了后路,Docker也就诞生了。后来很多公司都是KVM或者虚拟机上跑Docker了。后来跑着跑着大家都发现为什么要用虚拟机?好像不需要啊。然后很多云厂商就发现了,无论是阿里云还是腾讯云还是亚马逊云现在都开始卖裸物理机了。什么意思呢?就是我不给你增加虚拟化这一层了。因为大家发现跑Docker我不需要虚拟化那一层,搞虚拟化那一层就感觉是你点了一个外卖,然后把外卖买回家之后倒在自己家碗里面吃。这简直是浪费时间的事情,为什么不直接在外卖盒子里面吃,还要倒在家里的碗里面吃,这样浪费事情不重要,重要的是吃完还要洗碗,如果你觉得洗碗不累的话,但是要浪费水啊,水是生命之泉,不能浪费水,要节约用水才对。所以说bare metal就是裸金属这个意思。所以,现在就流行裸金属。直接卖机器,但是基础设施还是有的,后直接开始跑Docker。为什么现在开始这个趋势?就是因为Google推Kubernetes的力度太强势了。很多公司会找到AWS说,你能不能直接卖给我服务器,我不想要虚拟化了。反正我直接在上面搭个Kubernetes就可以跑起来了。为什么还要加虚拟化,多搞出来这么一层呢?

  

所以,由于客户的不断的要求,AWS也不得不低头。AWS很早之前就搞了一个类似于Docker的平台了,但是没人买账。所以,现在在客户的要求之下就开始卖裸机,但是AWS它不会就着Kubernetes这样卖,为什么卖裸机,当然也是被Kubernetes逼的。

  

现在大家都开始往这个趋势上面靠,甚至连Docker的亲爸爸dotcloud公司也不得不声明我们的Swarm是支持Kubernetes的。

  

当年在Kubernetes出来之前有非常非常多的公司,非常非常多的人想去干这件事,因为这件事情显然是一件非常有前途的事情。无论是做Docker编排工具还是其他的一些东西做出来一定都是非常有前景的。,甚至说再造一个Google也不是没有可能的事情。国内有一家厂商做的也非常的厉害,不知道大家有没有听说过,叫做rancher。

  

Google牛逼之处在于一台裸机上面跑了Linux操作系统,在Linux操作系统中可能就是跑Docker了。然后又有一台裸机上面跑了Linux操作系统,在Linux操作系统中又跑了Docker。如果想把这两台机器有机的组合起来需要哪些技术呢?

  

在Kubernetes出来之前就有很多互联网公司开始举旗招兵买马决定要把这件事情做起来,需要做什么呢?

  

首先是Docker,虽然很多公司想过很多办法想把Docker干死,做出过很多别的容器,就和Docker竞争的。但是,实际上由于Docker在技术上没有太大的缺陷,而且他的先发优势非常明显,所以说,没有人可以干掉Docker。而且很多人就以Docker为基础做了很多镜像出来。Docker的母公司dotcloud当年为表示我们还是很开放的,所以说搞了一种叫开放的容器这种规范,(open Container)。Docker制定一套标准,你们符合这套标准都能用,就是都叫做容器,当然这个东西后来虽然它表达出这个意思,但是别人也就没推起来。为了让这些Docker之间进行互信,需要一种技术,无论这个机器在哪,如果在一个什么集群之中,最好能让他进行通信。从通信这个技术角度上讲,然后各种各样的技术就诞生了。比如iptables、SDN这些东西。通过一种软件的网络把它连起来。然后上面还有很多东西,弄完之后还需要有监控的东西,监控各种各样的服务,最后最重要的一点就是容器A的服务器挂了,我想迁移到容器B的服务器中,就需要分布式文件系统或者卷这种东西去支持。所以就需要一种Volume的东西挂载到Docker容器中。分布式文件系统在这里面的必要性也是为了兼容一些比较老的程序。比如在本地写完的一个临时文件库,我这台机器挂了,我想把这些东西迁走,我迁走之后,最好是能把这个程序能按原来的机器的状态启动起来。或者说想把mysql这类的东西放到Kubernetes里面,那么mysql它是需要写磁盘的,需要有很多的数据写进去,那它怎么写呢?它总不能说什么高可用,能扩展,能漂移,但是机器挂了,数据就丢了,这不是扯淡吗。所以需要一种动态的卷。

  

上面说的这几个是最难的,包括容器,SDN,监控和文件系统。这些东西都需要支持,支持了你才能把这件事情搞起来。因为这件事每个东西拿出来都是一件非常有难度的东西,特别是好玩到什么地步呢?SDN和分布式文件系统这件事情上呢,争霸了多年。各个山头做了各种各样的东西出来,谁也不服谁,但是谁也没把谁打死。当时Google的策略是,Google也没想着我以一己之力能把你们这些人全打死,那么我就做一件事,我搞的这件事情就叫做Kubernetes,我只负责最核心的东西,比如说容器应该在什么策略下进行调度。剩下的这些东西呢我定了一堆规范出来,我定个API出来。我调用这个API会发生什么事情,比如调用某个API进行网络切换,给分配IP。或者说我把它迁移到某个机器上,我定义好这些API之后应该返回什么,应该做什么。然后在定义一堆关于卷操作的API,我告诉你我需要把某个磁盘挂载到这,然后你就可以把这些磁盘全部挂载上。或者说我把这些磁盘全部迁移到宿主机上面,然后挂载到另外一个容器上面,然后你给我挂载上。它就不去实现,他就先定义接口,定义了一堆接口,而且Kubernetes它有一套属于自己的非常非常好的一套API设计的规范原则。通过这些东西的定义,Kubernetes就展现出一种王者之势。我不跟你们这些人去抢饭碗,去争风吃醋。我给你们定义一种吃饭的姿势,你们按照这套姿势吃饭我就保证你们可以吃饱饭。

  

由于Google在业界的号召力,所以很多公司比如SDN、iptables都能实现这种接口,全都来实现这个接口,实现完了就开始声明我们全部支持Google。但是别的公司不给这个机会,比如说Swarm这个东西它就选定了一套他觉得非常好的SDN网络方案。但是就会有一个问题,你选了一套这种SDN,这种分布式文件系统。总会有人因为某种原因他不想用这个东西,它由于不想用这个东西,就有可能直接把你整套方案给你否定了。这件事情如果你们做to B或者说基础架构给你们公司别的部门推广的话你会发现这件事情非常常见。比如说100项需求,99项满足,有一项不满足,我不用。所以Google通过这套方式他就完美的绕开了。我没强制性让你用某个东西,你去把它实现了,或者说你让这些实现这个东西的人给遵循我们的接口做一套接口这件事就可以了。所以,Google就通过这种方式先定义了API,代码没写,先把API写好。然后告诉你们可以这么搞,然后慢慢地就把这件事情快搞成了。

  

就是你们继续打你们的,我不管,但是你们打的过程中给我暴露一个接口,反正你们谁赢我不管,你们都是支持我的。而且,Google躲得也是长期会处于一种混战状态。谁也不可能把谁打死,因为你如果了解开源历史你就会发现分布式文件系统这场战争打了几百年了,从计算机诞生到现在一直在打,但是谁也没把谁打死,像MFS,GlusterFS,HDFS,甚至EBS这些东西打到了现在也没见谁把谁整死,都还活着。

  

所以说,通过这些方式,就支持了一堆接口。甚至有好事之人实现了非常好玩的接口,比如里面没有分布式文件系统,我就拿本地的分布式文件系统给你实现这些接口,然后骗一下Kubernetes也能实现。甚至它连Docker都不是绑定的,他也是一个叫CRI的接口。所说义说Kubernetes他都已经表现出这种态度了,即使你不用Docker也能搞。

  

只要是底层的东西符合,我上层的这些人全部是调用Kubernetes的接口去实现自己的业务逻辑,比如上线什么的全部是调用Kubernetes的接口。到时候你们迁移到Google云上会非常非常的简单,甚至不需要做任何改造,你会发现有人把Kubernetes搭好了,底层什么的都存在,迁移过来直接用就可以。看来Google是在这里等着我们下套了,让我们去使用Google Cloud。

相关文章