目录

引子

OpenStack 的诞生

OpenStack 是什么

Docker 的出现

K8S(Kubernetes) - 为 Docker 而生

推荐阅读


引子


作为一名程序员,设计程序架构、优化算法已经是一件很头疼的事了,然而,还有更让人烦躁的,那就是环境配置,想必各位同学们都深有体会。每个人的电脑都不一样,不管是软件还是硬件,或者是要依赖的环境,因此同样的安装流程在别人那里是好使的,在你这就处处 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 的安装部署非常快速,兼容性和适用性极强,而且便宜,一直很受市场欢迎。

Docker 的出现


按理说,Host 虚拟化出来了许多 VM,云上资源粒度划分已经很细了,也已经能做到资源的充分利用。然而,虚拟机的性能开销很严重。主要由于两点原因:一是虚拟层的引入;其二是因为 VM 的操作系统和 Host 的操作系统不一致,导致与操作系统有关的性能优化手段不能应用到所有的 VM 上。如果说虚拟机技术开启了云计算时代,那么 Docker 容器作为下一代虚拟化技术,将云计算推向了高潮。

  • 虚拟机和 Docker 的区别

首先,你要明确一点:Docker 容器不是虚拟机,但你可以把它近似看成一种轻量级的虚拟机。

一个 VM 里可以创建多个 Docker 容器。

Docker 比虚拟机更节省内存,启动更快,数量级上”虚拟机需要数分钟启动,而 Docker 只需要50毫秒”,这是因为 Docker 是利用宿主(VM)的系统内核。

K8S - 为 Docker 而生


当只需要一个 容器时,你可以手工部署,没有问题。然而在集群里要部署海量的 Docker,还要管理它们时,手工显然不现实了,于是 Kubernetes 这种更高维度的容器编排工具应运而生。Kubernetes 简称 K8S, 它抽象了所有物理机资源,将所有云主机抽象成一个资源池,而这个池子里装的就是一个个容器。容器就是孩子,而 K8S 就是这些孩子们的亲妈,为啥这么说呢?比如,应用程序发现 CPU 不够用时,K8S 就将其调度到另一台 CPU 足够用的机器上,内存不满足要求时,K8S就会帮忙寻找一台有足够内存的机器,并在上面创建对应的容器。更重要的是,一旦应用层序由于某些原因挂掉了, K8S 还会帮它自动迁移重启, 照顾得简直无微不至。而开发者只关心自己的代码,容灾备份、服务资源扩充则由 K8S 保证。

说到这里,你可能认为”K8S“的调度单位是一个容器(container)。事实上,K8S 调度的基本单位为 pod, 一个 pod 表示一个或多个容器。引用一本书里所说“之所以没有使用容器作为调度单位,是因为单一的容器没有构成服务的概念;例如 Web 应用做了前后端分离,需要一个 NodeJS 与 Tomcat 才能组成一个完整的服务,这样就需要部署两个容器来实现一个完整的服务,虽然也可以把他们都放到一个容器里,但这显然违反了一个容器即一个进程的核心思想 --《Service Mesh实战 - 用 istio软负载实现服务网格》

推荐阅读


  1. 《容器(container)技术之发展简史》
  2. 《(一)云计算OpenStack介绍》
  3. 《OpenStack概念结构与逻辑架构:Conceptual architecture and Logical architecture》
  4. 《OpenStack Glance(镜像服务)基础架构:Basic architecture》
  5. 《在CentOS 7上安装使用Kubernetes:管理云平台多个主机上的容器化应用》
  6. 《Linux环境使用命名空间编写一个简单的容器应用程序:namespace,container,cgroups》
  7. 《kubernetes(K8s):管理云平台中多个主机上的容器化的应用》
  8. 《Docker 容器使用》
  9. 《用QEMU构建嵌入式LINUX系统》
  10. 《Linux虚拟化KVM-Qemu分析(一)》
  11. 《Linux虚拟化KVM-Qemu分析(二)之ARMv8虚拟化》
  12. 《Linux虚拟化KVM-Qemu分析(三)之KVM源码(1)》
  13. 《Linux虚拟化KVM-Qemu分析(四)之CPU虚拟化(2)》
  14. 《在CentOS上进行虚拟化:QEMU、Xen、KVM、LibVirt、oVirt》
  15. 《ARM SMMU原理与IOMMU技术(“VT-d” DMA、I/O虚拟化、内存虚拟化)》
  16. 《OpenVZ,Xen,KVM等:虚拟化解决方案》
  17. 《KVM Virtio: An I/O virtualization framework for Linux(Linux虚拟IO框架)》
  18. 《kubernetes(K8s):管理云平台中多个主机上的容器化的应用》
  19. 《eBPF.io eBPF文档:扩展的数据包过滤器(BPF)》https://rtoax.blog.csdn.net/article/details/108990364
  20. 介绍Calico eBPF数据平面》https://www.projectcalico.org/introducing-the-calico-ebpf-dataplane/ 2020年2月25日
  21. 《在CentOS 7上安装使用Kubernetes:管理云平台多个主机上的容器化应用》
  22. 《介绍Calico eBPF数据平面:Linux内核网络、安全性和跟踪(Kubernetes、kube-proxy)》
  23. 《Kubernetes复杂吗?Cube-新的容器管理服务产品》

原文:《浅谈云计算:OpenStack、Docker、K8S的演进史》

云计算:OpenStack、Docker、K8S(Kubernetes容器编排工具)的演进史 | 附推荐阅读相关推荐

  1. NOMAD 与 KUBERNETES:比较容器编排工具——翻译版

    原文地址:https://www.imaginarycloud.com/blog/nomad-vs-kubernetes/?fbclid=IwAR1VgUJ4ikO30sDaZv7c9WYaVSPPo ...

  2. 容器编排工具—Kubernetes

    概述 Kubernetes由google通过go语言基于borg(google内部自研发自用的资源管理器,根据当时K8s面世的时间,brog已在google内部运行长达10年以上)进行重写的容器资源管 ...

  3. docker Swarm容器编排工具

    目录 一.什么是docker swarm 二.Docker Swarm 基本结构 三.Swarm的几个关键概念 四.swarm的调度策略 五.Swarm Cluster模式特性 六.搭建docker ...

  4. 安装容器编排工具 Docker Compose

    安装容器编排工具 Docker Compose  curl -L https://get.daocloud.io/docker/compose/releases/download/1.22.0/doc ...

  5. Kubernetes容器编排引擎

    什么是容器编排引擎 基于容器的应用一般会采用微服务架构,在这种架构下,应用被划分为不同的组件,并以服务的形式运行在各自的容器中,通过API对外提供服务,为了保证应用的高可用,每个组件可能会运行多个相同 ...

  6. 容器编排工具与 Kuberneters

    1. 什么是容器编排 试想这样的场景: 我们使用 Docker 运行一个服务应用,当负载增加,单一实例无法满足需要时,我们就得增加这个实例部署的数量,并配置容器间负载均衡,而所有这些操作都需要我们手动 ...

  7. 再见了VMware、Docker,这个免费开源的容器编排工具不香吗?

    身为让容器应用实现大规模工业生产的一大功臣,过去几年,Kubernetes  势头迅猛,BAT.京东.美团.字节都走上了全域容器化部署以及云原生架构的康庄大道. 美团技术团队云原生演进之路 如果你认为 ...

  8. 【Docker1】指令,docker-compose,Dockerfile,容器编排工具k8s

    文章目录 1.pull/image,run/ps(进程),exec/commit 2.save/load 3.docker-compose 3.1 link 3.2 docker-compose .y ...

  9. 云计算的新界面—Kubernetes容器技术

    简介:可以说,以 Kubernetes 为代表的容器技术正成为云计算新界面.容器提供了应用分发和交付标准,将应用与底层运行环境进行解耦.Kubernetes 作为资源调度和编排的标准,屏蔽底层架构差异 ...

最新文章

  1. iOS 2D绘图详解(Quartz 2D)之路径(点,直线,虚线,曲线,圆弧,椭圆,矩形)
  2. jsp点击按钮弹出输入框_按键精灵UI界面的输入框原来是这样使用的
  3. SQL比oracle卡,对比Oracle与SQL Server
  4. chart绑定mysql数据源_MSChart图表之Chart组件 学习一篇(5个主要属性+数据源绑定)...
  5. 如何使用代码创建service contract并实现partner determination
  6. 一个想法:成立草根技术联盟对开发人员进行技术定级解决企业员工招聘难问题!...
  7. 对象的初始状态(构造函数)
  8. 【Java】总结Integer类的API
  9. 35 MM配置-采购-采购订单-设置价格差异的容差限制
  10. Angular学习笔记第一节 基本概念
  11. Tensorflow训练神经网络
  12. Qt入门(1)——初识Qt
  13. 8086汇编复习2 - 使用emu8086
  14. 骨龄测试软件app_有哪些特别好用的 app 测试工具?
  15. 计算机模块中的画板英文,电脑中将画板导入Mockingbot的方法
  16. ubuntu 16.04 通过wine安装Kindle for pc 中文无乱码
  17. 如何搭建一个在线教育平台
  18. Discourse 论坛激活邮件问题
  19. 做设计这么久,UED/UXD、IXD、GUI到底是什么?你分清了吗
  20. C#普通计算器与科学计算器

热门文章

  1. oracle 解释计划权限,ACL的使用:主机权限规划管理--Oracle脚本
  2. luogu3413 萌数
  3. 【全网最全的博客美化系列教程】08.自定义地址栏Logo
  4. Python3.6连接mysql(一)
  5. 关于VerifyRenderingInServerForm方法的思考(转)
  6. 案例:演示exception对象的使用
  7. C语言求正弦的泰勒展开,用泰勒公式求sin(x)的近似值
  8. ad9生成坐标文件_提高效率 | 教你批量提取CAD坐标的小技巧
  9. java esclient query_elasticsearch 口水篇(4)java客户端 - 原生esClient
  10. hibernate mysql 注解_【译】Spring 4 + Hibernate 4 + Mysql + Maven集成例子(注解 + XML)