详解Kubernetes的价值


过去的这几年里,Kubernetes是新兴的技术,并已经成为了其领域的事实标准。要想理解为什么Kubernetes是一种根本性的变革,我们需要首先了解下虚拟化技术。

为了简洁起见,本文先简要介绍一下各种架构类型,总结一下它们的核心特性和创新之处。

一对一

微处理器刚开始的时候,物理硬件仅仅被一个操作系统使用。绝大多数应用程序,比如数据库,Web服务器,和网站通常都是单一客户的应用程序,至少在生产环境是这样。

这意味着当需要交付业务需求,或者托管“pet.com”以及“food.com”的用户应用程序时,常见的生产架构是每个应用程序使用一台独占的服务器。随着终端应用程序负载需求的增加,会在属于自己的服务器上做水平扩展;但是总的来说,始终维持着这种一对一的关系。
1.jpg

虽然这样的设计对于较大的,简单三层架构的应用程序来说还是相对不错的,但是底层服务(比如,每个应用程序独占服务器)造成资源利用率并不理想,并且扩展很慢花费还很大,因为添加新的资源需要好几天,使用更大的硬件资源来满足峰值需求是很常见的情况。简单来说,这时构建互联网服务花费很高。
2.jpg

应用程序虚拟化(比如虚拟主机)

为了增加服务的粒度,绝大部分基础架构应用程序,比如Web服务器和数据库,都提供了一些应用程序分区能力,允许一个基础架构应用程序进程支持多个前端应用程序。在Web服务器的世界里,这称为虚拟主机,这样一个Web服务器可以支撑多个不同域名的网站,在数据库领域里,单个数据库服务器可以彻底隔离同一个服务/端口上不同的逻辑数据库实例。

这样的应用程序虚拟化能力让很多业务可以部署逻辑上隔离的应用程序,或者至少利用相同的物理资源。
3.jpg

在Netscape时代早期——90年代末——和Netscape企业服务器相比,Apache虚拟主机的支持是其杀手锏特性,可以每个端口托管一个站点。Apache据此占领了网站服务供应商的蛋糕。

在之前的模型里,当吞吐量需求增加时,每个水平层分离到自己的服务器上,同时仍然支撑多个应用程序。一些应用程序,比如数据库,开始通过自己的集群特性提供更先进的水平扩展能力,允许一个逻辑数据库分布在多个硬件资源上,带来进一步的硬件升级和更为优化的资源利用率。

虽然这些技术增加了服务粒度并且改进了资源利用率,但其代价是软件架构的昂贵和部署复杂度的增加。随之增加的复杂度和内在依赖让服务扩展更像门艺术而不是工程实现。虽然早期的托管企业确实能够提供Web托管即服务,但是需要很多繁琐的维护工作。

也就是说,这个时期互联网是复杂并脆弱的。
4.jpg

虚拟机

随着服务器领域Linux越来越流行,操作系统虚拟化也开始流行,让单个硬件可以托管多个操作系统。这种新模型下,每个系统或者应用程序可以拥有自己的操作系统和环境,同时共享相同的硬件资源。
5.jpg

注意:技术上来看,虚拟机技术在60年代就在IBM出现了;但是在这里,可以说Linux(在某些角度,也有Windows)让OS虚拟化的概念开始流行。

这种模型最大化了资源利用率并且让应用程序架构简化为最初的形态,移除了系统内的依赖,但是这种新能力的结果是Amazon Web Service驱动的全新IT运维部门的形成,将所有硬件预配和网络复杂度抽象出来,提供连接着的互联网操作系统即服务。使用这种全新的托管或者本地服务,软件企业可以关注于自己的专长:软件,而让少数硬件和网络专家构建并且扩展这些服务的后台支撑。

但是,随着托管的基础架构服务和应用程序越来越精巧,应用程序开始从传统的三层单体架构向多服务(比如,微服务)转变,用性价比高的方式设计,部署并且管理可扩展的多服务应用程序就变得相对复杂并且和云高度相关了。
6.jpg

容器

IT界用微服务架构解决了虚拟机模型的限制,使用了一种相当古老的Linux特性,让操作系统的进程可以仅仅使用单个操作系统上系统资源的子集;因此,虚拟化的下一个篇章容器化开启了,很快被Docker容器格式统治。

通过容器化,应用程序可以使用一系列服务组合架构而成,同时信任底层架构能够以最高效的方式分布这些服务。在老的物理硬件时代需要数天的事情,在虚拟机时代需要数分钟,而现在仅仅需要几秒钟,而且只需最小的(比如,最合理的)内存消耗。
7.jpg

虽然容器化极大地改进了服务粒度(比如,资源利用率),优化了应用程序架构,并且标准化了开发和生产环境的服务运行时,但是这些新技术增加了部署管理的复杂度,带来了配置上的挑战。扩展生产环境仍然要求云特定的技术来扩展底层虚拟机,并且增加了复杂度来决定在哪里以及什么时候创建新的服务容器。
7-2.jpg

总的来说,容器化很重要,但是需要别的东西来将这些价值真正落地。

Kubernetes

这时,Kubernetes的出现让一切变得完整。在容器之上,Kubernetes是一个服务(有时称作“引擎“),提供了用标准的并且环境便携的方式来描述,管理并且运行完整系统(比如,微服务),这个完整系统包含所有相关组件,交互,以及扩展规则。
8.jpg

而在此之前,开发,预生产和生产环境都很不相同,Kubernetes这一新方案可以标准化地定义一个完整的系统如何运行和扩展,这样大幅降低了构建以及管理多服务系统的成本。
10.png

注意:Google Cloud Platform,Kubernetes的创造者,有最先进的Kubernetes实现,虽然Kubernetes成为所有主流云平台的事实标准,包括Amazon Web Service,Azure和IBM,但是使用Google Cloud Platform能提供最好的学习体验。比如,Google Kubernetes Engine支持节点自动扩展。

理解所有这些技术节点是如何演进的很重要。从纯粹的技术角度看,变革在演进里诞生而不是在破坏里。容器通常运行在虚拟机里(虽然它也可以在物理机上运行),虚拟机仍然运行在主流操作系统(称为宿主机)之上,并且很多基础架构应用程序,比如数据库,Web服务器和缓存仍然提供有用的,并且有时候很重要的应用程序特定的集群和分区能力。

将所有阶段总结在一起,我们可以看到所有虚拟化技术的表格。
11.png

Kubernetes是演进而不是破坏的结果,它的业务价值是变革。如下列出Kubernetes的业务价值:
  • 标准化Dev和Ops:因为Kubernetes是和基础架构独立的(比如,它可以运行在云上,本地服务器上,甚至笔记本上),它提供了一种非常健壮并且灵活的方式标准化开发和运维环境,这可能是高速开发方法论里最为重要的方面。
  • 消除多服务的额外消耗:也就几年前,单体架构开始向微服务变迁,随着架构的迁移,开发和运维的构建变得很重要。Kubernetes从设计之初就是围绕这些需求的,以更好更简单的方式,正确使用时可以彻底消除这样的额外消耗。比如,在BriteSnow,所有新架构在一开始就是多服务的,我们通常从相对“小的团队”开始构建一个新的“大应用”。
  • 最大化云便携性:Kubernetes的最重要的成就之一就是,在仅仅几年内,它席卷全行业,让所有人,从主流云供应商,到混合云技术供应商,竞相增加对Kubernetes的支持。这让Kuberntes成为云便携性的基石,让绝大多数现代云应用程序以云便携的方式来构建其系统80%~90%的部分以及扩展拓扑。
  • 让扩展变得简单并且标准:云便携性价值的一部分就是让常用和自定义的扩展规则标准化,这让扩展多服务系统变得简单,同时又能在需要时提供自定义的hook。


通常,对于最新的“趋势”技术的使用,我都是非常谨慎的,因为通常这些令人振奋的技术趋势很短暂。但是,有些时候,有些技术成为趋势并最终大获成功,Kubernetes就是这些为数不多的能够成长为基础技术的技术之一,就像Linux,OS虚拟化和Git一样成为各自领域的佼佼者。简单来说,Kubernetes是如今所有云应用程序开发机构能做出的最安全的投资,如果运用得当,它可以帮助大幅提升开发和交付的速度以及质量。

原文链接:Understanding Kubernetes’ value(翻译:崔婧雯)
===========================
译者介绍
崔婧雯,现就职于IBM,高级软件工程师,负责IBM WebSphere业务流程管理软件的系统测试工作。曾就职于VMware从事桌面虚拟化产品的质量保证工作。对虚拟化,中间件技术,业务流程管理有浓厚的兴趣。

0 个评论

要回复文章请先登录注册