OpenShift 技术架构概述
平台概述
OpenShift 让用户可以创建、部署、管理云端应用,其云环境具体提供了磁盘空间、CPU 计算资源、内存资源、网络连接以及应用服务器。根据不同应用类型(数据库、编程语言等),OpenShift 会提供不同的文件系统布局(例如 PHP、Python、Ruby、Java)来创建不同的运行环境。此外,OpenShift 也提供了一定程度的 DNS(域别名)。
OpenShift 也为不同应用提供了临时文件存取(/var/tmp),超过 10 天没有被访问的文件将被自动删除。
OpenShift 中包含两个基本的功能单元:
- Broker,提供了接口
- Cartridges,提供了应用框架
Broker
Broker 是所有应用管理活动的入口。它主要负责管理用户登录、DNS、应用状态以及应用服务编排(服务分发)。用户和 Broker 交互主要是通过 Web 管理控制台、CLI 工具、JBoss 工具或者是 REST API。
Cartridges
Cartridges 为应用运行提供了实际所需的功能。比如一些 cartridges 提供编程语言支持(PHP、Python、Java 等),另一些则提供数据库支持(PostgreSQL、MySQL、MongoDB)。
系统资源与应用容器
OpenShift 内是通过 gears、nodes 以及 districts 来管理系统资源与应用容器的。
- Gears:提供了给 cartridges 运行的容器。一个或多个 cartridges 可在其中运行,gear 为每个 cartridge 提供有限的内存与磁盘空间。
- Nodes:一台物理机或虚拟机,其中包含多个 gears。因为某些 gear 并不是时时刻刻处于运行中,所以一个 node 通常会处于超配额状态,即放入了超过限额个数的 gears。
- Districts:定义了一些 nodes,其中的 gears 可以方便地进行 node 负载均衡。所以即使是某个 gear 负载很高时也不会发生 node 运行超载。
OpenShift 应用
一个用户名只能使用一个 namespace,一个 namespace可以创建多个应用。
应用是由一系列部分构成:
- Namespace
- App Name
- Aliases
- Git Repository
- App Dependencies(例如数据库 Cartridges)
伸缩性
OpenShift 上分为两个应用,可伸缩应用与不可伸缩应用。
- 可伸缩应用:可伸缩应用按需获取系统资源。一个可伸缩应用至少会使用两个 gears,一个用于应用本身,一个用于高可用代理(HAProxy)实现负载均衡。
- 不可伸缩应用:只能使用一个 gear。
Web 请求到达负载均衡代理 HAProxy 后,它将请求转发给 gear 中的应用。当 HAProxy 探测到请求过载时,OpenShift 复制一份已经存在的 Web cartridge 到一个单独的 gear 里,与已有 gears 一起处理请求,提升了两倍请求处理能力。
用户交互
通过 git push 命令进行部署,也可以使用 Jenkins (cartridge)进行持续集成。