Kuberneter 是一个应用编排器,主要用于容器化云原生微服务应用进行编排。

上面这段定义让刚接触 Kubernetes 的程序员感觉晦涩难懂,那我们就通过拆分上面这句话中的术语,来理解Kuberneter 相关概念吧。

编排器

部署、管理应用程序的系统,能动态地响应变化,例如以下部分功能。

  • 回滚。

  • 滚动升级。

  • 故障自愈。

  • 自动扩缩容。

自动完成以上所有任务。需要人工最初进行一些配置,就可以一劳永逸。

容器化应用

运行在容器中的应用程序(应用程序后面简称为程序)。以前,程序运行在物理机或虚拟机中。容器,是现代程序的运行方式。

云原生应用

被设计来满足现代业务需求(回滚、滚动升级、故障自愈、自动扩缩容等),并且在 Kuberneter 之上的应用。

微服务应用

小而专的服务组件,通过通信组成一套完整的业务系统。微服务团队可以有自己的发布节奏,并且独立扩缩容。这种构建方式是云原生用于的重要特点。

小结

通过以上介绍,再来回顾一下前面那句各种晦涩难懂的术语组成的定义。Kuberneter 是部署、管理应用程序的系统(应用编排器),主要用于运行容器形式的应用程序(容器化应用),这些应用程序的构建方式(云原生微服务)使它们能够实现回滚、滚动升级、故障自愈、自动扩缩容等。

Kubernetes 的名字来源

Kubernetes 一词源于希腊语“舵手”。

Kubernetes 的诞生

AWS 通过云计算产品,改变了世界。许多公司都在尝试追赶 AWS 的步伐。Google 就是之一。

Google 将容器用于扩缩容方面有丰富的管理经验,每周都可能运行数十亿个容器,内部有专门的一套系统 Brog。在 2014 年,Google 内部系统升级迭代,从 Brog 切换到 Omega,按照惯例会发表公开论文。但是 Google 之前发表的论文 MapReduce 吃过亏,被 Yahoo 开发的 Hadoop 抢占了市场,所以 Google 决定发表论文的同事,把 C++ 开发的 Brog 系统用 Go 语言重新并开源,创建了全新的平台,名为 Kubernetes。同年,Kubernetes 被捐赠给了 CNCF 云原生计算基金会。

需要明确一点,Kubernetes 并非 Brog 和 Omega 的开源版本。

图片来自网络

Kubernetes 和 Docker 的关系

互补。Docker 应用打包、测试、交付。Kubernetes 基于 Docker 的产物,进行编排、运行。

例如现在有 1 个集群,3 个节点。这些节点,都以 Docker 作为容器运行时,Docker 是更偏向底层的技术。Kubernetes 更偏向上层的技术 ,它实现了对容器运行时的抽象,抽象的目的是兼容底层容器运行时(容器进行时技术不仅有 Docker,还有 containerd、kata 等,无论哪种容器运行时,Kubernetes 层面的操作都是一样的)以及解耦,同时还提供了一套容器运行时的标准。抽象的产物是容器运行时接口 CRI。

图片来自网络

Kubernetes 和 Docker Swarm 对比

Kubernetes 的发展和市场份额大于 Docker Swarm。

Kubernetes 为何被称为云操作系统

什么是 OS,例如在物理服务器上,OS 指的是 Linux、Ubuntu 等,它用于对物理服务器硬件资源的抽象,并对进程进行调度等等。那么 Kubernetes 就是对云上资源的抽象,并对云原生微服务应用进行调度。Kubernetes 可以对公有云、私有云进行统一抽象,并实现对负载的无缝迁移和均衡,不会永远被绑定在某一个特定的云上。

OS ,能屏蔽底层的复杂性,例如 Linux ,我们不用关心程序运行在哪个 CPU 核心上,OS 已经搞定了。Kubernetes 对云和应用程序进行了类似的管理,无须明确对应用程序在哪个节点或存储卷上进行硬编程。

一个常见的例子理解 Kubernetes

寄、收快递的过程。

发件人将货物按照快递公司的标准打包,提供基本信息(收货地址等),然后交给快递小哥。其他事情,无需发件人操心了,例如快递用什么交通工具运输、司机走哪条高速等等。快递公司同时提供物流查询、截断快递等服务。重点在于,快递公司仅需要发件人提供基本信息。

Kubernetes 也是类似的,将应用程序打包成容器,声明运行方式,交给 Kubernetes 即可,同时它提供了丰富的工具和 API 来控制、观测运行在平台之上的应用程序。

总结

再次劝君尝试一下 Kubernetes。

参考文献

《Kubernetes 入门实战课》,罗剑锋

《Kubernetes 修炼手册》,Nigel Poulton

其他

封面与文中图片来自网络。