Apache Stratos Mock IaaS
简介
Apache Stratos 支持许多基础设施作为服务 (IaaS) 的平台:EC2,OpenStack,vCloud,CloudStack,Docker等。然而,设立IaaS 或购买公共 IaaS 服务对于尝试Stratos来说是额外的开销。此外,设置本地 IaaS 需要大量的硬件资源和购买公有云上的IaaS账户所涉及的成本。这些对尝试Stratos带来了障碍 Stratos。
通过引入Docker/Kubernetes来支持Linux容器,很大程度上解决了这个问题。然而,设置 Kubernetes集群还需要几个虚拟机或物理机,并且建立Puppet主节点(或任何其他配置工具)也是额外开销。此外,对于组合应用的群组cartridge功能,这一问题更严重了,因为,其实现逻辑的复杂性和它需要时间来验证在IaaS 平台上的每个功能。
为了解决这个问题,Apache Stratos引入了Mock IaaS功能,它可以模拟 Stratos所需要的IaaS 基本功能。
一般来说,Mock IaaS 驻留在云控制器中,并且运行在一个单独的Java 虚拟机 (JVM) 中。但是,在云爆发和 Stratos集群的场景下,Mock IaaS 需要作为一个独立的产品运行在分布式环境下,使用多个 JVM。因此,为了支持独立运行,Mock IaaS封装了REST 服务,以便能够创建一个单独的服务器配置文件。从而,这允许Mock IaaS 作为一个单独的产品运行,这样可以配置云控制器通过Mock IaaS的API和Mock IaaS交互。
有关如何在Mock IaaS 上运行Stratos的详细信息,请参见使用Mock IaaS章节。
架构
下图描述了Mock IaaS的功能架构:
Stratos IaaS
Stratos IaaS的接口
Stratos提供了IaaS平台的抽象层。这里面包含了如下通用的接口:
· 启动实例.
· 传递用户数据,基础数据到实例。
· 为实例绑定网络接口。
· 为网络接口分配公网IP。
· 为实例添加存储。
· 关闭实例
在Apache Stratos的4.0.0版本中的Stratos IaaS接口不包含一些与IaaS接×××互的方法。哪些方法会直接通过jclouds的计算模块进行调用。引入模拟IaaS模块后,所有需要与IaaS交互的方法都移到IaaS接口,与jclouds相关的逻辑都移动到JcloudsIaas类中。现在,IaaS接口被模拟IaaS客户端和jclouds IaaS客户端来实现。jclouds IaaS客户端可以实现为EC2、OpenStack、vCloud、CloudStack和Docker。
持久化存储卷的映射
添加持久化存储卷的映射与在机器实例中添加虚拟硬盘相似。在亚马逊的EC2中,EBS存储设备可以做为一个持久化的卷添加到EC2实例中。需要了解更多信息,请参考添加EBS到AWS实例。当用户需要在实例被关闭或者删除时仍然需要保留数据,可以使用持久化存储卷。MySQL、MongoDB就需要这样的持久化存储卷。
在cartridge的定义中添加持久化存储卷
持久化存储卷作为一个可选项,在用户需要持久保存数据时可以设置此选项。在cartridg中添加此选项如下所示:
"persistence": { "isRequired": "true", "volume": [ { "device": "/dev/sdc", "mappingPath": "/home/ubuntu/sdc", "size": "10", "removeOnTermination": "false" } ] }
管理多个持久化存储卷
Stratos提供指定多个持久化存储的能力。如果用户需要多个额外的存储卷,可按如下定义:
"persistence": { "isRequired": "true", "volume": [ { "device": "/dev/sdc", "mappingPath": "/home/ubuntu/sdc", "size": "10", "removeOnTermination": "false" }, { "device": "/dev/sdf", "mappingPath": "/home/ubuntu/sdf", "size": "20", "removeOnTermination": "false" } ] }
用户不能定义相同的路径到多个存储卷。若这样定义的话,路径会映射到最后一个定义的存储卷,不能确定另一个卷是否会映射到一个目录。
后台如何运作
在单租户cartridges中,持久化映射会在应用部署和自动订阅后产生作用。但在多租户cartridges中,持久化映射会在租户注册进程中产生作用。
创建卷.
格式化并创建可写的文件系统(ext3).
挂载卷到mappingPath指定的目录中.
格式化和创建文件系统的进程仅在第一次持久化映射时发生。当卷挂载到另一个实例时,当第一个实例结束时,不需要重新创建文件系统,因为文件系统已经存在。
验证存储卷的创建
通过下面步骤验证存储卷是否创建::
通过ssh登录到实例.
2. 执行命令: df-h
可以看到如下输出:
df -h Filesystem Size Used Avail Use% Mounted on /dev/xvdc 10G 7.1G 97G 3% /home/ubuntu/sdc /dev/sda1 4000G 40G 320G 10% /home
命令行工具
Stratos提供了命令行工具,用户可通过工具管理在Stratos中的应用。用户可以运行各种命令管理Stratos。需要学习和了解所有的命令行工具,请参考命令行工具指南。
命令行工具可通过如下两种模式运行:
交互模式
这种模式允许用户手动执行命令。需要了解更多信息,请参考交互模式。
单命令行模式
这种模式允许计算机执行命令脚本。需要了解更多信息,请参考单命令行模式。
使用命令行工具前,需要首先配置命令行工具,并通过命令登录到Stratos管理器中。
交互模式
· 登录
通过下面的命令进行登录(在交互模式,若用户不使用用户名和密码进行登录,命令行工具会进行相应的提示)。
./stratos.sh
命令自动补齐
交互模式支持命令自动补齐功能. 在命令行工具中按Tab键会自动列出所有可选的命令。
activate-tenant add-application add-autoscaling-policy add-cartridge add-cartridge-group add-deployment-policy add-domain-mappings add-kubernetes-cluster add-kubernetes-host add-network-partition add-tenant add-user create-application deactivate-tenant deploy-application describe-application describe-application-runtime describe-application-signup describe-autoscaling-policy describe-cartridge describe-cartridge-group describe-deployment-policy describe-kubernetes-cluster describe-kubernetes-master describe-network-partition describe-tenant exit help list-applications list-autoscaling-policies list-cartridge-groups list-cartridges list-cartridges-by-filter list-deployment-policies list-domain-mappings list-kubernetes-clusters list-kubernetes-hosts list-network-partitions list-tenants list-tenants-by-partial-domain list-users remove-application remove-application-signup remove-autoscaling-policy remove-cartridge remove-cartridge-group remove-deployment-policy remove-domain-mappings remove-kubernetes-cluster remove-kubernetes-host remove-network-partition remove-user synchronize-artifacts undeploy-application update-autoscaling-policy update-cartridge update-deployment-policy update-kubernetes-host update-kubernetes-master update-network-partition update-tenant update-user
单命令行模式
用户可以使用单命令行模式在同一行中直接调用以下所有的操作。必要时用户可以将用户名和密码设置到环境中,然后执行命令:
./stratos.sh -u [username] -p [password] [action commands]