2.3 Kubernetes 解决了什么问题

Kubernetes 项目最主要的设计思想是,从更宏观的角度,以统一的方式来定义任务之间的各种关系,更甚至我们可以运用 Kubernetes 扩展能力灵活的自定义任务之间的关系。

比如,Kubernetes 项目对容器间的交互关系进行了分类,首先总结出了一类非常常见的“紧密交互”的关系,即:这些应用之间需要直接通过本地文件进行信息交换。

在常规环境下,这些应用往往会被直接部署在同一台机器上,通过 Localhost 通信,通过本地磁盘上的文件进行交互。而在 Kubernetes 项目中,这些容器则会被划分为一个“Pod”,Pod 里的容器共享同一个 Network Namespace、同一组数据卷,从而达到高效率交换信息的目的。

Pod 是 Kubernetes 项目中最基础的一个对象,下一章中我会重中想你介绍 Pod。

而对于另外一种更为常见的需求,比如 Web 应用与数据库之间的访问关系,Kubernetes 项目则提供了一种叫作“Service”的服务。像这样的两个应用,往往故意不部署在同一台机器上,这样即使 Web 应用所在的机器宕机了,数据库也完全不受影响。可是,我们知道,对于一个容器来说,它的 IP 地址等信息不是固定的,那么 Web 应用又怎么找到数据库容器的 Pod 呢?

所以,Kubernetes 项目的做法是给 Pod 绑定一个 Service 服务,而 Service 服务声明的 IP 地址等信息是“终生不变”的。这个Service 服务的主要作用,就是作为 Pod 的代理入口,从而代替 Pod 对外暴露一个固定的网络地址。

除了 Pod、Service 这些基本资源外,Kubernetes 还为我们提供了 Deployment、StatefulSet、Job 等扩展资源,有了这些资源我们就可以轻松的编排我们的服务了,通过这些资源,Kubernetes 为我们提供了应用的水平扩展、滚动升级、自动扩缩容能力,为服务提供了负责均衡、服务监控、服务发现能力。通过这些高级功能以及其灵活的扩展能力使 Kubernetes 逐渐成为了容器编排领域的翘楚。