CloudStack 采用了典型的分层结构:用户层、核心引擎、以及资源层。它面向各类型的客户提供了不同的访问方式:Web Console和 Web Service API。通过它们,用户可以管理使用在其底层的计算资源(又分为主机、网络和存储),完成诸如在主机上分配虚拟机,配给虚拟磁盘等功能。
下面我们将对cloud stack分部分进行介绍。
management server管理整个cloudstack集群。management server提供两种方式进行访问(1)http api (2)Web UI. 使用Web UI可以非常方便的管理整个集群。
management server为无状态的,可以部署为虚拟机或者物理机,单台management server最多可以管理5K台host,为保证稳定性和可用性,可以横向扩展management server数量。
基于management server,管理员可以对cloudstack进行管理,涉及的方面主要包括主机、存储、网络、用户、模板、域。management server的界面如下:
cloud infrastructure代指所有运行虚拟机的host主机,并对host进行分层管理,。分层关系如下:
Host:Host 就是运行虚拟机(VM)的主机。
Cluster:Cluster 是多个主机组成的一个集群。同一个 cluster 中的主机有相同的硬件,相同的 Hypervisor,和共用同样的存储。同一个 cluster 中的虚拟机,可以实现无中断服务地从一个主机迁移到另外一个上。
Pod:Pod 对应着一个机架。同一个 pod 中的机器在同一个子网(网段)中。
Zone: Zone 对应于现实中的一个数据中心,它是 CloudStack 中最大的一个单元。
整个云由单个或者位于不同地理位置的多个zone构成,并且zone之间需要低延迟的网络互连以力求更高的性能。
即从包含关系上来说,一个 zone 包含多个 pod,一个 pod 包含多个 cluster,一个 cluster 包含多个 host。
cloudstack支持多种虚拟机方案,如图:
对于Xen和vCenter,management server可以直接和host进行交互,对于kvm和ovm,则事先需要在host上安装agent。
在cloudstack中存在两种存储,分别为Primary storage和Secondary storage
一级存储与 cluster 关联,它为该 cluster 中的主机的全部虚拟机提供磁盘卷。一个 cluster 至少有一个一级存储,且在部署时位置要临近主机以提供高性能。一级存储可以基于local disk、iSCSI、FC或者NFS。
二级存储与 zone 关联,它存储模板文件,ISO 镜像和磁盘卷快照。一个zone至少有一个二级存储。
网络的设计规划是CloudStack的一个亮点,同时也是cloudstack当中比较复杂并且比较难理解的一部分。
cloudstack支持两种网络部署模式,基本资源网络和高级资源网络
共享网络:支持基本资源网络和高级资源网络,不同账户的VM使用同一个共享网络,使用安全组方式进行网络隔离。
隔离网络:仅支持高级资源网络,属于某个特性账户,账户可以拥有一个或者多个隔离网络,使用VLAN方式进行网络隔离。
其中MGS(Management,Guest,Storage)三种网络对于基本网络及高级网络通用.而P(Public)则只是针对高级网络才存在.可以对比下图:
系统创建的虚拟机实例,用于执行系统任务。
用于提供多种网络服务,包括DHCP,DNS,NAT,Firewall,VPN
对image和template进行管理
对于jpaas和xplat,我们可以从cloudstack学到些什么?它山之石,可以攻玉
在cloudstack中对于网络进行了很细致的规划,其中对于访问控制进行了详细的设置。
用户可以根据需要,对vm手动添加策略,如图:
入口规则负责对inbound流量的限制,outbound负责对outbound流量的限制。
CIDR对一个网段设置规则,Account对来自一个用户的流量进行限制(主要针对vm之间的通信)
具体规则可以制定传输层协议、端口范围等等。
目前在jpaas和xplat中,我们对于实例的网络通信行为没有进行管理,现有情况是:外部流量可以随意连接instance,instance也可以随意访问外部网络,instance之间(不论是否属于相同app)也可以随意通信。
类比cloudstack,我们可以实现访问控制:
我们实现的是私有云,对于访问控制的需求并不是很大,我们可以根绝具体需求来实现访问策略。