Cartridge

简介

Cartridge是一个基于IaaS 的虚拟机 (VM),其中包含了和Stratos PaaS进行交互的组件。Stratos 提供了在OpenStack和Amazon EC2上开箱即用的PHP,MySQL和Tomcat等cartridge。此外,Strato支持任何可插拔的cartridge,包括以下几类︰数据、负载平衡器、应用框架和应用程序。Cartridg因操作系统 (OS) 和 IaaS 不同而不同,因此,你需要为每个OS 和 IaaS 创建自定义的Cartridge。Stratos中所有的cartridge都为云应用程序提供了非常安全OS级的隔离环境。cartridge可以运行于两种模式 :单租户模式和多租户模式。Cartridge的类型不同源于创建它的方法:通用Cartridge和完全配置Cartridge。如果需要,您可以使用配置工具(如Puppet、Chef等)使得cartridge创建过程自动化。

Cartridge实例

在一个运行的Stratos环境中,每个虚拟机(VM)或Docker容器被认为是一个cartridge实例。

Cartridge模式

可以用单租户或多租户方式来创建cartridge,在下面的小节阐述了这些cartridge类型

单租户cartridge

在Apache Stratos中,单租户应用程序部署时,其中包含了一个或多个单租户cartridge。租户用户登录到应用程序,系统为应用程序中的每个cartridge创建单独的cartridge实例,从而,提供用户进程级别的隔离,并提供用户专用的实例。单租户用户可以映射到一个或多个cartridge实例

wKiom1fBOuLRaxerAAA4SKvAyxE169.jpg-wh_50

多租户cartridge

在 Stratos中,多租户应用程序包含一个或多个多租户cartridge,允许多个租户共享单个cartridge实例。即使租户用户共享单个cartridge实例,用户的处理也是由隔离的程序代码安全地单独处理的。用户必须注册到应用程序后,才能够使用该应用程序。

wKioL1fBO0DQFhfZAAA2HQ6CQkE896.jpg-wh_50

Cartridge创建方式

Apache Stratos允许DevOps使用完全配置cartridge方式或通用cartridge方式来创建cartridge。上述提到的cartridge创建方式,在下面的小节中法进行解释和分析。

通用cartridge

通用cartridge是指在生成一个cartridge实例后,在已运行的情况下,在cartridge实例中安装所需的软件。通用cartridge是一个只含基础操作系统(OS)镜像和预装有安装脚本的Puppet代理 (PA)的cartridge。创建一个cartridge所涉及的具体步骤取决于所使用 IaaS。有关创建一个cartridge的详细信息,请参阅创建一个新的cartridge章节。


如何工作?

当用户注册到应用,该应用具有一个或多个通用cartridge,云控制器将加载的基础数据发送到 IaaS,接着IaaS使用和应用对应的通用cartridge快照来启动cartridge实例。在cartridge实例启动时,启动脚本 (例如,init.sh) 在cartridge内的自动执行,并且启动Puppet代理程序,Pupput代理将和Puppet主节点交互,然后,在cartridge中安装cartridge代理和所需软件。此后,cartridge代理与Stratos交互,来执行所需的操作。


完全配置cartridge

完全配置cartridge也可认为是预先配置cartridge,其中所有的软件和配置都事先预制好了。完全配置的cartridge包括基础的操作系统 (OS)镜像,安装脚本,所需的软件,Puppet代理 (PA) 和cartridge代理 (CA)。Puppet代理将与Puppet主节点交互,当实例中的软件和Puppet主节点上软件之间有区别时,获取所需的软件更新。创建一个cartridge所涉及的具体步骤取决于所使用的IaaS。有关创建一个cartridge的详细信息,请参阅创建一个新的cartridge章节。

wKioL1fBPSfgC8qzAAkLSsN_0VU263.jpg-wh_50

如何工作?

当用户注册到应用,该应用具有一个或多个预先配置的cartridge,云控制器将加载的基础数据发送到 IaaS,接着IaaS使用和应用对应的预先配置cartridge快照来启动cartridge实例。在cartridge实例启动时,启动脚本 (例如,init.sh) 在cartridge内的自动执行,并且启动cartridge代理程序,cartridge代理和Stratos交互,来执行所需的操作。Puppet代理只与Puppet主节点交互,获取所需的软件更新。

 

总体比较

Apache Stratos提供的两种cartridge的创建方法,各有优缺点。因此,DevOps 根据其组织的需要,选择最合适的cartridg创建方法。

所有的应用程序和配置已预先配置的完全配置cartridge方式,DevOps可以比通用cartridge方式更快地生成cartridge实例。然而,由于通用cartridge并不拥有任何特定的应用程序和配置,DevOps可以使用同一cartridge生成不同类型的cartridge实例,而不需要为每个cartridge类型创建单独的cartridge镜像。

若要了解如何在虚拟机和Docker上创建一个cartridge,请参阅创建一个新的cartridge章节。


Cartridge部署

最初,当添加一个cartridge,DevOps必须通过CLI、 Web UI 或 REST API使用cartridge.json来定义cartridge,并将其发送到 Stratos管理器。此后,Stratos管理器发送cartridge定义到云控制器 (CC)要求添加cartridge。云控制器根据cartridge镜像ID进行验证 (例如,EC2上一个亚马逊机器镜像 [AMI])。如果cartridge已经存在,云控制器删除现有的cartridge并将已修改配置后的新cartridge添加进去。如果不存在cartridge,云控制器开始添加cartridge的过程,云控制器将cartridge定义添加到其内存中的数据结构,并持久化记录到其注册表,此后,云控制器更新拓扑结构的服务定义,并将拓扑事件发布到消息代理 (MB)。