OpenShift核心流程详解
应用部署到应用上线响应用户请求的全流程如图所示:
这个流程涉及了多种不同类 型的 OpenShift 对象 所有对象的信息最终都记录在 etcd 集群数据库中。
1. 应用构建
- 部署应用。流程的开始是用户通过 OpenShift的 Web 控制台或命令行 oc new-app 创建应用。根据用户提供的源代码仓库地址及 Builder 镜像,平台将生成构建配置(Build Config )、部署配置( Deployment Config )、 Service Route 等对象。
- 触发构建。应用相关的对象创建完毕后 平台将触发一次 S2I 构建 。
- 实例化构建。平台依据应用的 Build Config 实例化一次构建,生成 Build 对象。Build 对象生成后,平台将执行具体的构建操作,包括下载源代码 、实例化Builder镜像、执行编译和构建脚本等。
- 生成镜像。构建成功后平台将生成一个可供部署的应用容器镜像。平台将此镜像推送到内部的镜像仓库组件Registry中。
- 更新Image Stream。镜像推送至内部的仓库后,平台将创建或更新应用的Image Stream的镜像信息,使之指向最新的镜像。
2. 应用部署
- 触发镜像部署。 Image Stream 的镜像信息更新后,将触发平台部署 S2I 建生成的镜像。
- 实例化镜像部署。Deployment Config 对象记录了部署的定义,平台将依据此配置实例化 一次部署,生成 Deploy 对象眼踪当次部署的状态。
- 生成 Replication Controller。平台部署将实例化 一个Replication Controller, 用以调度应用容器的部署。
- 部署容器。通过 Replication Controller, OpenShift将 Pod 及应用容器部署到集群的计算节点中。
3. 请求处理
- 用户访问。用户通过浏览器访问Route对象中定义的应用域名。
- 请求处理并返回。请求到 Router 组件后, Router 根据 Route 定义的规则,找到请求所含域名相关联的 Service 的容器,并将请求转发给容器实例。容器实例除 了请求后返回数据,还会通过 Router 将数据返回给调用的客户端。
4. 应用更新
应用更新时,平台将重复上述流程应用构建至应用部署(1-9步)。平台将用下载更新后的代码构建应用,生成新的镜像,并将镜像部署至集群中。OpenShit 支持滚动更新 ,部署容器时,平台将通过滚动更新的方式,保证应用在新老实例交替时服务不间断 。