Flynn是一个开源的PaaS平台,可自动构建部署任何应用到Docker容器集群上运行,其功能特性与组件设计大量参考了传统的PaaS平台Heroku。本文旨在从使用动机、基本对象、层次架构、功能组件、基本工作流这几个方面对Flynn做总体的介绍。
为什么需要Flynn
为了便于理解Flynn的作用与功能,让我们先来看看应用程序从开发到构建再到部署再到运行分别需要经历的几个实体状态:
更具体一点,以一个Java程序为例来描述:
-
源代码:包括*.java、log4j.properties、pom.xml等文件。
-
发布包:源代码被编译打包后生成一个JAR包,这个就是发布包。
-
部署配置:比如每个进程的启动命令、环境变量、系统属性等。通常,这些配置会写在一个启动脚本里面。
-
进程:运行Java程序的实体。一个Java程序可以起多个进程,每个进程启动不同的主类(实现了main()方法的类,一个JAR包可以包含多个主类)。
引入Docker后,发布包变成封装了JAR包与JDK环境的镜像,进程变成在相互隔离的容器里运行。但是,从源代码到镜像、从镜像到运行容器这两步转换过程需要用户人工的操作。尤其是后者的转换,涉及到集群资源调度、自动部署、配置管理、容器管控等一系列的复杂流程。更进一步,在运行阶段还涉及扩缩容、日志查看、错误处理、运行监控等运维需求,如果全部人工操作将耗费巨大的工作量。
这时候类似Flynn这样的PaaS出场了,基于Docker之上进一步封装了整个构建、部署、运行工作流,使得用户只需简单地提交代码即可完成开发到运行的快速转换:
-
开发到构建:用