K8S 的发展历程

今天看到一篇很好的技术文章,从虚拟化技术的变迁过程,理解 K8S 技术的价值。为了理解现今 K8S 为什么出现,作者从最开始 Web 应用的典型架构开始,逐步介绍了一次次技术升级和变革的历程和原因,以及带来的变化。最后导出了 K8S 的出现和解释了 K8S 的价值。下面我们从头开始介绍。(注意这篇文章只是原文的一个复述,不是原文的翻译,不保证与原文严格一致,文末附有原文链接,请自行阅读英文原文。)

虚拟化技术出现之前

早期,还没有出现各种虚拟化技术,一台实体计算机,只安装一个操作系统,如果我们构建一个典型的 Web 应用,会有一个三层的架构。包含 App 层,可能是一个动态的网站,然后是 Web 服务器层,然后是数据库层。这些层次被部署在一台实体机上面。

典型的三层应用架构

这样的架构对于标准的三层架构的服务来说,能够非常稳定地支持,但是对于机器的资源利用来说,做不到最优化。其实,就算到了现今,仍然有不少公司的网站服务采用这样的架构。对于一个中小的网站来说,完全够用了。

当一个应用的容量开始增长的时候,要进行扩容,在架构不变的情况下,只能是多部署几套。部署的成本会比较高,都需要独立的服务器。

应用级虚拟化

为了能够解决资源利用率的问题,最先出现的虚拟化技术,是应用级虚拟化。比如我们熟悉的 Apache 服务器,里面就有 Virtual Host 这样的配置项。其实从我个人开始接触 Web 的时候,Apache 就已经是支持 Virtual Host 的了。至今仍然是比较主流的网站部署方式。网站的架构图会变成:

应用级虚拟化:虚拟主机

数据库因为其特点,本来就可以多个数据库共享一个实例,再加上 Web 服务器的虚拟主机,就可以实现在一台机器上部署多份应用。这种部署方式,提高了部署的密度,使得一台机器上的服务,可以在需要的时候使用更多的资源,实现了资源利用率的提高。但是,这种改善使得架构的复杂度变高。当需要扩展的时候,增加了部署的复杂度。

操作系统虚拟化

后来,出现了虚拟机技术。通过一层封装,对上层完全透明的情况下,实现对硬件资源的虚拟化。这种方式,可以认为是前面两种优势的综合。既可以保持应用的简单,也可以保证对资源的利用。

虚拟机

从图里可以看到,是在实体的硬件上面,增加了虚拟的计算机。这样可以对三层架构完全透明的情况下实现资源的复用。

显然,除了像图里那样部署最简单的独占硬件式的三层架构,也可以在虚拟机上使用虚拟主机那样的架构,非常的灵活。不过,因为模拟了一层 OS ,所以损耗也相应上升。部署密度介于前两种方式之间。但是架构方面的复杂度得意下降。

容器

随着服务的概念越来越深入人心,应用架构从简单的三层架构,渐渐向服务化演进。越来越多的单一功能服务出现了。然后,另一种内核技术 Linux Cgroup 的应用出现了,通过内核特性,实现了容器的概念。

容器化

K8S

为了简化微服务的部署扩容等复杂的痛点,云原生架构的一种实践,就是 K8S 是目前的事实标准。

总结

以上几种谈到的方式的矩阵

附录

原文链接:https://blog.britesnow.com/understanding-kubernetes-value-867c163d5ed2