PaaS 部署之 buildpack
最近在学习 Go ,而常用的内部 PaaS 平台正好也支持 Go 以及相关 Web 框架。一套 PaaS 系统支持多种语言,其中就离不开 buildpack 机制。虽然 PaaS 平台不断在升级,但是 buildpack 机制却一直保留。本文主要是一些 buildpack 资料的整理和实践。
1. PaaS 如何部署应用
无论是基于原生 Docker,还是 Kubernetes 的 PaaS 平台,都只解决了资源隔离的问题,并没有规约 App 的运行方式。一个 App 能运行起来,除了开发人员关注的代码,还有运维人员关注的配置信息。这些配置信息包括:- 账户配置,MySQL、Redis 账户密码等。
- 服务配置,服务名、端口号、第三方服务地址,如 Ceph 等。
- 运行时依赖,Python 2、Python 3、Golang、Nodejs 等,还包括相关依赖包,如,gunicorn 等。
- CLI 告知 CCNG 创建一个应用
- CCNG 在数据库中,新增应用的记录。例如应用名称,哪一个 buildpack 等
- CLI 上传程序
- CCNG 将程序存起来
- CLI 启动应用
- 由于应用尚未部署,所以 CCNG 找一台 DEA(Droplet Execution Agent),在该 DEA 内执行 buildpack 来部署应用
- DEA 输出运行 buildpack 的信息
- buildpack 执行完毕,输出一个 DropLet文件(编译打包的结果),DEA 将该文件存起来
- DEA 将打包情况汇报给 CCNG
- CCNG 选择一个 DEA 来部署应用
- 应用在 DEA 中运行,运行结果输出到 CCNG
- bin/compile,编译脚本
- bin/release,打包脚本
- Procfile,App 启动时执行的命令
- git 仓库地址, https://git.heroku.com/heroku-django-app-hello.git
- https://github.com/heroku/heroku-buildpack-python