继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

入门:Kubernetes是如何成为今天的样子,它是什么,为什么你应该关心它

tonybai
关注TA
已关注
手记 168
粉丝 7768
获赞 488

当我着手为进行一个企业级Kubernetes平台的市场营销时,我需要围绕Kubernetes进行学习。我在互联网上阅读了一些文章,与我们的技术团队做过交谈,并在某些时候理解了基本概念。但是,我并没有真正全面了解情况。我意识到我需要寻早出路。大多数文章和技术人员都是从非技术人员通常没有的背景假设开始的。所以,我读了一本计算机科学导论,然后继续研究分布式系统,哦,天啊,终于来到了我的aha时刻!(译注:aha时刻:眼前一亮的时刻,这里指作者突然茅塞顿开了)。

最终,我了解新堆栈构建的核心概念是如此具有启发性,我想与所有那些努力了解这种开源技术的人分享我新发现的见解和它技术的革命性。

让我从理解Kubernetes来自哪里所需的基本概念开始:背景。对于技术人员来说,这可能听起来非常简单,而且应该如此。目标是提供简化的概述以了解全局。我将从一台计算机开始,转移到虚拟机,然后简要讨论分布式应用程序。如果您已经熟悉这些概念,请随时跳转到让你感到新鲜的功能介绍段落。

裸机

图片描述

计算机由硬件组成 - 主要是中央处理单元(CPU),内存和存储 - 运行不同的应用程序或程序。操作系统(OS)是位于硬件之上并管理这些资源的软件。操作系统上方是应用程序(例如Outlook或笔记本电脑上的Microsoft堆栈)。操作系统会安排每个应用程序访问哪些资源,确保每个应用程序都能够顺利运行(而Outlook和Word可能会感觉它们同时运行,但它们不会。信不信由你,您的计算机无法执行多任务。程序运行一个时间间隔很快,但它们似乎同时运行 - 那是OS魔术!)。应用程序无视硬件,只与操作系统交互。这个原则叫做抽象:在两个其他层(硬件和应用程序)之间调解(OS)的层。应用程序无需了解硬件,因为操作系统可以管理所有内容。

在虚拟化出现之前,无法在同一台计算机上隔离应用程序。运行程序的机器通常被称为服务器,它为另一台机器上执行的程序提供服务(例如,您的Gmail桌面应用程序请求从Google的某个服务器发送和接收电子邮件)。在处理任务关键型应用程序时,公司通常会为每台服务器安装一个应用程序以避免因一个应用程序崩溃而拖累使用它的另一个应用程序的情况。每台服务器运行一个应用程序是很昂贵的,因为每个服务器必须具有应用程序在其峰值期间可能达到的最大资源容量,即使它仅在百分之一的时间内达到该容量 - 计算资源的低效使用。像这样的机器(没有虚拟机)被称为裸机。

多应用程序共享主机可优化资源利用率。由于所有应用程序不太可能同时达到峰值,因此应用程序可以共享峰值时间容量,从而显着减少资源需求。虚拟化正是通过消除一个应用程序崩溃和影响共处应用程序的风险而实现的。

虚拟机

图片描述

虚拟机(VM)是“包装”应用程序的代码,它模拟硬件的行为。VM内部运行的代码认为VM是一台独立的计算机,因此称为“虚拟机”。就像物理机一样,VM需要操作系统。在VM内部运行的OS称为客户OS,而真实机器上的OS称为主机OS。

虚拟机提供的隔离让共处一台主机的多个应用程序之间互不影响,现在可以在单个服务器上运行多个应用程序了,从而实现更高效的资源利用 - 这是当时的真正革命。

从应用程序的角度来看,在VM或真实物理机器上运行之间没有区别。但是,从系统管理员的角度来看,VM更加方便,因为添加或删除VM非常容易,简化了日常的基础架构管理。

大型企业应用和分布式系统

图片描述

企业应用程序可能非常庞大,并且通常需要比单个机器可以处理的更多计算容量。也可能需要同时运行多个程序的并行计算。为了实现这一点,通过形成分布式应用/系统的网络连接多台机器。分布式系统的两个主要特征是:

(1)自主虚拟或物理机器的集合,
(2) 其作为一个单一连贯系统呈现给最终用户(可以是人或应用程序)。

一组协同工作的机器形成一个集群; 每台机器称为节点。为了实现共同目标的集群,节点必须通信或“交换消息”。通过网络,交换数据,给出或接受命令,提供状态更新等。

这里的关键概念是集群或分布式系统成为一个功能强大的机器,即使节点可能不一定位于同一物理位置。

除非我们处理单片应用程序(通常是构建为单个实体的旧应用程序),否则这些大型分布式应用程序是模块化的,并分解为放置在VM中的多个组件。这样可以简化更新,修复和发布。这也意味着如果一个组件崩溃,整个系统不一定会崩溃。

容器:新的轻量级虚拟机

图片描述

容器是虚拟化发展的下一步。与需要客户操作系统消耗额外资源的虚拟机不同,容器更轻量级。这意味着您可以在一台机器上部署比VM更多的容器 - 再次显著提高效率。

容器的另一个好处是它们是可移植的。可移植性意味着它们可以在任何环境之间工作,并且可以在任何环境之间移动(例如,将应用程序从数据中心迁移到云),而不会影响应用程序。应用程序所需的一切都在容器中,使其完全独立于环境 - 这是IT的另一个巨大发展。

另一方面,在使用VM时,仍然存在基础架构依赖性。不同的云或数据中心具有不同的虚拟化工具。这意味着我不能只使用驻留在本地的VM并将其移动到使用自己的虚拟化技术的Amazon Cloud。移动应用程序需要将其放入特定环境的VM以及进一步的配置和测试。这带来了额外的风险,必须仔细规划和准备。如果您迁移容器,则无需这一切,为公司节省大量资源。

微服务

微服务是分解为更小组件的应用程序。每个微组件都称为服务 - 因此是微服务。更多组件意味着需要更多VM或容器。容器需要更少资源的事实使得微服务对于许多组织来说是可行的,这就是为什么我们现在对它们的了解如此之多。

放入容器中,每个微服务彼此隔离。为什么这有益?嗯,独立组件越小,就越容易构建,测试,部署,调试和修复。显然,在几行代码中找到一个错误要比找几百个错误容易得多。由于它们是孤立的,因此如果新功能或更新证明存在问题,则更容易回滚。但微观服务应该如何被视为微观?定义它的一种方法是可以在一周内构建,测试和部署的代码。

容器编排

图片描述

如果具有数百个VM的遗留应用程序迁移到容器,则它现在可能由数千个容器组成。可以想象,手动管理它们是不可能的。这就是容器编排工具(如Kubernetes)的用武之地。编排器确保正确数量的容器启动并运行,并在必要时进行干预以修复它。它使许多其他非常繁琐、无法扩展的手工工作自动化。容器编排器跨越整个集群并抽象出底层资源(集群中的硬件,如CPU,内存和存储)。

虽然市场上有一些容器编排器(Docker Swarm是一个众所周知的例子),但Kubernetes赢得了容器编排器的战争,并且在2018年所有主要的云提供商都采用了它。

Kubernetes进入世界舞台

Kubernetes最初由谷歌开发并于2014年捐赠给开源社区,是目前最热门的开源项目之一。如果你正在读这篇文章,你可能知道它很大,但究竟是什么呢?

理解Kubernetes的一种方式是将其视为某种类型的数据中心或集群操作系统。如上所述,群集只不过是在内部运行,在云端,物理和/或虚拟机中运行的计算机集合(是的!您可以混合搭配),它通过网络连接,显示为单个大型计算机用户。集群资源由Kubernetes管理,就像您的操作系统管理笔记本电脑的资源一样。开发人员不必担心他们的应用程序应该使用哪些CPU或内存,Kubernetes负责这一点。

集群组件

集群由master节点和多个worker节点组成。所有节点都是Linux主机(在Linux上运行的机器),尽管最近Kubernetes也开始支持Windows节点。实际的容器化应用程序在工作节点上运行。每个容器都放在一个pod中 - pod是一个类似沙箱的环境,除了托管和分组容器外,它不起主要作用。要伸缩应用程序,可以使用各自的pod(而不仅仅是容器)来扩展容器。

master是集群的大脑。这是所有控制和调度决策的地方。它确保应用程序pod按照声明状态通过监视循环(下面更多)定义并运行。除系统应用程序外,master服务器上不运行应用程序。它的功能完全集中在监视和管理集群上。

图片描述

Kubernetes的好处

Kubernetes带来了许多强大的功能,最具革命性的是:

  • 声明式的状态 - Kubernetes的核心是声明性模型。开发人员声明他们的应用程序所需的状态(例如,他们的应用程序需要配置等多少pod副本)和Kubernetes实现监视循环以确保集群不会偏离所需状态。这是一种非常强大的功能,可实现自我修复和缩放。

  • 自我修复 - 该特性基于声明性模型,Kubernetes确保集群始终与声明状态匹配。意味着当存在差异时它会自愈。如果Kubernetes检测到偏差,Kubernetes会启动并修复它(例如,如果一个pod关闭,将部署一个新的以匹配所需的状态)。

  • 自动扩展 - 当容量达到峰值时,Kubernetes能够自动扩展(使用更多节点和/或pod)(例如,周五晚上观看Netflix的人越多,Netflix的服务器需要更多的计算资源),在一个顶峰之后再次缩容。这是一项巨大的资产,特别是在现代云中,成本基于所消耗的资源。

Kubernetes很棒,但…

Kubernetes真的很难。专业知识很难找到,它不是一个成熟的,随时可用的解决方案。Kubernetes和容器只是这个难题的一部分。要在生产中运行Kubernetes上的应用程序,企业需要整个技术堆栈。您需要一些用于记录和监视(收集和分析应用程序指标以了解一切进展顺利),基于角色的访问控制(通常缩写为RBAC)(以确保只有那些应该访问群集的人),灾难恢复等等。配置和调优这些不同的技术,使它们与Kubernetes一起使用并不是一件容易的事,需要大量的资源 - 时间,金钱和高度专业化的技能。此外,Kubernetes的季度发布时间表意味着,公司必须跟上并定期更新。

Kubernetes的复杂性催生了许多Kubernetes解决方案。只需访问KubeCon-官方Kubernetes的发布会,你将会看到一个完整的秀场上充满Kubernetes解决方案-都试图简化和降低Kubernetes采纳的门槛。虽然有些涉及一个特定领域(例如Portworx,Linkered),但其他领域则关注更广泛的领域,例如安全性,合规性和运营(例如Kublr)。

业务影响

将应用程序分解为微服务已经允许今天的大型云计算企业(例如亚马逊,谷歌,优步)迅速推出新功能和更新,或者如果它们不能按计划工作就回滚。这为他们提供了快速适应的敏捷性,超越了更传统的竞争对手。这种趋势给更多传统组织带来了巨大压力,因为他们的变化速度明显变慢。目前的数字化转型趋势是由这些技术为其采用者提供的竞争优势所驱动的。随着越来越多的公司采用这些技术,组织也被迫采用这些技术,否则就有可能过时。

容器和Kubernetes彻底改变了公司今天的业务方式。软件正在为业务成功发挥越来越大的作用,这些技术使软件能够以不断增长的速度改进和适应市场需求。今天,IT不再是垂直对齐的部门; 它在整个组织中横向运行。每个部门都由软件支持,无论是新的数据分析工具,提供有关市场趋势的宝贵见解,还是可根据客户需求定制内容的AI平台,从而提高保留率。无论谁适应和发展得更快,都具有竞争优势。

我们也在这一趋势中。让我们将三个相关的流行语放入上下文:云原生,DevOps和数字转换 - 这一趋势的所有部分。所述云原生技术栈,也被称为新的技术栈,用于构建云本地应用程序。云本机应用程序定义为容器化,动态编排(又名Kubernetes)和面向微服务。在为云开发时,云原生堆栈不受云限制。如今,许多企业在本地部署容器和Kubernetes,有时甚至在密闭环境中(与外部世界完全隔离且没有连接的环境)。

  • DevOps是一种由云原生技术支持的方法,集成了开发,IT运营,质量保证和IT安全性。实施得当,它可以转化为更好的代码,降低成本以及更有动力的团队。然而,到达那里需要在组织内部进行巨大的文化转变。事实上,经验表明采用新堆栈更容易(而且这已经非常具有挑战性),而不是改变企业文化以接受这种根本不同的做事方式。

  • 数字化转型是描述整个趋势的更广泛术语。它指的是将组织转变为敏捷软件的过程 - 第一种方法来应对快速变化的技术发展 - 当今保持竞争力的必要条件。通过新堆栈和DevOps方法启用数字转换并使其更加高效和灵活。

我希望这为您提供了阅读和了解更多有关这个令人兴奋的领域的必要背景。我们目前正在目睹真正的IT革命,并了解正在发生的事情是非常令人兴奋的!如果这篇文章有用或者您有任何意见,请随时向我发推文。


打开App,阅读手记
“小礼物走一走,来慕课关注我”
赞赏支持
Tony Bai 说
去围观
Tony Bai,智能网联汽车独角兽公司先行研发部负责人,Go语言专家,资深架构师,《Go语言精进之路》作者。
发表评论
随时随地看视频慕课网APP