00-开篇

从过去物理机和虚拟机为主体的开发运维环境,向以容器为核心的基础设施的转变过程,并不是一次温和的改革,而是涵盖了对网络、存储、调度、操作系统、分布式原理等各个方面的容器化理解和改造。

关于Linux内核、分布式系统、网络、存储等是真正掌握容器技术体系的精髓所在

  1. 容器技术基础:梳理容器技术生态的发展脉络,描述容器技术底层的实现方式
  2. Kubernetes集群搭建与实践:明白kubernetes集群的架构和原理,选择正确的工具和方法,可以“一键搭建”
  3. 容器编排与Kubernetes核心特性剖析:“编排”容器都是容器云项目的灵魂所在,也是kubernetes社区持久生命力的源泉

    从分布式系统设计的视角出发,抽象和归纳出这些特性中体现出来的普遍方法,带着这些指导思想逐一阐述kubernetes项目关于编排、调度和作业管理的各项核心特性

  4. kubernetes开源社区与生态:“开源生态”永远都是容器技术和kubernetes项目成功的关键

0.1. PaaS

  • 提供应用托管能力:租用一批AWS或OpenStack的虚拟机,然后就像管理物理服务器那样,用脚本或手工方式在这些机器上部署应用
  • 当时的云计算项目,比的就是谁能更好地模拟本地服务器环境,能带来更好的上云体验

PaaS开源项目的出现,就是解决这个问题的最佳方案,核心是一套应用的打包和分发机制

  1. 用户把应用的可执行文件和启动脚本打进一个压缩包,上传到云上存储
  2. 开源PaaS项目会通过调度器选择一个可以运行这个应用的虚拟机,然后通知机器上的Agent把应用的压缩包下载下来启动

需要在同一个虚拟机上启动很多个来自不同用户的应用,PaaS开源项目会调用操作系统的Cgroup和Namespace机制为每个应用单独创建一个沙盒的隔离环境,然后在沙盒中启动这些应用,实现了把多个用户的应用互不干涉地在虚拟机里批量地、自动地运行起来的目的

这正是PaaS项目最核心的能力,运行应用的隔离环境,或者说沙盒,就是所谓的容器

0.2. Docker

Docker项目与大部分PaaS项目的功能和实现原理是一样的,剩下不同的一小部分使得Docker成为无敌的存在:

0.2.1. Docker Image

PaaS能够帮助用户大规模部署应用到集群里,是因为它提供了一套应用打包的功能,也是这个功能让他凉了。用户需要为不同的语言、框架,甚至每个版本的应用都维护一个打好的包,并且打好的包在本地能运行上了云可能要修改很多参数和配置。虽然PaaS项目能够一键部署,但是为每个应用打包的工作太累。

Docker镜像解决的就是打包问题

  • 所谓镜像就是一个压缩包,里面包含的内容比PaaS的应用可执行文件 + 启停脚本的组合要丰富
  • 大多数Docker镜像是直接由一个完整的操作系统的所有文件和目录构成,所以这个压缩包里的内容和本地的开发测试环境用的操作系统是完全一样的

这是Docker镜像最厉害的地方,只要有了这个压缩包,在使用某种技术创建一个沙盒,在沙盒中解压这个包,就可以运行本地开发的程序了。这个过程中完全不需要修改任何的配置,这个压缩包使得本地环境和云环境高度一致。

0.2.2. Docker Swarm

镜像解决了应用打包的难题,还需要有组件能够完成大规模应用部署的职责。

Docker Swarm,原生的容器集群管理项目。

0.2.3. Docker Compose

由Fig项目改名而来。

编排指用户如何通过某些工具或者配置来完成一组虚拟机以及关联资源的定义、配置、创建、删除等工作,然后由云计算平台按照这些指定的逻辑来完成的过程。

容器时代、编排就是对Docker容器的一系列定义、配置和创建动作的管理

0.3. 基于Kubernetes API 和扩展接口

  • 目前热度极高的微服务治理项目 Istio
  • 被广泛采用的有状态应用部署框架 Operator
  • 还有像 Rook 这样的开源创业项目,它通过kubernetes的可扩展接口,把ceph这样重量级产品封装成了简单易用的容器存储插件

Kubernetes社区以开发者为核心,构建一个相对民主和开放的容器生态

上次修改: 14 April 2020