面向 OpenStack 用户的 Google Cloud Platform

本文旨在帮助 OpenStack 用户掌握开始使用 Google Cloud Platform (GCP) 所需了解的主要概念。无论您正在考虑迁移还是实施混合部署,本文都会对您有所帮助。

概览

本文首先比较 OpenStack 和 GCP 上的 3 层式网页应用示例架构,然后比较 OpenStack 和 GCP 的特性,并提供快速参考表,让您了解 OpenStack 与 GCP 在术语和概念方面的对应关系。

本文不会比较 OpenStack 和 GCP 提供的 SDK、API 或命令行工具。

如需 Google Cloud Platform 产品的完整列表,请参阅产品和服务

云计算服务

云计算服务提供一套基准服务,其中包括计算、存储、网络、访问管理和通常具有的数据库服务。

OpenStack 的基准服务包括:

  • 计算:OpenStack Compute(Nova 和 Glance)
  • 存储:OpenStack Block Storage (Cinder)
  • 网络:OpenStack Networking (Neutron)
  • 身份和访问管理:OpenStack Identity Service (Keystone)

Cloud Platform 的基准服务包括:

Google Cloud Platform 上服务的价格

GCP 上的大多数服务都采用随用随付价格模式,其中包括下列模式:按秒或按分钟计费并随使用量增加而自动折扣。GCP 价格模式加上自定义机器类型等灵活的资源分配,有助于优化应用经济实惠的性能。

如需了解快速价格估算工具及相关详情,请参阅价格计算器

为什么选择 Google Cloud Platform?

过去 15 年,Google 一直致力于打造全球其中一款最快、最强大以及最高质量的云基础架构。在内部,Google 使用这一基础架构来支持几种高流量和全球级服务,包括 GmailGoogle 地图YouTubeGoogle 搜索。GCP 使用此基础架构为您提供服务。

示例架构比较

本节比较您可以如何在 OpenStack 和 GCP 上构建 3 层式网页应用系统。

  • OpenStack 配置生成活动 - 备份配置。
  • GCP 配置利用托管服务来生成活动 - 活动配置。

典型的 3 层式网页应用包含以下组件:

  • 负载平衡器
  • 网络服务器
  • 应用服务器
  • 数据库服务器

OpenStack:活动 - 备份配置

图 1 所示的 OpenStack 示例配置具有以下特征:

  • 资源布置在作为两个单独故障网域存在的两个区域以实现冗余。
  • 该网络使用单一子网覆盖各个区域的所有层,并且所有服务器都是虚拟机 (VM) 实例。
  • 您可以为四个服务器角色定义安全组,并将它们分配给相应的实例。
  • Cinder 卷作为数据卷附加到数据库服务器。为确保跨故障网域实现冗余,活动区域的数据库将备份到对象存储,并在需要时按备份区域中的数据库进行还原。(此架构不使用实时数据库复制,因为区域之间的带宽有限。)
  • 此架构提供活动 - 备份配置。将服务故障转移到其他区域时,您按照备份区域的数据库服务器还原最新备份。

三层式网页应用

图 1:OpenStack 上的 3 层式网页应用系统

GCP:活动 - 活动配置

图 2 所示的 GCP 示例配置具有以下特征:

  • 您将资源部署在单个子网中,该子网覆盖单个区域中的多个地区,从而实现冗余。
  • 您将网络服务器和应用服务器部署为虚拟机实例。
  • 您使用标记定义防火墙规则以指定数据包目标。
  • 您可以根据源 IP 地址在 Cloud SQL 配置中为数据库连接配置访问控制。Cloud SQL 是用于 MySQL 数据库的 GCP 托管服务,可在多个地区之间提供数据复制。计划数据备份和故障转移过程是自动执行的,您可以从同一区域中的多个地区访问数据库。地区之间的故障转移对虚拟机实例上运行的应用是透明的。您可以从多个地区访问单个 Cloud SQL 实例。(Cloud SQL 有两代:Cloud SQL 第一代和 Cloud SQL 第二代。它们在复制和故障转移方面具有不同的特性和默认行为。)
  • Google Cloud Load Balancing 是一种 HTTP(S) 负载平衡服务,通过这种服务,您可以使用单个全局 IP 地址 (VIP) 将客户端访问分发到多个区域和地区。
  • 该架构跨多个地区提供活动 - 活动配置,形成跨故障网域的冗余服务。

三层式网页应用 2

图 2:GCP 上的 3 层式网络应用系统

特性比较

本节比较示例架构中所具特性的详情。

网络架构

本节比较 OpenStack 和 GCP 网络在区域和地区中如何工作,讨论项目和租户、IP 地址和故障转移以及防火墙规则。

区域和地区

OpenStack 与 GCP 在术语和概念方面的对应如下所示:

OpenStack GCP 说明
区域 区域 在 OpenStack 中,区域可以横跨多个数据中心。在 GCP 中,一个区域对应一个数据中心园区,该园区中通常会有多栋独立建筑。
可用性地区 地区 在 OpenStack 中,可用性地区通常用于标识具有共同属性的一组服务器。

在 GCP 中,一个地区对应数据中心内的一个群集。

在 OpenStack 中,“区域”被定义为由专用控制器节点管理的单个集群。一个区域由多个可用性地区组成。您可以使用可用性地区定义多组资源,例如计算节点和存储机箱。

在 GCP 中,区域是一个独立的地理区域,由多个地区组成。区域内位置的往返网络延迟时间在第 95 百分位下往往低于 5 毫秒。与 OpenStack 可用性地区一样,地区指 GCP 资源在区域内的部署地区。一个地区应被视为一个故障网域。

GCP 跨所有地区提供一个专用内部网络,因此同一区域内不同地区之间的带宽和延时与单个区域内的带宽和延时不相上下。您可以跨多个区域部署紧密耦合的群集应用,无需考虑地区之间的带宽和延时。

在这两个平台中,跨多个地区或区域部署应用有助于防止意外故障。在 GCP 中,地区被视为独立故障网域。在 OpenStack 中,区域(而非可用性地区)被视为独立故障网域,这是因为一个区域中的可用性地区共享相同的控制器节点。如需查看 GCP 的区域和地区列表,请参阅 Cloud 网点

项目和租户

OpenStack 与 GCP 在术语和概念方面的对应如下所示:

OpenStack GCP 说明
租户 项目 GCP 中的所有资源都必须属于项目。用户可以创建自己的新项目。

在 OpenStack 中,仅管理员可以创建新租户。

要使用 GCP 服务,您必须设置一个 Google 帐户。GCP 按项目分组汇总您的服务使用量。您可以在同一个帐号下创建多个完全独立的项目,您的用户也可以在他们的帐号下创建他们自己的项目。在遵循区域和地区规则的前提下,一个项目中的各资源可以轻松实现合作(例如通过内部网络通信)。每个项目的资源都与其他项目中的资源隔离开来;您只能通过外部网络连接互连它们。

在这种模式下,您可以为公司内的不同部门或群组创建项目空间。此模式也非常适合测试用途:在完成某个项目后,您可以删除该项目,这时,该项目创建的所有资源也将被删除。

OpenStack 使用术语“租户”来指代用于隔离不同群组的资源的类似功能。在 OpenStack 中,仅系统管理员可以创建新租户。

网络配置

OpenStack 与 GCP 在术语和概念方面的对应如下所示:

OpenStack GCP 说明
Neutron Cloud Virtual Network Cloud Virtual Network 是一种托管网络服务。在 GCP 中,您可以在项目中定义多个网络,每个网络都是独立的。
虚拟专用网
虚拟专用网 单个 GCP 虚拟专用网横跨通过 GCP 内部网络连接的所有区域。Neutron 虚拟专用网横跨一个区域中的所有可用性地区。

在典型的 OpenStack Neutron 部署中,每个租户的虚拟网络都包含在其自己的专用网络空间中。如图 1 所示,您不一定必须使用多个子网,但如果需要,您可以配置多个子网。图 3 显示了一个 OpenStack 虚拟网络,它由一个虚拟路由器和三个虚拟交换机组成。其中两个虚拟交换机通过虚拟路由器连接到外部网络。AZ-1 和 AZ-2 是可用性地区。

虚拟网络

图 3:OpenStack 网络配置示例

GCP 提供两种网络:旧版网络子网。

如图 4 所示,旧版网络提供横跨全球所有区域的单个专用子网。

如图 5 所示,在子网网络中,虚拟交换机相当于 OpenStack Neutron 虚拟路由器,虚拟交换机通过内部网络相互连接。所有子网都可以通过专用 IP 地址相互路由,因此您不必使用全局 IP 地址或互联网进行区域间通信。

在 GCP 中,您可以在项目中混合使用旧版网络和子网网络。每个新创建的项目都包含一个名为“default”的预定义网络,该网络又包含每个区域中名为“default”的子网。

旧版网络

图 4:Google Cloud Platform 旧版网络配置示例

子网网络

图 5:Google Cloud Platform 子网网络配置示例

IP 地址

OpenStack 与 GCP 在术语和概念方面的对应如下所示:

OpenStack GCP
实例具有专用内部 IP 地址。根据需要分配全局 IP 地址(浮动 IP 地址)。

实例具有专用内部 IP 地址。此外,使用“gcloud”命令行工具创建实例时,系统会自动分配临时 IP 地址。根据需要还可以分配静态 IP 地址。
不同区域或不同虚拟路由器下的实例之间进行通信需要全局 IP 地址。 所有区域的子网都可以通过专用 IP 地址相互路由,因此您不必使用全局 IP 地址或互联网进行实例间通信。

在 Neutron 中,专用网络中的虚拟机实例使用启动时分配的专用 IP 地址通过虚拟交换机和路由器进行通信。默认情况下,不分配全局 IP 地址。

虚拟路由器处理从虚拟机实例到外部网络的访问,以便实例共享分配给虚拟路由器的同一全局 IP 地址。为了将实例公开给外部网络并允许外部用户接入,您从全局 IP 地址池将浮动 IP 地址分配给实例。

由于虚拟网络包含在一个区域中,因此不同区域中的实例必须使用浮动 IP 地址通过外部网络进行通信。

一个网络可以包含多个虚拟路由器。连接到不同路由器的虚拟机实例无法直接通过专用 IP 地址通信;但是,它们使用浮动 IP 地址通过外部网络进行通信。

在 GCP 中,所有虚拟机实例在启动时都具有内部 IP 地址和外部 IP 地址。如有必要,您可以分离外部 IP 地址。

默认情况下,外部 IP 地址是临时的,这意味着它与实例的生命周期相关。当您关闭实例然后再次启动时,系统可能会为其分配另外一个外部 IP 地址。您还可以请求永久 IP 地址(称为静态 IP以便附加到实例。静态 IP 地址一直归您所有,直到您选择将其释放出来,同时您将它们显式分配给虚拟机实例。您可以根据需要将静态 IP 地址附加到实例或从实例分离。

如 3 层式网页应用架构示例中展示的那样,OpenStack 中在故障转移时,由于您无法在不同区域使用同一全局 IP 地址,因此必须使用其他机制(例如动态 DNS),以支持客户端继续使用同一网址访问服务。

另一方面,在 GCP 中,您可以使用 Cloud Load Balancing 提供的单个全局 IP 地址 (VIP) 将客户端访问分发到多个区域和地区。这在区域和地区之间提供故障转移,而这对客户端是透明的。

防火墙

OpenStack 与 GCP 在术语和概念方面的对应如下所示:

OpenStack GCP 说明
通过安全组实施防火墙规则。 通过规则和标记实施防火墙规则。 OpenStack 安全组包含多个 ACL,您可以按实例角色定义这些 ACL,然后分配给实例。

您必须为每个区域定义 OpenStack 安全组。

GCP 规则和标记可以一次定义、所有地区使用。

在 OpenStack 中,一个安全组包含多个访问控制列表 (ACL),这些列表独立于虚拟机实例。您将安全组分配给虚拟机实例,以将 ACL 应用于实例。通常,您可以根据虚拟机实例角色定义安全组,例如网络服务器数据库服务器

例如在示例架构中,您为每个区域定义了以下安全组:

安全组 来源 协议
load-balancer 任何 HTTP/HTTPS
管理子网 SSH
web-server load-balancer HTTPS
管理子网 SSH
web-application web-server TCP 8080
管理子网 SSH
database web-application MYSQL
管理子网 SSH

您可以使用子网范围或安全组的名称指定数据包的来源。上表中的管理子网代表系统管理员用以登录到来宾操作系统进行维护的子网范围。

此架构假设客户端 SSL 在负载均衡器处被终止,负载均衡器使用 HTTPS 与网络服务器通信。网络服务器使用 TCP 8080 与应用服务器通信。MySQL 用于数据库服务器。

定义这些安全组后,您将它们分配给每个实例,具体如下所示:

实例 安全组
负载平衡器 load-balancer
网络服务器 web-server
应用服务器 web-application
数据库服务器 database

在 GCP 中,通过 Cloud Virtual Network,您可以使用规则和标记的组合定义覆盖所有区域的防火墙规则。标记指与虚拟机实例相关联的任意标签,您可以将多个标签分配给一个虚拟机实例。规则指允许数据包在以下条件下流动的 ACL:

  • 来源:IP 范围、子网、标记
  • 目标:标记

举例来说,您首先定义一个规则,允许将目标端口为 TCP 80 的数据包从任意 IP 地址发送到网络服务器标记。然后,您可以将该网络服务器标记添加到任何虚拟机实例,以允许对它们进行 HTTP 连接。您可以通过管理标记来指定实例角色,并通过管理规则指定与角色分别对应的 ACL。

图 6 展示了新创建的项目中默认网络的一些预定义规则。例如,10.128.0.0/9 是子网范围,包含所有区域的底层子网。每个项目中的子网范围可以不同。规则自始至终允许以下网络连接:

  • 来自任何外部源的互联网控制消息协议 (ICMP) 数据包。
  • 接入默认网络的所有实例之间的任何数据包。
  • 来自任何外部源的远程桌面协议 (RDP) 连接。
  • 来自任何外部源的 Secure Shell (SSH) 连接。

预定义的防火墙规则

图 6:Virtual Cloud Network 中默认网络的预定义防火墙规则

如需了解详情,请参阅使用网络和防火墙

在 GCP 防火墙规则中,您使用标记指定数据包目标,并使用子网范围或标记来指定数据包来源。在此场景中,您可以定义以下规则:

来源 目标 协议
130.211.0.0/22 web-server HTTP,HTTPS
web-server web-application TCP 8080
管理子网 web-server, web-application SSH

上表中的 130.211.0.0/22 是负载均衡器和运行状况检查系统用以访问网络服务器的子网范围。管理子网代表系统管理员用以登录到来宾操作系统进行维护的子网范围。web-serverweb-application 是分别分配到网络服务器和应用服务器的标记。您根据其角色为实例分配标记,而不是像使用安全组时那样分配规则。

您可以根据源 IP 地址在 Cloud SQL 配置中为数据库连接配置访问控制。

存储

OpenStack 与 GCP 在术语和概念方面的对应如下所示:

OpenStack GCP 说明
Cinder 卷 永久性磁盘 附加到实例的永久性存储

借助 GCP 永久性磁盘,数据从实例移到永久性磁盘存储空间之前会自动加密。

临时磁盘 不适用 附加到实例的临时存储
OpenStack Swift Cloud Storage 对象存储服务
临时磁盘和 Cinder 卷

OpenStack 提供两种附加到实例的磁盘选项:临时磁盘和 Cinder 卷。

临时磁盘旨在用作包含操作系统文件的系统磁盘,而 Cinder 卷旨在存储永久性应用数据。但是,由于临时磁盘不支持实时迁移,人们通常也会将 Cinder 卷用于系统磁盘。

临时磁盘用作系统磁盘时,系统会将操作系统模板映像复制到计算节点的本地存储中,并将该本地映像附加到实例。当实例被销毁时,附加的映像也会被销毁。

Cinder 卷提供永久性磁盘区,位于外部存储设备中。在典型部署中,块设备使用 iSCSI 协议连接到计算节点,并作为虚拟磁盘附加到实例。当实例被销毁时,附加的卷保留在外部设备中,并且可以通过另一个实例进行重用。

在实例上运行的应用软件也可以访问 OpenStack Swift 提供的对象存储。

临时磁盘和 Cinder 卷

图 7:OpenStack 中临时磁盘和 Cinder 卷的比较

永久性磁盘

GCP 以永久性磁盘(类似于 OpenStack 中的 Cinder 卷)形式提供附加到实例的永久性存储。您将永久性磁盘用作包含操作系统文件的系统磁盘,用于存储永久性应用数据。数据从实例进入永久性磁盘存储之前会自动加密。您可以将单个永久性磁盘扩容到高达 64 TB,但附加磁盘的最大总容量会根据实例类型受到限制。如需了解详情,请参阅存储选项

当您需要高性能本地存储时,您还可以使用本地固态永久性磁盘 (SSD)。每个本地 SSD 的大小为 375 GB,但每个实例最多可以附加 8 个本地 SSD 设备,以获得 3 TB 的本地 SSD 总存储空间。请注意,附加了本地 SSD 的实例支持实时迁移。由于本地 SSD 中的数据在实时迁移期间在实例之间复制,因此存储性能可能会暂时降低。

在实例上运行的应用软件可以访问 Cloud Storage(用于存储和访问大量不同大小的二进制对象或 blob 的托管服务)提供的对象存储。

虚拟机实例

OpenStack 与 GCP 在术语和概念方面的对应如下所示:

OpenStack GCP 说明
实例类型 机器类型 在 OpenStack 中,一般用户无法创建自定义实例类型。

在 GCP 中,任何用户都可以创建自定义机器类型。
元数据服务 元数据服务器 OpenStack 仅提供实例相关信息。

GCP 还提供项目相关信息。

当在 OpenStack 中启动新的虚拟机实例时,您可以选择一种实例类型来指定实例大小,例如 vCPU 的数量和内存量。如果系统管理员为您分配了相应的访问权限,则您可以定义其他实例类型。一般用户无法添加自定义实例类型。

在 GCP 中,实例大小定义为机器类型。除了从预定义的机器类型中选择一个外,用户还可以分别更改 vCPU 的数量和内存量,以创建自定义机器类型。如需了解详情,请参阅机器类型

元数据

OpenStack 提供元数据服务,以通过实例来宾操作系统(来宾 OS)检索虚拟机实例信息,例如实例类型、安全组和分配的 IP 地址。您还可以以键值对形式添加自定义元数据。OpenStack 提供了一种称为“user-data”的元数据。当您启动新实例时,可以将可执行文本文件指定为 user-data,以使来宾操作系统中运行的 cloud-init 代理根据其内容执行启动配置任务,例如安装应用程序包。您可以使用 http://169.254.169.254/latest/meta-data 下的网址通过来宾操作系统访问元数据。

GCP 提供元数据服务器,用于通过实例来宾操作系统检索实例和项目相关信息。项目元数据由项目中的所有实例共享。您可以以键值对形式为实例元数据和项目元数据添加自定义元数据。GCP 提供称为 startup-scriptshutdown-script 的特殊元数据,分别在您启动或关闭实例时执行。

与 OpenStack 的 user-data 不同,startup-script 在每次启动实例时执行。操作系统模板映像中预安装有 compute-image-packages,中包含代理,用于处理两个脚本 startup-scriptshutdown-script。如需了解详情,请参阅存储和检索实例元数据

您可以使用任一以下网址通过来宾操作系统访问元数据:

  • http://metadata.google.internal/computeMetadata/v1/
  • http://metadata/computeMetadata/v1/
  • http://169.254.169.254/computeMetadata/v1/
来宾操作系统代理
OpenStack GCP 说明
cloud-init 配置任务代理软件包 compute-image-packages 配置任务代理软件包 OpenStack 代理仅处理初始启动设置。

GCP 代理处理初始启动设置和实例运行时的动态配置更改。

OpenStack 在标准来宾操作系统映像中预安装名为 cloud-init 的代理软件包。它在第一次启动时处理初始配置任务,例如扩展根文件系统空间,存储 SSH 公钥以及执行作为 user-data 提供的脚本。

GCP 在标准来宾操作系统映像中预安装名为 compute-image-packages 的代理软件包。它通过 startup-script 在第一次启动时处理初始配置任务,并在来宾操作系统运行时处理动态系统配置,例如添加新的 SSH 公钥以及更改网络配置以实现 HTTP 负载平衡。启动实例后,您可以通过 Google Cloud Platform Consolegcloud 命令行工具生成并添加新的 SSH 密钥。

Google Cloud SDK 预安装在 GCP 的标准来宾操作系统映像中。您可以使用 SDK 通过默认授予某些权限的服务帐户从来宾操作系统访问 GCP 上的服务。

访问控制

Google Cloud IAM 按实例在 GPC 中实施访问控制。例如,如果希望在实例上运行的应用将数据存储在 Google Cloud Storage 中,您可以为该实例分配读写权限。有了 Cloud IAM,您无需为实例上运行的应用手动准备密码或凭据代码。如需了解详情,请参阅为实例创建和启用服务帐号

OpenStack Keystone 基于用户帐户为服务 API 提供访问控制,但不为应用 API 提供基于实例的访问控制,例如对象存储或数据库的读写权限。如有必要,您可以为应用 API 实现自定义访问控制。

超越 IaaS:平台即服务

本文比较了 OpenStack 和 Google Cloud Platform 提供的组件和服务,这些组件和服务对 IaaS 来说至关重要。但是,如要在可用性,可伸缩性和运营效率方面充分利用 GCP,您应该整合托管服务,将它们作为构建快来打造您的整个系统。

全系列的 GCP 服务远远超出了 IaaS 平台的传统概念,它还涵盖以下内容:

后续事项

  • 详细了解如何将 Google Cloud Dataproc 与 GCP 中的存储、计算和监控服务集成以创建完整的数据处理平台。
  • 了解使用 Google Stackdriver 进行监控、记录和诊断的相关信息。
  • 详细了解 Google BigQuery,它是一个用于分析的全托管式数据仓库,提供无服务器平台,因此您可以专注于使用 SQL 进行数据分析,即使 PB 级数据规模的数据集也是如此。
  • 详细了解 Google Cloud Platform 的产品和服务
此页内容是否有用?请给出您的反馈和评价:

发送以下问题的反馈:

此网页
面向 OpenStack 用户的 Google Cloud Platform 简介