<h2>目录</h2> [toc] ## 概述 ![2017041914925693678579.png](http://ojfzu47n9.bkt.clouddn.com/2017041914925693678579.png) 云帮可以创建符合 [12要素](https://12factor.net/zh_cn/) 的云原生应用。 平台使用容器(Docker)作为基本的计算单元,通过应用的概念来封装容器,利用Kubernetes对应用进行编排和容器调度。 好雨将Kubernetes 与 Docker 进行了深度整合,并针对企业级服务特性自主研发了应用引擎、运维平台、持续交付引擎(CI/CD)、自动化运维、云应用市场等功能模块,底层的分布式存储、SDN、日志收集、实时统计则采用了扩展性极强的插件式设计,增强了平台的灵活性和扩展性。 ## 12要素应用 符合12要素原则(实践方法)构建的应用可以在分布式系统中灵活的伸缩与迁移。 12要素 的贡献者参与过数以百计的应用程序的开发和部署,并通过 Heroku 平台见证了数十万应用程序的开发,运作以及扩展的过程。 云帮的设计完全兼容了12要素原则,可以实现云原生应用的高可用、弹性伸缩,灵活迁移等特性。 平台集成环境自动构建功能,不但支持Dockerfile构建应用,还提供了源代码级别的应用构建,您无需了解Docker,也不需要写Dockerfile,平台可以将您的源代码自动构建成应用并运行起来。 <br> ## 应用 云帮平台提到最多的名词就是 <font color=green><b>应用</b></font> ,云帮中可操作的对象也是应用,这里的应用指的是可独立提供服务的单元,请不要与手机应用,APP混淆。 <font color=green><b>应用</b></font> 可以通过下列三种形式来创建/获取: 1. Git仓库中的源代码 2. Git仓库中Dockerfile文件以及相关的源代码 3. 应用市场 或 [云市](http://app.goodrain.com)中通过 "一键部署" 安装 <font color=green><b>应用</b></font> 可以有不同的类型,不同应用有各自的属性和行为,如:Web应用的属性包含 应用名称,默认域名,开放端口,行为包含 绑定域名、扩容节点、启动、关闭等。 MySQL应用的属性和行为都是针对MySQL服务所特有的,如备份恢复,数据库管理等等。 <br> ## 构建、发布与运行 <img src="http://7xihe6.com1.z0.glb.clouddn.com/build-release-run.png" /> ### 构建阶段 构建组件处理来自git push的请求,或者用户触发构建(一键部署)操作。 如果您提交的是[源代码](http://doc.goodrain.com/usage/181924),构建组件会进行源代码的构建操作,检查代码语言,利用语言的包管理工具安装相关环境依赖和代码库依赖。源代码构建程序还会将本次源码语言的类型、包依赖关系存入应用属性中。 如果构建模块发现您的代码中包含一个 [Dockerfile](http://doc.goodrain.com/usage/181953) 文件,会按照Docker标准的镜像构建的方式解析Dockerfile,生成Docker 镜像并推送的内部私有的镜像仓库中。 ### 发布阶段 发布阶段由应用引擎来完成,它负责将本次构建的应用注册为一个新的版本,并将源码、Dockerfile在构建阶段识别出来的属性存储下来。为应用存储版本信息是为了上线后方便回滚,存储构建信息是为了下次构建时缓存状态。 ### 运行阶段 运行阶段主要由 应用引擎 和 Kubernetes 来完成,首先由应用引擎初始化租户网络(如果租户网络已经存在,该步骤跳过),然后应用引擎调用Kubernetes的控制器服务部署租户应用,应用的属性信息由应用引擎设定。容器创建成功后,会将信息写入到etcd服务中,应用层负载均衡的自动发现机制感应变化后更新负载均衡节点信息。 <br> ## 后端服务 云帮将所有持久化存储服务如:数据库、缓存、存储、消息系统等均看成是应用的附加资源,这些服务与应用是分开的,我们<font color=red>不建议</font>将应用和后端服务放到一个应用中,这样做违背了12要素的设计原则。 应用程序通过环境变量的形式与后端服务进行关联。这样做是为了将应用与后端服务解耦,无论是应用还是后端服务都可以实现独立的灵活伸缩。 <br> ## 扩展阅读 - [架构](架构.md) - [组件说明](组件说明.md)