CloudStack 学习小记 2 —— CloudStack 基本架构与元素

“Hi,这是小5自学 CloudStack 相关知识的第2篇笔记。这期我们将了解 CloudStack 的基本架构与其中的组成元素。”

摘要
  • 部署架构概述

大多数 CloudStack 部署都包含管理服务器和待管理的资源。部署过程中,需要将待管理的资源告知管理服务器,例如 IP 地址块、存储设备、虚拟机管理程序和 VLAN。

最小安装方案包括一台运行 CloudStack 管理服务器的机器和另一台作为云基础设施的机器(在本例中,这是一个非常简单的基础设施,仅包含一台运行虚拟机管理程序软件的主机)。在最小部署方案中,一台机器可以同时充当管理服务器和虚拟机管理程序主机(使用 KVM 虚拟机管理程序)。

功能更全面的安装包括一个高可用性的多节点管理服务器安装,以及使用多种网络技术的数万台主机。

  • 管理服务器概述

管理服务器负责协调和分配云部署中的资源。管理服务器通常运行在专用机器或虚拟机上。它负责将实例分配给主机,并为实例分配存储空间和 IP 地址。管理服务器运行在 Apache Tomcat 容器中,并需要 MySQL 数据库来实现数据持久化。

管理服务器的作用:

1.为管理员和最终用户提供网页界面。

2.提供 CloudStack API 和 EC2 接口的 API 接口。

3.管理将访客实例分配给特定计算资源。

4.管理公共和私有 IP 地址的分配。

5.在虚拟机实例化过程中分配存储空间。

6.管理快照、磁盘映像(模板)和 ISO 映像。

7.为您的云平台提供统一的配置入口。

  • 云基础设施概述

云基础设施包含以下基本元素

Regions(地区):由一个或多个管理服务器管理的一个或多个地理位置相近的区域(Zone)的集合。

为了提高云的可靠性,可以选择将资源分组到多个地理区域中。地区是 CloudStack 部署中最大的可用组织单元。一个地区由多个可用区域(Zone)组成,每个可用区域(Zone)大致相当于一个数据中心。每个地区都由其自身的管理服务器集群控制,这些服务器运行在其中一个可用区域(Zone)中。同一地区内的各个可用区域(Zone)通常地理位置相近。地区是实现容错和灾难恢复的有效方法。

通过将可用区分组到不同的地区中,云可以实现更高的可用性和可扩展性。用户账户可以跨地区部署实例,从而允许用户在多个分散的地区中部署实例。即使某个地区不可用,最终用户仍然可以通过部署在其他地区中的实例访问服务。此外,通过将多个可用区域(Zone)分组到各自附近的管理服务器下,与从单个中央管理服务器管理分散的可用区域(Zone)相比,云内部的通信延迟得以降低。

使用记录也可以按地区进行整合和跟踪,从而为每个地理区域生成报告或账单。

地区对最终用户可见。当用户在特定的 CloudStack 管理服务器上启动访客实例时,用户实际上已为该访客实例选择了该地区。用户可能还需要将其私有模板复制到其他地区,以便在这些地区中使用这些模板创建访客实例。

Zones(区域):通常,一个区域相当于一个数据中心。一个区域由一个或多个 Pod 和二级存储(Secondary Storage)组成。

在 CloudStack 部署中,区域是第二大的组织单元。一个区域通常对应一个数据中心,但一个数据中心内也可以有多个区域。将基础设施组织成区域的好处在于提供物理隔离和冗余。例如,每个区域可以拥有自己的电源和网络链路,并且各个区域在地理位置上可以相距甚远(尽管这不是必需的)。

一个区域由以下部分组成:

1.一个或多个 pod。每个 pod 包含一个或多个主机集群和一个或多个主存储服务器。

2.一个区域可以包含一个或多个主存储服务器,这些服务器由该区域内的所有 pod 共享。

3.二级存储,由该区域内的所有 pod 共享。

区域对最终用户可见。用户启动访客实例时,必须为其访客选择一个区域。用户可能还需要将其私有模板复制到其他区域,以便在这些区域中使用这些模板创建访客实例。

区域可以是公开的,也可以是私有的。公开区域对所有用户可见,这意味着任何用户都可以在该区域中创建访客。私有区域则仅限特定域名使用,只有该域名或其子域名中的用户才能在该区域中创建访客。

同一区域内的主机可以直接相互访问,无需经过防火墙。不同区域内的主机可以通过静态配置的 VPN 隧道相互访问。

对于每个区域,管理员必须决定以下内容:

1.每个区域应该放置多少个 pods?

2.每个 pod 应放置多少个集群?

3.每个集群中应放置多少台主机?

4.(可选)每个区域中要放置多少台主存储服务器以及这些存储服务器的总容量。

5.每个集群中需要放置多少台主存储服务器?这些存储服务器的总容量是多少?

6.在一个区域中部署多少二级存储?

当使用 CloudStack UI 添加新区域时,系统会提示配置区域的物理网络,并添加第一个 pod、集群、主机、主存储和二级存储。

为了支持 VMware 的区域级功能,CloudStack 能够识别 VMware 数据中心,并将每个数据中心映射到一个 CloudStack 区域。为了启用诸如存储实时迁移和 VMware 主机的区域级主存储等功能,CloudStack 必须确保每个区域仅包含一个 VMware 数据中心。因此,在创建新的 CloudStack 区域时,可以为该区域选择一个 VMware 数据中心。如果要配置多个 VMware 数据中心,则每个数据中心都将在 CloudStack 中设置为一个单独的区域。

Pods: 通常是一个机架或一排机架,其中包括二层交换机和一个或多个集群(Cluster)。

Pod 通常代表一个机架。同一 Pod 中的主机位于同一子网中。Pod 是 CloudStack 部署中第三大的组织单元。Pod 位于 Zone 中。每个 Zone 可以包含一个或多个 Pod。一个 Pod 由一个或多个主机集群以及一个或多个主存储服务器组成。Pod 对最终用户不可见。

Clusters(集群):集群由一个或多个同构主机(Host)和主存储(Primary Storage)组成。

集群提供了一种将主机分组的方法。更准确地说,集群可以是 XenServer 服务器池、一组 KVM 服务器,也可以是预配置在 vCenter 中的 VMware 集群。集群中的所有主机都拥有相同的硬件,运行相同的虚拟机管理程序,位于同一子网,并访问相同的共享主存储。实例可以在同一集群内从一台主机实时迁移到另一台主机,而不会中断对用户的服务。

集群是 CloudStack 部署中第四大组织单元。集群包含在 Pod 中,Pod 又包含在可用区域(Zone)中。集群的大小受底层虚拟机管理程序的限制,但 CloudStack 建议在大多数情况下使用较小的集群。

集群由一个或多个主机和一个或多个主存储服务器组成。

CloudStack 允许在云部署中创建多个集群。即使完全使用本地存储,组织上仍然需要集群,即使每个集群只有一个主机。使用 VMware 时,每个 VMware 集群都由一个 vCenter Server 管理。管理员必须将 vCenter Server 注册到 CloudStack。每个可用区域(Zone)可以有多个 vCenter Server。每个 vCenter Server 可以管理多个 VMware 集群。

Host(主机):集群(Cluster)中的单个计算节点;通常是虚拟机管理程序。

主机是指一台独立的计算机。主机提供运行客户机实例所需的计算资源。每台主机上都安装了虚拟机管理程序软件,用于管理客户机实例。例如,主机可以是 Citrix XenServer 服务器、支持 KVM 的 Linux 服务器、ESXi 服务器或 Windows Hyper-V 服务器。

主机是 CloudStack 部署中最小的组织单元。主机包含在集群中,集群包含在 Pod 中,Pod 包含在可用区域(Zone)中,可用区域(Zone)包含在地区内。

CloudStack 部署中的主机:

1.提供托管实例所需的 CPU、内存、存储和网络资源。

2.使用高带宽 TCP/IP 网络互连并连接到互联网。

3.可能位于不同地理位置的多个数据中心。

4.集群内的主机可能具有不同的配置(不同的 CPU 速度、不同的内存容量等),但所有主机必须是同构的。

可以随时添加其他主机,为访客实例提供更多容量。CloudStack 会自动检测主机提供的 CPU 和内存资源量。主机对最终用户不可见。最终用户无法确定其访客被分配到了哪个主机。

要使主机在 CloudStack 中正常运行,必须执行以下操作:

1.在主机上安装虚拟机管理程序软件。

2.给主机分配 IP 地址。

3.确保主机已连接到 CloudStack 管理服务器。

Primary Storage(主存储):通常为单个集群(Cluster)提供的存储资源,用于实际运行实例磁盘映像。(区域级主存储也是一种选择,但通常不使用。)

主存储与集群关联,用于存储集群中所有主机上运行的实例的虚拟磁盘。在 KVM 和 VMware 上,可以按区域(Zone)配置主存储。

可以向集群或区域添加多个主存储服务器,至少需要一个。为了提高性能,主存储服务器通常位于靠近主机的位置。CloudStack 会管理将客户虚拟磁盘分配到特定主存储设备的过程。

当您希望避免额外的数据复制操作时,设置区域(Zone)级主存储非常有用。使用基于集群的主存储时,主存储中的数据仅对同一集群内的实例直接可用。如果其他集群中的实例需要某些数据,则必须使用区域的二级存储作为中间步骤,将数据从一个集群复制到另一个集群。此操作可能会非常耗时。

Hyper-V 支持 SMB/CIFS 存储。请注意,Hyper-V 不支持区域级主存储。 Ceph/RBD 存储仅受 KVM 虚拟机管理程序支持。它可以用作区域(Zone)级主存储。 PowerFlex/ScaleIO (v3.5) 仅受 KVM 虚拟机管理程序支持。它可以用作集群范围或区域(Zone)范围的主存储。

CloudStack 旨在与底层虚拟机管理程序支持的所有符合标准的 iSCSI 和 NFS 服务器配合使用。

如果打算仅使用本地磁盘进行安装,则可以跳过添加单独的主存储。

Secondary Storage(二级存储):一种区域(Zone)范围的资源,用于存储磁盘模板、ISO 映像和快照。

二级存储器存储以下内容:

1.模板——可用于启动实例的操作系统镜像,并且可以包含额外的配置信息,例如已安装的应用程序。

2.ISO镜像——包含操作系统数据或可启动介质的光盘镜像。

3.磁盘卷快照——实例数据的已保存副本,可用于数据恢复或创建新模板。

二级存储中的项目可供二级存储范围内的所有主机使用,二级存储范围可以按区域或按地区定义。

为了让云端所有主机都能访问二级存储中的项目,除了基于区域的 NFS 辅助暂存存储之外,还可以添加对象存储。这样就无需像单独使用区域 NFS 时那样,将模板和快照从一个区域复制到另一个区域。所有内容都可在任何位置访问。

此外,对于 Hyper-V 主机,支持 SMB/CIFS 存储。

  • 网络概述

CloudStack 提供多种类型的网络,但它们通常可归为以下两种情况之一:

基本型:与 AWS 经典网络模式最为相似。它提供一个扁平的二层网络,客户机隔离由虚拟机管理程序的桥接设备在三层实现。

高级:这通常使用 VLAN 等第 2 层隔离,但此类别还包括 Nicira NVP 等 SDN 技术。

添加区域的一部分工作是设置物理网络。每个区域可以关联一个或多个物理网络(在高级区域中)。网络对应于虚拟机管理程序主机上的网卡。每个物理网络可以承载一种或多种类型的网络流量。每个网络的流量类型选择取决于您创建的是基本网络还是高级网络区域。

物理网络是指区域内实际的网络硬件和线路。一个区域可以有多个物理网络。管理员可以:

1.在区域中添加/删除/更新物理网络。

2.在物理网络上配置 VLAN。

3.配置网络名称,以便虚拟机管理程序能够识别该网络。

4.配置物理网络上可用的服务提供商(防火墙、负载均衡器等)。

5.配置转发到物理网络的 IP 地址。

6.明确物理网络上传输的流量类型,以及其他属性,例如网络速度。

基本区域网络流量类型

使用基本网络配置时,一个区域中只能存在一个物理网络。该物理网络承载以下几种类型的流量:

访客——当最终用户运行实例时,会产生访客流量。访客实例之间通过一个称为访客网络的网络进行通信。基本区域中的每个 Pod 都是一个广播域,因此每个 Pod 都有不同的访客网络 IP 地址范围。管理员必须为每个 Pod 配置 IP 地址范围。

管理—— CloudStack 内部资源相互通信时会产生管理流量。这包括主机、系统虚拟机(CloudStack 用于在云端执行各种任务的虚拟机)以及任何其他直接与 CloudStack 管理服务器通信的组件之间的通信。您必须配置系统虚拟机使用的 IP 地址范围。

强烈建议为管理流量和访客流量使用不同的网卡。

公共——基本区域中不存在公共流量。但是,如果您希望实例直接暴露于互联网,则可以为访客网络分配可公开路由的 IP 地址空间。

存储——虽然名称为“存储”,但此处特指辅助存储流量,不影响主存储流量。这包括实例模板和快照等流量,这些流量在辅助存储虚拟机和二级存储服务器之间传输。CloudStack 使用名为“存储网卡”的独立网络接口控制器 (NIC) 来处理存储网络流量。使用始终运行在高带宽网络上的存储网卡可以实现快速的模板和快照复制。必须配置存储网络使用的 IP 地址范围。

在基本网络中,配置物理网络相当简单。大多数情况下,只需配置一个访客网络来承载访客实例产生的流量。如果使用 NetScaler 负载均衡器并启用其弹性 IP 和弹性负载均衡 (EIP 和 ELB) 功能,则还必须配置一个网络来承载公共流量。当添加新区域时,CloudStack 会在用户界面中自动显示必要的网络配置步骤。

使用基本网络配置时,CloudStack 会将 Pod 的 CIDR 中的 IP 地址分配给该 Pod 中的虚拟机。为此,管理员必须在 Pod 上添加一个直接 IP 地址范围。这些 IP 地址与主机位于同一 VLAN 中。

高级区域网络流量类型

使用高级网络时,区域内可以存在多个物理网络。每个物理网络可以承载一种或多种流量类型,需要告知 CloudStack 每个网络应承载哪些类型的网络流量。高级区域中的流量类型包括:

访客——当最终用户运行实例时,会产生访客流量。访客实例之间通过一个称为访客网络的网络进行通信。该网络可以是隔离的,也可以是共享的。在隔离的访客网络中,管理员需要预留 VLAN 范围,以隔离每个 CloudStack 账户的网络(可能需要大量的 VLAN)。在共享的访客网络中,所有访客实例共享同一个网络。

管理—— CloudStack 内部资源相互通信时会产生管理流量。这包括主机、系统虚拟机(CloudStack 用于在云端执行各种任务的虚拟机)以及任何其他直接与 CloudStack 管理服务器通信的组件之间的通信。必须配置系统虚拟机使用的 IP 地址范围。

公共——当云中的实例需要访问 CloudStack 外部的系统时,就会产生公共流量。访客实例会将流量路由到其虚拟路由器以访问外部系统。最终用户可以使用 CloudStack 用户界面获取这些 IP 地址,以便在访客网络和公共网络之间实现 NAT。公共 IP 地址会分配给系统虚拟机(包括虚拟路由器)的“公共”接口。

“公共”网络中使用的 IP 地址空间可以是真正可公开路由的 IP 地址空间(例如,在公共云环境中),也可以是任何其他公司内部(符合 RFC 1918 标准)且未与其他 CloudStack 网络一起使用的 IP 地址空间(例如,在私有云环境中)。

存储——虽然名称为“存储”,但此处特指辅助存储,不影响主存储的流量。这包括实例模板和快照等流量,这些流量在辅助存储虚拟机和二级存储服务器之间传输。CloudStack 使用名为“存储网卡”的独立网络接口控制器 (NIC) 来处理存储网络流量。使用始终运行在高带宽网络上的存储网卡可以实现快速的模板和快照复制。您必须配置存储网络使用的 IP 地址范围。

这些流量类型可以分别位于不同的物理网络上,也可以在满足特定限制条件的情况下组合使用。

使用高级网络功能时,管理员可以创建额外的网络供访客使用。这些网络可以覆盖整个区域并对所有帐户开放,也可以限定于单个帐户,在这种情况下,只有指定的帐户才能创建连接到这些网络的访客。网络由 VLAN ID、IP 地址范围和网关定义。管理员可以根据需要配置数千个这样的网络。此外,管理员还可以为非 CloudStack 实例和服务器预留一部分 IP 地址空间。

同时,管理员可以创建额外的公共网络供访客使用。这些网络可以覆盖整个区域并对所有帐户开放,也可以限定于单个帐户,在这种情况下,只有指定的帐户才能创建连接到这些网络的访客。网络由 VLAN ID、IP 地址范围和网关定义。管理员可以根据需要配置数千个这样的网络。

系统保留的IP地址

在每个区域中,需要为管理网络配置一系列预留的 IP 地址。该网络承载 CloudStack 管理服务器与各种系统虚拟机(例如辅助存储虚拟机、控制台代理虚拟机和 DHCP 服务器)之间的通信。

预留的 IP 地址在整个云环境中必须是唯一的。例如,一个区域中的主机不能与另一个区域中的主机使用相同的私有 IP 地址。

Pod 中的主机都会被分配私有 IP 地址,这些地址通常是 RFC1918 地址。控制台代理和辅助存储系统虚拟机也会被分配位于其创建所在 Pod 的 CIDR 区域内的私有 IP 地址。

请确保计算服务器和管理服务器使用的 IP 地址不在系统保留 IP 地址范围内。例如,假设系统保留 IP 地址范围从 192.168.154.2 到 192.168.154.7。CloudStack 可以使用 .2 到 .7 的地址空间作为系统虚拟机的 IP 地址。这样,剩余的 pod CIDR 地址(从 .8 到 .254)就留给了管理服务器和虚拟机管理程序主机。

所有区域:

1.为每个 pod 中的系统提供私有 IP 地址,并在 CloudStack 中进行配置。

2.对于 KVM 和 XenServer,建议每个 Pod 为每个主机分配一个私有 IP 地址。如果预计 Pod 会增长,请现在就添加足够的私有 IP 地址以满足增长需求。

在采用高级网络技术的区域中:

对于具有高级网络功能的区域,建议为所有客户配置足够的私有 IP 地址,并额外为所需的 CloudStack 系统虚拟机配置足够的 IP 地址。通常,系统虚拟机需要大约 10 个额外的 IP 地址。

使用高级网络时,每个 Pod 中可用的私有 IP 地址数量取决于该 Pod 中节点上运行的虚拟机管理程序。Citrix XenServer 和 KVM 使用链路本地地址,理论上可以在地址块内提供超过 65,000 个私有 IP 地址。随着 Pod 规模的扩大,这应该足以满足任何合理数量的主机以及客户虚拟路由器的 IP 地址需求。相比之下,VMware ESXi 使用管理员指定的子网划分方案,而通常管理员每个 Pod 只分配 255 个 IP 地址。由于这些 IP 地址由物理机、客户虚拟路由器和其他实体共享,因此在扩展运行 ESXi 的 Pod 时,可能会出现私有 IP 地址耗尽的情况。

为确保在使用高级网络的 ESXi pod 中有足够的空间来扩展私有 IP 空间,请使用以下一种或两种技术:

1.为子网指定更大的 CIDR 块。带有 /20 后缀的子网掩码将提供超过 4000 个 IP 地址。

2.创建多个 Pod,每个 Pod 都有自己的子网。例如,如果创建 10 个 Pod,每个 Pod 有 255 个 IP 地址,这将提供 2550 个 IP 地址。


以上内容主要来自对 docs.cloudstack.apache.org 的学习,在此特别声明。