1.3 云操作系统
Kubernetes已经成为部署和管理云原生应用的事实上的标准平台。从多种方面来看,它就类似于云上的操作系统(OS)。试想一下以下情况。
●当在物理服务器上安装一套传统的操作系统(Linux或Windows)时,操作系统会对服务器的物理资源进行抽象,并对进程进行调动,等等。
●当在云上安装Kubernetes时,它会对云上的资源进行抽象,并对多种云原生微服务应用进行调度。
就像Linux能够对不同的服务器硬件进行统一的抽象一样,Kubernetes也能够对不同的私有云和共有云进行统一的抽象。最终,只要运行Kubernetes,就不需要关心底层是运行在自建数据中心,还是边缘计算集群,抑或是共有云中了。
这样来说,Kubernetes能够实现真正意义上的混合云,使用户跨越不同的公有云或私有云实现对负载的无缝迁移和均衡。当然,也可以在不同的云之间进行迁移,这意味着不会永远被绑定在最初确定的云上。
1.3.1 云的规模
总体来说,容器让人们能够轻松应对大规模系统的扩展性的挑战——前面刚刚提到,Google每周可以运行数十亿的容器!
这很不错,但是并非所有组织或公司都有Google这样的体量。其他的情况呢?
通常来说,如果原有的应用运行在数百个虚拟机上,那么很可能相应的容器化的云原生应用会运行到数千个容器上。这么说来,确实迫切需要一种管理它们的方法。
劝君尝试一下Kubernetes。
而且,我们生活在一个商业和科技日新月异且越来越专精的世界。有鉴于此,我们迫切需要一种无所不在的框架或平台能够屏蔽这些复杂性。
再次劝君尝试一下Kubernetes。
1.3.2 应用的调度
一台典型的计算机是由CPU、RAM、存储和网络构成的。不过现代操作系统已经能够对大多数的底层进行很好的抽象。举例来说,有多少开发者会去关心程序运行在哪个CPU核心上呢?并没有多少,OS已经为我们搞定了这些。这是一种很好的方式,这使应用程序的开发过程变得友好许多。
Kubernetes对云和数据中心的资源进行了类似的管理。总体来说,云或数据中心就是一个包含计算、存储与网络的资源池。Kubernetes对它进行了抽象。这意味着我们无须明确对应用运行在哪个节点或存储卷上进行硬编程,我们甚至无须关心应用运行在哪个云上——让Kubernetes操心这事即可。从此无须为服务器命名,无须将卷的使用情况记录在电子表格中,总之,无须像对待“宠物”(pet)一样管理数据中心的资产。Kubernetes这样的系统并不关心这些。对应用进行类似“把某应用模块运行在某个指定的节点上,配置它的IP,将其数据至于某个具体的卷上……”这样进行运维操作的日子,已经一去不复返了。
1.3.3 一个简单的模拟
思考一下快递货物的过程。
发件人将货物按照快递公司的标准打包,写明送货信息,然后交给快递小哥。仅此而已,其他的事情交给快递公司来操心就好了:物流过程是走航运还是陆运,跑哪条高速,由哪个司机来驾驶等。快递公司还提供类似于包裹追踪、调整目的地等服务。重点在于,快递公司所需要的仅仅是打包的货物以及送货信息。
Kubernetes中的应用也是类似的。将应用打包成容器,声明其运行方式,然后交给Kubernetes来启动它们并保持其运行状态。Kubernetes同样也提供了丰富的用来检查运行状态的工具和API。特别好用。