参考redHat的官方文章翻译而来:https://openshift.redhat.com/community/wiki/architecture-overview
OpenShift Origin
Openshift Origin是Openshift的开源版本,可以用来创建、部署以及管理云端的app。根据每个app使用到的服务的类型(数据库、语言环境),Oepnshift会为你提供一个文件系统为你创造运行环境(a template file system layout is provided)。同时也负责DNS服务
Platform Overview
主要有两个部分组成:Broker和Cartridges
![](https://i-blog.csdnimg.cn/blog_migrate/5b4e04b79a77760d1d66b08b65315ccf.png)
- Broker:处理所有外部进来的请求,然后deliver给正确的处理模块。同时处理用户登录、DNS、app状态、app的管理等功能。当然用户会使用CLI、web或者JBoss工具和Broker交互
- Cartridges:为app运行提供环境。每个Cartridge只能提供一种运行环境,比如Python或者Mysql,不能同时提供好几种。Cartridge分为两种: Framework cartridge和Embedded cartridge,前者是提供web能力的服务,后者是DB、DB web接口这类的服务。一个app显然需要至少一个Framework cartridge
System Resources and Application Containers
这个标题的意思就是系统为App运行提供的容器。这里有两个概念:Gear和Node。
![](https://i-blog.csdnimg.cn/blog_migrate/f4e6ba89d20078decbfd73c1ed0a3d3d.png)
- Gear:Gear提供了一个给Cartridges运行的容器,里面可以跑若干个Cartridge。为每个Cartridge提供有限的RAM和硬盘空间
- Node:一个Node中有多个Gear,Node就是一台物理机或者一台虚拟机。因为有些Gear的app没有在run,所以一般Node会超载,就是存放了超过限额的Gear
Applications
这个就不多写了,就是app的命名方式以及一些参数的名称
![](https://i-blog.csdnimg.cn/blog_migrate/6c3a81596639b60e87270822669d6cd2.png)
- Domian:每个用户只有一个Domain
- App Name:每个app有一个unique的名字
- Aliases:可以为一个app提供一个别名,也就是另外一个URL
- App dependencies:就是app依赖于哪些Catridges
- App Git Repository:就是用户把代码push上去的地方
Primary user interactions
Simple Application Creation
就是一张创建一个PHP app的图例,还是比较通俗易懂的:
![](https://i-blog.csdnimg.cn/blog_migrate/3ec07f28b626ed3a71dcb1651997a6a2.png)
Applciation deployment using Jenkins
可以使用Jenkins这个工具来帮助部署app,也就是通过它和openshift交互,来实现部署。具体细节欠奉:
![](https://i-blog.csdnimg.cn/blog_migrate/170d357e76bc9697f0bfbfcc2de0fb04.png)
Horizontal scaling(Beta)
Beta版的。。。目前Openshift就是用
HA proxy来实现负载均衡。GIT部署作为end point for the application(个人理解就是真正部署的工具是GIT)。HA proxy的运作方式也很简单:如果有请求,那么把请求转发到正确的Gear即可。然后部署方式是:用户向HA proxy 的gear push代码。那么HA proxy将代码在分别push到每个运行的Gear上面去
![](https://i-blog.csdnimg.cn/blog_migrate/e729d91b86d8507886939c2c58645b60.png)
Describing an application using descriptors
Openshift使用一个descriptor文件来build app。文件是YAML文件类型,就是yml后缀文件。文件内容包括:name、version、dependencies以及app的架构等信息。Broker可以通过这个文件来创建和修改app,同时为用户提供管理这些文件参数的REST API。
![](https://i-blog.csdnimg.cn/blog_migrate/4c75583483ddaf915073bcd1a7c8c8b3.png)
App Descriptor
app的描述文件包括以下的属性:
- Name
- Version
- Requires:依赖列表,也就是Cartridge的列表,然后每个Cartridge都会有一个对应的Cartridge Descriptor
- Cartridge: 似乎和上面的差不多,不清楚了
- Component:Smallest piece of a software package which provides some functionality. Users don’t see below this level.
- Connections:哪两个component需要互相通讯
- Group Override:就是将不相关的Cartridge放到一个Gear里面去。In essence, embedding them together. These components will scale together.
- Gear:CPU、内存以及disk的配置
Name: myapp
Version: 1.0
Requires: php-1.0, mysql, mongodb
Connections:
- php-1.0, mysql
- php-1.0, mongodb
Group override:
- php-1.0, mysql
The descriptor above describes an application named “myapp” which depends on php-1.0, mysql and mongodb. Php,Mysql and Php, Mongodb need to communicate with each other. Php and mysql run embedded on the same set of gears while Mongodb runs on its own set of gears
Cartridge Descriptor
有待补充。。。
Logical views
![](https://i-blog.csdnimg.cn/blog_migrate/c87307995de7241663c64fbef525bf70.png)
StickShift
StickShift是openshift的核心模块,他提供了运行整个Openshift的功能。每台VM或者物理机都必须安装一个stickshift包。它包括三个部分:
- Controller:is a Rails Engine (plugin) which includes a REST API, business logic and state management for the PaaS platform. It also includes a set of plugin APIs for DNS management, authentication, data/state storage, and broker-node communications.
- Node:管理Gear和app
- Common:顾名思义,上面两个模块的共同调用模块
Proxy ports
Gear将自己内部的某个Cartridge暴露给外部调用,一般为了负载均衡或者供其他Gear调用。由HA proxy提供路由功能,即使是其他node的Gear,也可以访问到。