为了账号安全,请及时绑定邮箱和手机立即绑定

Kubernetes是什么以及你如何使用它

Kubernetes是一个用于容器编排的开源系统,支持自动化应用程序部署,扩展和管理。阅读这篇博客文章,你将可以了解到Kubernetes的商业视角。我将简要介绍虚拟化方法,构建Kubernetes的关键概念以及它在运行容器化应用程序时如何帮助您的业务。我还会为您呈现采用Kubernetes的六个主要原因。

首先,让我们来看看采用Kubernetes的市场数据。根据Cloud Native Computing Foundation进行的一项调查,Kubernetes是容器管理工具的领导者。在调查中,83%的受访者使用Kubernetes(2018年7月的数据,比2017年12月的77%),而58%的人使用它进行生产,42%仍然在评估它。大多数受访者是企业公司(5000多名员工),其中40%的人正在生产环境中使用Kubernetes。

根据2019年的RightScale云状态报告,Kubernetes的使用正在飙升。它在所有公司中的总体采用率从2018年的27%增加到2019年的48%,大型企业(1,000多名员工)甚至达到60%。2019年的十大趋势报告预测,应用程序开发的云原生方法(包括容器和Kubernetes)将获得更多的支持,因为许多企业正计划采用这种方法。451 Research公司估计,到2020年,集装箱市场将从2016年的7.62亿美元增长到27亿美元。

鉴于过去几十年中已经诞生的IT系统的技术术语集,从实现和性能的角度来看,准确掌握新技术所带来的内容往往令人难以招架。因此,在深入探讨为什么要考虑部署Kubernetes之前,我将帮助您了解这项技术的用途以及它的工作原理。

虚拟化的老方法

在早期,使用更多计算能力的唯一方法是在物理意义上添加更多硬件(因此旧的名称为“服务器群”)。然后,虚拟机(VM)被引入,虚拟化的概念诞生了。在过去近20年中,这一概念一直在发挥着越来越大的作用。这种软件引入了虚拟硬件抽象层(HAL),这反过来使得可以在父OS的相同底层硬件上运行多个操作系统(OS)和应用程序。虽然这种方法确实在当前的IT基础架构领域具有优势,特别是在涉及特定复杂软件目标的情况下,并且确实在市场份额上持续占据优势,但它并非没有缺陷。

虚拟机的完全实现(为了进行比较,我称之为虚拟化2.0)可以迅速成为系统资源的贪婪的独占者,因此我们总是需要更快,更昂贵的硬件。在混合设置中尤其如此,由于必须运行的应用程序阵列和其性质,同一台计算机上需要多个竞争操作系统(并非所有应用程序始终在同一操作系统上可用)。因此,VMM(虚拟机监视器或虚拟机管理程序)软件变得必要,这使得系统更加复杂。一旦设置完成,VM实现就变得重量级且不灵活。毕竟,为了运行应用程序,每个VM不仅必须包含操作系统本身的完整空间,还包括整个堆栈(操作系统,设备驱动程序,应用程序等)的所有库和依赖项(Libs / Bins)。每个VM还必须模拟底层硬件的虚拟版本,因此不会直接调用IRQ(中断请求),而是通过软件代理来进一步阻碍性能。将此结合在一个真实世界的云场景中,适用于大型或严格的业务目标要求的组织,所有这些最终转化为折腾型实现,软件复杂性,有限的可移植性,浪费的CPU周期和GB,以及从IT管理角度来看为硬件和人工付出更多的美元。虚拟化既不便宜也不易实现。


运行VM的框架

虚拟化的新方法

因缺乏更好的术语,我们使用虚拟化3.0,即容器化。软件容器并不是一个全新的解决方案,因为这个概念已经存在了大约二十年。然而在2004 - 2008年,Solaris引入了Solaris Zones并创建了独立的应用程序环境,而Google则突破性的使用容器处理生产业务。与此同时,Linux发布了内核编译2.6.24,为LXC(Linux容器)的成熟奠定基础。快进到2013年及以后:容器形式的虚拟化,而不仅仅是虚拟机,获得广泛认同,并且有充分的使用理由。Kubernetes项目最初由谷歌设计和创建,谷歌于2014年将其开源。它于2015年发布了1.0版,并与Linux基金会合作组建云原生计算基金会,后者现在负责Kubernetes。

容器之于VM好比芭蕾舞者之于相扑选手,你很快就会明白为什么我会这么类比。如果您的组织需要非常特定的虚拟化实施形式,这可能是由于多种原因(即运行复杂的软件环境),那么VM可能仍然是您的乘车机票。对于其他人来说,容器至少在初期是最佳选择。关键的区别在于容器全部运行在同一主机操作系统上,因此无需像每个虚拟机那样复制操作系统。此外,容器通过直接API调用来利用主机操作系统的Libs和Bins,并且仅在其本地模块中封装一些额外的Libs和Bins,这些Libs和Bins特定于它们运行的应用程序。出于这些原因,容器轻巧且便携,并且远远少于您可能运行的任何VM的资源。

这些节省下来的CPU周期和GB可用于两种不同的方案:让同一组容器应用的运行具有更高系统性能和响应时间,或通过运行更多容器应用程序来更好地利用底层硬件。如果您需要在软件故障或安全更新后重新启动容器应用程序,那么您只需几秒钟 - 与在相同方案中引导VM相差甚远,更不用说混合VM配置了。容器式虚拟化当然伴随着它自己的极少 - 可以说是不那么极端的缺点。

首先,容器应该是轻便的,便携的并且易于管理。但是,如果您的业务依赖于复杂的应用程序,则需要运行多个容器。这将增加多样性,并最终导致性能瓶颈,因为容器争夺对受保护系统资源(操作系统和硬件)的访问权。其次,容器默认不如VM安全。这是因为它们仅提供了进程级别的安全性,而不是操作系统级别的安全性,只有一个操作系统在运行,即主机操作系统(主机操作系统的任何安全漏洞将自动成为容器的威胁)。在安全性至关重要的情况下,附加软件是合理的。第三,因为在任何一个物理系统上运行整个容器集合并优化全面SaaS(软件即服务)解决方案的交付是完全合理的,所以实时管理它们不再是手动任务。实际上,它需要类似于VMM的软件,例如管理多个VM所需的软件。


运行容器的框架

Kubernetes的是和不是

在这个阶段,您可能会认为Kubernetes(简称K8S)是一个允许对容器化应用程序进行分组的软件平台,但事实并非如此。K8s不是关于对容器和相应应用程序进行分组的,而是在它们在提供此功能的平台(例如Docker(最受欢迎的),Mesos,CoreOS rkt和LXC)中设置(和分组)之后编排它们。一旦这些设置在一对多关系类型的原理图中(即Docker配置了多个容器和集群形式的应用程序),像K8s这样的软件就会出现在最前端来管理它,并通过自动化使管理任务的负担更少。实质上,K8s(一个容器管理者,CM)类似VMM运行多个虚拟机的过程 - 即一个软件管理层将所有虚拟机固定在一起,并保持这些"齿轮"顺利转动。

K8s就是协调和调度容器,以便它们能够以最佳方式运行,并在负载全天波动时随时访问系统资源。谷歌是该领域的专家,因为它在过去二十年中部署了大量(可能是最高)的服务器和应用程序。Kubernetes的开发和设计受到Google Borg系统的高度影响,它是为管理大规模集群而创建的。K8s可以在内部部署或在云中部署,使您能够跨多个物理机运行容器应用程序,并维护一个故障安全监视层,用于重新启动崩溃的容器。它还可以轻松发布更新(也包括回滚),并根据各种性能指标自动扩展以关闭和启动容器。最后但同样重要的是,K8S允许在一致的部署中运行容器化应用程序,从而通过第三方软件(如Prometheus,Jaeger,EFK(Elasticsearch,Fluentd,Kibana)堆栈或cAdvisor)监控它们变得更加容易。K8s和简化的CM(容器管理)解决方案基本上是同义词。

使用Kubernetes的六个理由

上面我们介绍了虚拟化方法的简要历史以及Kubernetes主要功能的概述。我们现在了解传统虚拟化及其当前和最近以VM(虚拟机)和容器形式实现的概念,以及K8S如何适应业务场景的方案。我们现在转向K8s提供的六项企业福利。

开源的力量

在不断扩大的容器应用领域,K8S已发展成为事实上的行业标准。因此,您可以选择多种服务提供商来帮助您在组织的IT基础架构中实施它。如果出现任何问题,可以指望K8S开发者的开放社区解决问题。更重要的是,K8s并不是一个不活跃的项目(可以坐下来收集灰尘),而是一个全年收到四次大更新的项目。

成本效益

容器的复杂性和占用空间都很轻,而且设置它们比设置VM要简单得多。这使得K8s成为管理容器化应用程序的非常灵活的平台。K8s配置可减少CPU周期和GB的RAM的误用,从而缩短响应时间,最终提高系统性能。并且由于K8s的负载平衡引擎,它可以在需要时启动,停止和优先处理给定的容器 - 所有这些都可以保持性能一致。

可移植性

由于其多功能性,K8S可以在您的组织内本地设置和运行在大量底层操作系统上。此外,如果您决定在整个生命周期的部署过程中迁移到备用操作系统,您可以随身携带现有工作负载,而无需重新设计应用程序或代码片段并重新构建基础架构。K8s避免了供应商锁定,您的设置将继续标准化并随着时间的推移而简化。

可扩展性

K8s从头开始设计为模块化CM(容器管理工具),您可以自由选择混合和匹配组件,实现真正的交钥匙和定制实施。使用K8S,您可以决定要运行的操作系统,应用运行时(Libs / Bins),文件系统,处理器架构甚至云平台。应用程序开发人员还可以直接调用Kubernetes API(应用程序编程接口),并加强应用程序的集成,以提高性能和可管理性。

自愈

软件将不时遭受奇怪的故障,导致功能瘫痪和系统失败。然而,这些陷阱将使您成为可靠性困境的牺牲品。但不要害怕:K8s能够定期监控您的完整基础设施(容器,节点,Pod,网络,硬件,操作系统)。如果软件错误导致系统的某些部分崩溃,K8S将立即重启应用程序。如果错误是由于硬件故障引起的,K8S将检测到它并将应用程序分布在多个pod中。在这两种情况下,应用程序停机时间都减少到最低限度。

云服务

因为K8S很受欢迎,你不需要自己处理内部实现,也不需要在硬件上花钱。事实上,您可以通过注册托管的K8解决方案来外包这个过程:PaaS(平台即服务)或IaaS(基础架构即服务)。您的角色是专注于通过您的应用提供最佳用户体验,将负载平衡和云服务留给Kubernetes。

小结

如您所见,顺利部署和运行应用程序可能是一项严峻的挑战。值得庆幸的是,Kubernetes等解决方案使得容器化应用程序的部署,扩展和管理变得更加容易。投入Kubernetes的其他优势,为什么这么多企业选择它就不奇怪了。


点击查看更多内容
“小礼物走一走,来慕课关注我”
赞赏支持
Tony Bai 说 去围观
Tony Bai,智能网联汽车独角兽公司先行研发部负责人,Go语言专家,资深架构师,《Go语言精进之路》作者。
评论

作者其他优质文章

正在加载中
全栈工程师
手记
粉丝
7757
获赞与收藏
477

关注作者,订阅最新文章

阅读免费教程

感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消