跳到主要内容

01-kubernetes简介

kubernetes 是什么

本章的目标很简单: 以尽可能清晰形象的方式描述 Kubernetes。

Kubernetes的本质是云原生微服务应用程序的编排器。这么多时髦的名词啊!让我来给各位解释一下。

  • 什么是微服务
  • 什么是云原生
  • 什么是编排器

什么是微服务

在过去,我们构建和部署的是单体应用,这是一个术语,指的是一个应用程序的所有功能都被捆绑成一个大的单体应用。如果你看一下图 1.1,你会看到web前端、认证、日志、数据存储、报告系统紧密耦合在一个进程中,这意味着如果你想改变其中的一部分,可能就会影响全部模块。

举个简单的例子,如果你需要更新图 1.1 中应用程序的报告功能,你就必须关闭整个应用程序,整体服务会暂时不可用。这样的工作有巨大的风险和复杂性,通常必须在午夜完成,且有可能连累其他功能模块的小伙伴一起加班。

但是,单体应用程序的痛苦还不止于此。当你想对他们的某个部分进行扩缩容都意味着对整个应用进行扩缩容

微服务应用程序将每个功能都拆分成服务,每个服务都独立开发,独立部署,每个服务都可以独立更新和扩展。但是,它们仍然一起工作以创建完全相同的应用程序体验。

最常见的模式是将每个微服务作为自己的容器进行开发和部署。例如,一个用于web前端微服务的容器,一个用于身份验证微服务的容器,一个用于报告微服务的容器等等。从技术上讲,每个微服务通常都公开一个API,其他微服务通过调用接口来实现合作。

除了独立更新和扩展微服务的能力外,微服务设计模式还适合更小、更敏捷的开 发团队,可以更快地迭代功能。这是基于Jeff Bezos创造的两个披萨团队规则 即如果你不能用两个披萨养活一个开发团队,那么这个团队就太大了。 一般来说,2-8人的团队可以比更大的团队更灵活地沟通和合作。

然而,微服务并不全是青山和蓝天。微服务也可能是复杂的庞然大物,由不同的团队管理着许多微服务,这也会带来额外的复杂度,带来服务注册,熔断限流,链路追踪等新的挑战。

什么是云原生

云原生应用必须:

  • 按需扩展
  • 自愈
  • 支持滚动更新
  • 在任何有Kubernetes的地方运行

让我们花点时间来定义一下这些流行语的意思。

按需伸缩 是指应用程序和相关基础设施自动增长和收缩以满足当前需求的能力。例如,在线零售应用程序可能需要在特殊假期期间扩大基础设施和应用程序资源,然后在假期结束时缩减规模。如果配置正确,Kubernetes可以在需求增加时自动扩展应用程序和基础设施。当需求下降时,它也可以缩小规模。这不仅有助于企业更快地对意外变化时,它也降低了基础设施成本按比例缩小。

Kubernetes还可以自修复应用程序和单个微服务。这需要更多的Kubernetes知识,我们将在后面介绍。但是现在,当你将应用程序部署到Kubernetes时,你需要告诉Kubernetes它应该是什么样子:比如每个微服务有多少个实例,以及要连接到哪个网络。Kubernetes将其保存为所需状态,并监视应用程序以确保它始终符合所需状态。如果发生了变化,可能是微服务崩溃,Kubernetes会注意到这一点,并启动替换。这被称为自我修复

滚动更新是在不使应用系统脱机的情况下更新应用程序部分的能力,甚至可能在客户端没有注意到的情况下。它是现代永远在线的商业世界的游戏规则改变者,我们稍后将看到它的实际应用。

最后一点。云原生与公共云几乎没有任何关系。云原生应用程序可以在任何有Kubernetes的地方运行——AWS、Azure、Linode、本地数据中心或家里的树莓派集群。

总而言之,云原生应用具有弹性、可自动扩展、无需停机即可更新。它们也可以在任何有Kubernetes的地方运行,甚至在本地环境中。

什么是编排器

我打个比方,管弦乐队是一群演奏不同乐器的音乐家。每个音乐家和乐器都可以是不同的,在音乐开始时扮演不同的角色。有小提琴、大提琴、竖琴、双簧管、长笛、单簧管、小号、长号、鼓,甚至三角形。

如图 1.3 所示,每个人都是一个独立的个体,没有被分配一个角色 —— 这是一团乱,架子鼓甚至是颠倒的。

一名指挥带着乐谱和指挥棒走过来,执行命令。她在舞台前面把弦乐组合在一起,木管在中间,铜管在后面,打击乐在后面。她还指导一切讲述每个组什么时候演奏,演奏的声音有多大或多小,演奏的速度有多快。

云原生微服务应用程序就像管弦乐队一样。每个云原生应用都是由许多做不同事情的小微服务组成的。一些处理web请求,一些验证会话,一些做日志记录,一些保存数据,一些生成报告。但就像管弦乐队一样,它们需要有人或有东西来把它们组织成一个有用的应用程序。

总之,像Kubernetes这样的编排器将不同的微服务组合在一起,并将它们组织成一个有用的应用程序。Kubernetes还提供和管理云原生特性,如扩展、自我修复和更新。