在过去的几年中,Kubernetes已经成为了数不多的,使自己成为所属领域的行业标准的新技术之一。为了理解Kubernetes带来如此变革的原因,我们需要沿着虚拟化内存之路回顾一番。为方便叙述,本文中会简化各种体系结构类型,突出其核心特征和演变。
一对一(One to One)
在微型计算机之初,物理硬件主要使用一个且仅有一个操作系统,而且大多数应用程序(如数据库,Web服务器和网站)通常只有一个最终用户应用程序——至少在生产中。
这意味着当企业需要交付或host一个“pet.com”和“food.com”最终用户应用程序时,通用的生产体系结构就是为每个应用程序提供专用服务器。随着最终应用程序负载需求的增加,水平层在其自身的服务器中被拆分; 但总的来说,一对一的关系仍然存在。
虽然这对于更大、更简单的三层体系结构应用程序来说效果相当好,但是低服务(即每个应用程序的专用服务器)使资源利用率不够优化,扩展速度慢且成本高,因为添加新资源往往需要数天时间,且过量配置硬件资源是缓解处理峰值需求的常见做法。简而言之,那段时间,构建互联网服务是非常昂贵的。
为了提高服务粒度,大多数基础架构应用程序(如Web服务器和数据库)都提供了一些排序应用程序划分功能,允许一个基础架构应用程序进程支持多个前端应用程序。在Web服务器领域,这称为虚拟主机,其中一个Web服务器可以基于域名服务多个网站。而在数据库领域,单个数据库服务器可以在同一服务器/端口上提供完全隔离的逻辑数据库实例。
这些应用程序虚拟化功能允许企业部署逻辑上隔离的应用程序,或者至少在利用相同的物理资源时提供隔离的错觉。
与之前的模型一样,当吞吐量要求增加时,每个水平层都在自己的服务器中拆分,同时仍然为多个应用程序提供服务。某些应用程序(如数据库)开始提供更高级的水平扩展及其群集功能,允许一个逻辑数据库跨越多个资源,从而实现进一步的硬件专业化和更优化的资源利用。
虽然这些技术提高了服务粒度并提高了资源利用率,但却是以软件架构和部署的复杂性为代价的。这增加了复杂性和相互依赖性,使得扩展服务更像是完成一件复杂的艺术品,而不是一个优秀的工程。虽然早期的托管公司确实设法提供网络托管作为服务,但仍没有避免这种复杂性。
换句话说,这断时间,是互联网复杂而脆弱的日子。
虚拟机(Virtual Machine)
随着Linux在服务器上越来越受欢迎,操作系统虚拟化也越来越受欢迎,这使得单个硬件可以托管多个操作系统。使用这种新模型,每个系统或应用程序可以拥有自己的操作系统和环境,同时仍然共享相同的硬件资源。
注:从技术上讲,虚拟机技术是60年代由IBM开创的。但公平地说,Linux(以及Windows,某些情况下)普及了操作系统虚拟化的概念。
这个新模型通过消除系统间的依赖性,最大限度地提高了资源利用率并简化了应用程序架构,恢复了原始形式,但这些新功能带来的最具变革性的结果是由如AWS等驱动的新IT运营模式的形成,此类服务抽象了所有硬件配置和网络复杂性,从而将连接的互联网操作系统作为服务提供。通过这些新的托管或内部部署服务,软件企业可以专注于他们最熟悉的工作: 软件,让少数硬件和网络专家构建并扩展这些服务的主干。
然而,随着托管基础架构服务变得越来越复杂,应用程序开始从传统的三层单块体系结构转向多服务体系结构(如,微服务),以具有成本效益的方式进行设计、部署和管理可扩展的多服务的应用程序变得相对复杂且具有高度特定于云。
容器
业界使用相当古老的Linux功能解决了微服务体系结构的虚拟机模型限制,该功能允许将操作系统进程封装到单个操作系统上的操作系统资源子集中,因此,虚拟化的下一个“章节”,容器化,诞生了,而且主要是由现在几乎无处不在的docker容器格式占据主流。
有了容器化,应用程序现在可以根据其需求使用最优的服务集进行架构设计,同时相信技术将以最有效的方式划分这些服务。过去在旧的物理硬件中需要几天,在虚拟机中需要几分钟,现在只需要几秒钟,占用的内存非常少(即合理)。
虽然容器化显着改善了服务粒度(即资源利用率),优化了复杂应用程序体系结构并且在开发和生产的过程中规范化了服务运行时,但这些新部件的庞大数量增加了部署管理复杂性和配置挑战。扩展生产系统时,仍然需要特定于云的技术来扩展底层虚拟机,这增加了决定在何处以及何时创建新服务容器的复杂性。
总之,容器化是有帮助的,但它需要其他一些东西来实现真正的价值主张。
Kubernetes
这就是Kubernetes走上舞台并完成这副“拼图”的地方。基于容器,Kubernetes是一种服务(有时称为“引擎”),它提供了一种以标准和环境可移植的方式描述、管理和运行包含其所有部分(即微服务)、交互和伸缩规则的完整系统的方法。
以前开发、分段和生产环境差别很大,而Kubernetes的新方法规范化并简化了如何描述、运行和扩展整个系统,从而大大降低了构建和管理多服务系统的成本。
重要的是要理解所有这些技术的里程碑,都是演进式和附加式的,并且通常彼此协同使用。从纯粹的技术角度来看,革命是在“进化”而不是在“颠覆”。容器通常在虚拟机上运行,虚拟机仍在物理服务器上的主操作系统(称为主机)上运行,并且许多基础架构应用程序(如数据库,Web服务器和高速缓存)仍提供有用的、且有时是非常关键的、特定于应用程序的群集和分区能力。
将以上所有里程碑式的变化放在一起,我们可以看到所有虚拟化技术是如何附加演进的。
虽然Kubernetes是进化而非颠覆的结果,但其商业价值仍具有变革性。以下是Kubernetes的主要商业价值:
· 将Dev规范化为Ops:由于Kubernetes是独立于基础设施的(即它可以在云上、本地部署,甚至在笔记本电脑上运行),它提供了一种非常强大而灵活的方式来规范化开发和运营环境,这可能是实现“高速开发”中最重要的一个方法。
· 消除多服务开销:就在几年前,许多企业开始从整体架构转向微服务架构,而架构迁移确实带来了重大的开发和运营设置阻力。Kubernetes的设计从一开始就致力于以详尽而相对简单的方式解决这些要求,并且只要正确使用,就完全消除了这些开销。
· 最大限度地提高云端的可移植性: Kubernetes最令人印象深刻的成就之一就是在短短几年内掀起了整个行业的风潮,让所有人——从主要的云提供商到混合云技术提供商,都争相在新标准中加入支持。这使得Kubernetes成为云端可移植性的基石,并允许大多数现代云应用可以表达其系统的80%到90%,并且能够以云可移植的方式进行可伸缩性拓扑。
· 简化和标准化可扩展性:云可移植性的部分价值在于对通用和自定义伸缩规则进行标准化,这些规则使多服务系统的伸缩按指数级简化,同时在需要时仍然能够进行定制化。
笔者通常会以非常谨慎的态度对待最新的技术,因为它们虽然感到兴奋,但往往是相对短暂的。不过,Kubernetes是少数几个被巩固为Linux、OS虚拟化和Git等基础技术的技术之一因为它确实能带来看得见的价值。简而言之,Kubernetes可能是对于当今任何云应用程序开发企业而言最安全的投资,如果运用得当,它可以显著提高开发和交付的速度和质量。
原文来源:Medium 作者:Jeremy Chone
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-62778877-8261;邮箱:jenny@youkuaiyun.com。本站原创内容未经允许不得转载,或转载时需注明出处::优快云资讯门户 » 从虚拟主机时代说起,详述Kubernetes带来的变革