Docker是容器的代名词,K8S是容器编排的代名词。这两个在近年云计算领域很火。今天我们通过这篇文章,让你10分钟了解Docker和K8S。图片来自Pexels2010年,几位从事IT的年轻人在美国旧金山成立了一家名为“dotCloud”的公司。该公司主要提供基于PaaS的云计算技术服务。具体来说,与LXC相关的容器技术。LXC是Linux容器虚拟化技术(Linuxcontainer)。后来dotCloud对自己的容器技术进行了简化和标准化,并命名为——Docker。Docker技术诞生后,并没有引起业界的重视。而dotCloud作为一家小型初创公司,也在激烈的竞争下苦苦挣扎。就在他们快要手足无措的时候,“开源”的念头在他们的脑海中冒了出来。什么是“开源”?开源意味着开源代码。也就是把原来的内部机密程序的源代码开放给大家,然后让大家参与贡献代码和意见。开源,开源有些软件从一开始就是开源的。还有一些软件无法混用,创作者不想放弃,所以选择了开源。养不活自己,就吃“百米饭”。2013年3月,28岁的dotCloud创始人之一、Docker之父所罗门·海克斯正式决定开源Docker项目。所罗门海克斯(今年刚从Docker辞职)简直太棒了。越来越多的IT工程师发现了Docker的优势,然后蜂拥而至加入Docker开源社区。Docker的迅速流行令人瞠目结舌。开源之月,发布了Docker0.1版本。此后每个月,Docker都会发布一个版本。2014年6月9日,Docker1.0版本正式发布。此时,Docker已经成为业界最流行的开源技术,没有之一。就连谷歌、微软、亚马逊、VMware等巨头也对其青睐有加,表示全力支持。Docker火了以后,dotCloud干脆把公司名字改成了DockerInc,为什么Docker和容器技术这么火?说白了,就是因为“轻”。在容器技术出现之前,业界的网红就是虚拟机。虚拟机技术的代表是VMWare和OpenStack。相信很多人都用过虚拟机。虚拟机就是在你的操作系统中安装一个软件,然后通过这个软件模拟一台或多台“子计算机”。虚拟机类似于“子计算机”。在“分机”中,可以像普通电脑一样运行程序,比如打开QQ。如果你愿意,你可以想象出几台运行QQ的“子电脑”。“分机”与“分机”相互隔离,互不影响。虚拟机是一种虚拟化技术。Docker等容器技术也是一种虚拟化技术,属于轻量级虚拟化。虚拟机虽然可以隔离出很多“子机”,但占用空间大,启动速度慢,而且虚拟机软件可能要花钱(如VMWare)。容器技术恰好没有这些缺点。它不需要虚拟化整个操作系统,而只需要虚拟化一个小规模的环境(类似于“沙箱”)。沙盒启动时间非常快,几秒钟即可完成。此外,它非常节省资源(一台主机可以同时运行数千个Docker容器)。此外,它占用的空间非常小。虚拟机一般需要几GB到几十GB的空间,而容器只需要MB甚至KB。容器与虚拟机的对比正因如此,容器技术受到热烈欢迎和追捧,发展迅速。让我们具体看看Docker。大家需要注意,Docker本身并不是一个容器,它是一个创建容器的工具,是一个应用容器引擎。如果你想了解Docker,其实可以看它的两个slogan。第一句话是“Build,ShipandRun”。即“构建、发送、运行”,三招。举个例子:我来到一块空地,想盖房子,于是我搬了石头,砍了木头,画了图纸,过了一段时间,终于盖好了房子。结果住了一段时间,想搬到别的空地去。这时候,按照以前的办法,只能搬石头、砍柴、画图纸、重新盖房子。然而,一位老巫婆来了,教了我一种魔法。这种魔法可以把我盖的房子复制一份,做成“镜像”,放在我的背包里。到了另一个空地,我就用这个“镜像”复制一个房子,放在那里,拎着包搬进去。如何?是不是很神奇?所以,Docker的第二个口号是:“Buildonce,Runanywhere(构建一次,到处使用)”。Docker技术的三个核心概念是:镜像(Image)容器(Container)仓库(Repository)在我刚才的例子中,放在包中的“镜像”就是Docker镜像。我的背包是Docker存储库。我在一片空地上,我用魔法建造的房子是一个Docker容器。说白了,这个Docker镜像就是一个特殊的文件系统。除了提供容器运行时所需的程序、库、资源、配置等文件外,还包括一些为运行时准备的配置参数(如环境变量)。镜像不包含任何动态数据,构建后内容不会改变。也就是说,每次召唤出房子,房子都是一样的,只是忽略了生活用品之类的。谁住谁负责购买。每个镜像都可以让人联想到一种房子。好吧,我可以有多个镜像!也就是说,我建了一座欧式别墅,生成了镜像。还有一个哥们可能建了一个中式四合院,也生成了镜像。还有一个哥们建了个非洲茅草屋,也生成了镜像。..这样,我们就可以交换图像了,你用我的,我用你的,不是很好吗?所以,它变成了一个大的公共仓库。负责管理Docker镜像的是DockerRegistry服务(类似于仓库管理员)。任何人创建的镜像都不是合法的。如果有人建造有问题的房子怎么办?因此,DockerRegistry服务对镜像的管理非常严格。最常用的Registry公共服务是官方的DockerHub,也是默认的Registry,拥有大量高质量的官方镜像。好了,说完Docker,让我们把目光转向K8S。就在Docker容器技术如火如荼的时候,大家发现要想把Docker应用到具体的业务实现上,是有难度的——编排、管理、调度等各个方面都不容易。因此,人们迫切需要一种管理系统来对Docker和容器进行更高级、更灵活的管理。这时候,K8S出现了。K8S是一个基于容器的集群管理平台。它的全称是kubernetes。Kubernetes这个词来自希腊语,意思是舵手或领航员。K8S是它的缩写,将“ubernete”的8个字符替换为“8”字。与Docker不同,K8S的缔造者是知名的行业巨头谷歌。然而,K8S并不是一个全新的发明。它的前身是谷歌深耕十余年的Borg系统。K8S于2014年6月由Google正式公布并宣布开源。同年7月,微软、RedHat、IBM、Docker、CoreOS、Mesosphere、Saltstack等公司陆续加入K8S。次年,VMware、惠普、英特尔等公司也相继加入。2015年7月,谷歌正式加入OpenStack基金会。同时,Kuberentesv1.0正式发布。目前kubernetes的版本已经发展到V1.13。K8S的架构有点复杂,我们简单看一下。一个K8S系统通常被称为K8S集群(Cluster)。这个集群主要包括两部分:一个Master节点(主节点)和一组Node节点(计算节点)一目了然:Master节点主要负责管理和控制。Node节点是一个工作负载节点,它包含特定的容器。仔细看看这两个节点。第一个是主节点。Master节点包括APIServer、Scheduler、Controllermanager等。APIServer是整个系统的对外接口,供客户端和其他组件调用,相当于一个“营业厅”。Scheduler负责集群内资源的调度,相当于一个“调度室”。controllermanager负责管理controller,相当于“大管家”。然后是Node节点。Node节点包括Docker、kubelet、kube-proxy、Fluentd、kube-dns(可选)、Pod。Pod是Kubernetes最基本的运行单元。Pod代表集群中运行的一个进程,它封装了一个或多个密切相关的容器。除了Pod,K8S还有一个Service的概念。一个Service可以看作是一组提供相同服务的Pod对外的访问接口。这段不太好理解,略过。不用说,Docker创建容器。Kubelet主要负责监控分配给其Node的Pod,包括创建、修改、监控、删除等。Kube-proxy主要负责为Pod对象提供代理。Fluentd主要负责日志的收集、存储和查询。你是不是有点糊涂了?唉,真的很难三言两语说清楚,先跳过吧。Docker和K8S都介绍过了,但是文章还没有结束。下一部分是为核心网络工程师乃至所有通信工程师编写的。从几十年前的1G,到现在的4G,再到未来的5G,移动通信发生了翻天覆地的变化,核心网也是如此。但是,如果仔细观察这些变化,就会发现所谓的核心网络本质上并没有发生变化,无非就是多了很多服务器。不同的核心网元是不同的服务器和不同的计算节点。变化的是这些“服务器”的外形和接口:外形从机柜中的单板变成了机柜中的刀片,从机柜中的刀片变成了X86通用刀片服务器;接口由干线变为网线,由网线变为光纤。即使变了,它仍然是一个服务器,一个计算节点,一个CPU。既然是服务器,势必要和IT云计算一样走上虚拟化之路。毕竟虚拟化有太多的优势,比如上面提到的低成本、高利用率、充分的灵活性、动态调度等等。几年前,大家都认为虚拟机是核心网的终极形态。目前看来,容器化的可能性更大。近年来常被提及的NFV(NetworkElementFunctionVirtualization)也有可能改为NFC(NetworkElementFunctionContainerization)。以VoLTE为例,如果采用之前的2G/3G方式,需要大量专用设备充当EPC和IMS的不同网元。VoLTE相关网元使用容器后,很可能只需要一台服务器就可以创建十几个容器,使用不同的容器来运行不同网元的业务程序。这些容器可以随时创建和销毁。它还可以在不停机的情况下随意变大、变小、变强、变弱,在性能和功耗之间动态平衡。这是完美的!5G时代,核心网采用微服务架构,与容器也是绝配——单体架构(Monolithic)变成微服务架构(Microservices),相当于全能变N专。每个专业都分配给一个独立的容器,提供最大的灵活性。细化分工按照这种发展趋势,在移动通信系统中,除了天线,其余部分都可以虚拟化。核心网是第一个,但不是最后一个。虚拟化后的核心网应该属于IT而不是通信。核心网的功能只是容器中的一个普通软件功能。至于在座的核心网工程师们,恭喜你们,你们即将转型成功!作者:小枣君编辑:陶佳龙来源:转载自微信公众号新鲜枣课堂(ID:xzclasscom)
