浅谈云计算:OpenStack、Docker、K8S的演进史

引子作为一名程序员 , 设计程序架构、优化算法已经是一件很头疼的事了 , 然而 , 还有更让人烦躁的 , 那就是环境配置 , 想必各位同学们都深有体会 。 每个人的电脑都不一样 , 不管是软件还是硬件 , 或者是要依赖的环境 , 因此同样的安装流程在别人那里是好使的 , 在你这就处处 bug , 在电脑 A 上能顺利安装 , 在电脑 B 上就遇到问题了 。 于是有人就想出了一个办法 , 大家何不把自己配置好的环境打包成镜像呢?当需要配置同样的环境时 , 就把别人的镜像拿过来 , 进入镜像之后 , 就进入了别人搭建好的环境 , 而我们只需要提供硬件支持即可 , 而这个镜像就是 Docker 容器 。 什么是镜像呢?简单来说 , 镜像就类似操作系统光盘介质 , docker 容器相当于通过光盘安装后的系统 。 通过光盘(镜像) , 我们能在不同机器上部署系统(容器) , 系统内的操作只会保留限制在当前的系统(容器)中 。 需要了解的是 , 像 docker 这样的容器有很多种 , 而 docker 只是其中之一 , 但它是最受欢迎的 , 也因此占据了大半的市场份额 。 其他容器还有 CoreOS rkt、Mesos、lxc 等 。
OpenStack 的诞生我们都知道 , 全球云市场被三大巨头垄断 , 分别是亚马逊(Amazon)、微软(MicroSoft)和 阿里巴巴(Alibaba) , 而亚马逊正是云计算的开山鼻祖 。
早在 2003 年 , Amazon 向客户推出了一项全新的业务——包括存储空间、计算能力等资源服务的 Web Service , 这就是大名鼎鼎的 AWS(Amazon Web Service) 。 说白了 , 就是给大家提供了远程电脑 , 上面配置了各种满足你需求的服务 , 你可以远程使用它 , 这就是云计算最早的形式 。 到了 2006 年 , 亚马逊又推出了一种配置更简单、方便的弹性计算云(Elastic Compute Cloud) , 又称 EC2。 而在同年的 8月9日 , Google首席执行官埃里克·施密特在搜索引擎大会上首次提出“云计算”(Cloud Computing)的概念 。 从此 , 云计算进入了高速发展阶段 。 时间转到了 2010 年 , 一家名叫 Rackspace 的公司 , 同样在做云主机和云储存服务 , 和 Amazon PK 了多年 , 但是在竞争中一直处于下风 。 最终 , 他们把云服务代码给开源了 。 随后 , NASA 也步后尘 , 开放了其在云领域多年的研究成果 , 并与 Rackspace 联手共同成立了一个开源项目 。 这个项目 , 就是 OpenStack , 也是云计算发展的里程碑 。
OpenStack 是什么现在的云上资源(计算、存储、网络等)都是以集群的形式存在 , 这些集群里的物理机(Host)可以放在一个机房里 , 也可以分布式放在各个地方 , 而一个 host 上又可以虚拟出多个虚拟机(VM) 。 关于虚拟化技术 , 可以参考我之前的文章 。 而 OpenStack 从一开始 , 就是为了云计算服务的 , 它就是一套软件 , 一套 IaaS 软件 , 用来管理集群里所有 Host(物理机)上的所有 VM(虚拟机) 。 什么是 IaaS?Infrastructure as a Service , 基础设施即服务 。 这里的关键字是“基础设施” , 也就是物理机 。 各大公司在 OpenStack 上进行了二次开发 , 形成了自己的 Iaas 软件 , 比如华为的 FusionSphere平台 和中兴的 TECS 平台 。 OpenStack 的安装部署非常快速 , 兼容性和适用性极强 , 而且便宜 , 一直很受市场欢迎 。
浅谈云计算:OpenStack、Docker、K8S的演进史文章插图
Docker 的出现按理说 , Host 虚拟化出来了许多 VM , 云上资源粒度划分已经很细了 , 也已经能做到资源的充分利用 。 然而 , 虚拟机的性能开销很严重 。 主要由于两点原因:一是虚拟层的引入;其二是因为 VM 的操作系统和 Host 的操作系统不一致 , 导致与操作系统有关的性能优化手段不能应用到所有的 VM 上 。 如果说虚拟机技术开启了云计算时代 , 那么 Docker 容器作为下一代虚拟化技术 , 将云计算推向了高潮 。

  • 虚拟机和 Docker 的区别

浅谈云计算:OpenStack、Docker、K8S的演进史文章插图
首先 , 你要明确一点:Docker 容器不是虚拟机 , 但你可以把它近似看成一种轻量级的虚拟机 。
一个 VM 里可以创建多个 Docker 容器 。
Docker 比虚拟机更节省内存 , 启动更快 , 数量级上”虚拟机需要数分钟启动 , 而 Docker 只需要50毫秒” , 这是因为 Docker 是利用宿主(VM)的系统内核 。
K8S - 为 Docker 而生当只需要一个 容器时 , 你可以手工部署 , 没有问题 。 然而在集群里要部署海量的 Docker , 还要管理它们时 , 手工显然不现实了 , 于是 Kubernetes 这种更高维度的容器编排工具应运而生 。 Kubernetes 简称 K8S ,它抽象了所有物理机资源 , 将所有云主机抽象成一个资源池 , 而这个池子里装的就是一个个容器 。 容器就是孩子 , 而 K8S 就是这些孩子们的亲妈 , 为啥这么说呢?比如 , 应用程序发现 CPU 不够用时 , K8S 就将其调度到另一台 CPU 足够用的机器上 , 内存不满足要求时 , K8S就会帮忙寻找一台有足够内存的机器 , 并在上面创建对应的容器 。 更重要的是 , 一旦应用层序由于某些原因挂掉了 ,K8S 还会帮它自动迁移重启 ,照顾得简直无微不至 。 而开发者只关心自己的代码 , 容灾备份、服务资源扩充则由 K8S 保证 。