kubernetes|图文并茂!带你深度解析Kubernetes( 三 )


而且 , 早期Cloud Foundry主要是针对单一Web应用的管理 , 对分布式应用所需的各项能力均未涉及 , 例如:服务发现、弹性扩缩等 。
(五)DockerDocker公司的前身是dotCloud , 它是2010年成立 , 提供Paas服务的平台 。 但当时Cloud Foundry做的相对完善和开放 , 2012年底dotClound濒临倒闭 , 创始人决定把内部的打包平台开源出去 。 因此 , 2013年3月dotCloud公司在github平台上开源了其内部的容器项目Docker 。 Github开源之后 , 受到了业界的热烈追捧 , 从而Docker大火 。 公司后来也改名为Docker 。
Docker的成功 , 主要是通过镜像完美解决了开发、测试、生产环境不一致的问题 。 它的口号是:Build、Shipand Run any App、Anywhere , 即一处构建 , 到处运行 。
Docker的核心技术有三个:NameSpaces做视图隔离、Cgroups做资源限制 , UnionFS联合文件系统 , 统一mount 。 通俗理解:NameSpaces、Cgroups通给进程设置属性 , 实现进程的隔离与限制 , UnionFS给进程构造文件系统 。 这三项技术均有linux内核提供 , Docker本身并没有创造新的技术 。
但是Docker创造性的通过镜像整体打包了应用的依赖环境 , 包括:操作系统文件、中间依赖层、APP 。

  • 整体打包之后 , 镜像变大 , 又该如何优化?
Docker通过镜像分层复用的方式进行了优化 。 共用只读层 , 节省存储空间 , 提高镜像推送、拉取效率 , 镜像的操作是增量式 。
  • 当分层之后 , 在宿主机上如何合并多个层?
利用UnionFS实现合并 , 多个只读层加一个可写层mount成一个目录 。 并且上面的层会覆盖下面的层 , 当对底层的只读层修改时会采用写时复制策略(copy-on-write) 。 写时复制的含义:当另一个层第一次需要写入该文件时(在构建镜像或运行容器时) , 该文件会被复制到该读写层并被修改 。 该机制大大减少了容器的启动时间(启动时新建的可写层只有很少的文件写入) , 但容器运行后每次第一次修改的文件都需要先将整个文件复制到container layer中 。

如下图所示 , Docker相比于虚拟机操作系统级的资源隔离 , 实现了进程级资源隔离 , 极大提升了资源利用率 。 具备以下特点:
  • 进程级隔离 , 更轻量
  • 更低消耗系统资源
  • 更快速启动
  • 更快交付与部署

(六)容器编排当Docker解决了应用打包的问题后 , PaaS上应用大规模部署与管理的问题愈发突出 。 此时 , 业内明白:容器本身没有“价值” , 有价值的是容器编排 。
容器编排(Orchestration):对Docker及容器进行更高级更灵活的管理 , 按照用户的意愿和整个系统的规则 , 完全自动化的处理好容器之间的各种关系(对象之间的关系远重要于对象本身) 。
容器技术做为底层基础技术 , 只能用来创建和启动容器的小工具 , 最终只能充当平台项目的“幕后英雄” 。 用户最终部署的还是他们的网站、服务、数据库 , 甚至是云计算业务 。 这就需要一个真正的PaaS平台 , 让用户把自己的容器应用部署在此之上 。
在以上的历史背景之下 , 2014年左右 , Docker、Mesos、Google相继发布自己的PaaS平台 , 容器编排之争正式开始 。
Docker发布了Swarm平台 , Swarm擅长跟Docker生态无缝集成 , docker用户可以低成本过渡 。 其最大亮点是使用Docker项目原有的容器管理API来完成集群管理 。 例如:单机Docker项目: docker run “我的容器” 。 集群Docker项目:docker run-H“我的Swarm集群API地址” “我的容器” 。
Mesos平台 , 擅长大规模集群的调度与管理 。 它是Apache基金会下的一个开源集群管理器 , 最初是由Berkeley分校开发的 。 它为应用程序提供了跨集群的资源管理和调度API 。 之后转向支持PaaS业务 , 推出了Marathon项目 。 它是一个高度成熟的PaaS项目 , 旨在让用户便捷管理一个数万级别的物理机集群 , 可使用容器在这个集群里自由部署应用 。
Google推出的是Kubernetes平台 , 整个系统的前身是Borg系统 , Kubernetes平台是Google在容器化基础设施领域十多年来实践经验的沉淀与升华 。
经过近3年的角逐 , 容器编排之争的胜利者是Kubernetes 。

  • 2017年9月 , Mesos宣布支持Kubernetes 。