本页面适用于运行各种容器化工作负载并希望利用 Google Kubernetes Engine (GKE) 和 Cloud Run 的优势将应用部署到 Google Cloud Platform 的基础设施管理员和应用操作员。混合策略可让您优化费用、性能和管理开销。
在阅读本页面之前,请确保您熟悉以下内容:
无状态和有状态工作负载
为何搭配使用 GKE 和 Cloud Run?
GKE 和 Cloud Run 在运行容器化应用方面具有不同优势,可满足不同级别的工作负载复杂性。不过,您无需在这两个平台之间进行选择。您可以根据需要在两个平台之间迁移工作负载,从而同时利用 GKE 和 Cloud Run 的优势。
以下是使用两个运行时来部署工作负载的一些优势:
GKE 和 Cloud Run 提供相对较高水平的可移植性:
这两个平台都使用标准容器映像作为部署工件。您可以在任一平台中为您的应用使用相同映像,而无需进行任何修改,从而实现 GKE 和 Cloud Run 之间工作负载的无缝迁移。您无需更新持续集成设置即可在 GKE 和 Cloud Run 之间迁移,只要容器映像存储在Artifact Registry 中。
GKE 和 Cloud Run 都使用声明式 API 模型。Cloud Run Admin API v1 的设计目标是与 Kubernetes API 兼容。这意味着您可以使用熟悉的 Kubernetes 概念(如 Deployment、Service 和 Pod 横向自动扩缩器)来管理 Cloud Run 服务。这种相似性可让您更轻松地在两个平台之间转换配置。
资源以具有相同声明性和标准结构的 YAML 文件表示,因此可以在不同运行时之间轻松迁移。下面是一个示例,它比较了 Kubernetes 部署和 Cloud Run 服务的 YAML 文件。
GKE 和 Cloud Run 都与 Cloud Logging 和 Cloud Monitoring 无缝集成,并为您提供 Google Cloud 控制台的集中视图,以便您观察应用指标,无论其平台如何。您还可以在这两个平台上使用服务等级目标 (SLO) 监控,并在 Cloud Monitoring 信息中心上统一显示 SLO。
您可以使用 Cloud Deploy 实现对 GKE 资源或 Cloud Run 服务的持续交付。或者,如果您愿意,可以使用并行部署将应用同时部署到 GKE 和 Cloud Run。
您可以通过为 GKE 和 Cloud Run 上的服务使用外部和内部负载均衡器来辅助高级流量管理。这包括公开外部端点的功能,以便您可以在这两个平台上为同一应用部署和运行不同的网址。您还可以将流量拆分到 GKE 和 Cloud Run 中的同一服务,从而实现从一个平台无缝迁移到另一个平台。
Google Cloud 提供了安全工具,以改善使用这两种运行时时的安全状况。借助操作系统扫描功能,您可以在部署到任一平台之前扫描容器,了解是否存在漏洞。中央 Binary Authorization 政策可以强制执行与 GKE 和 Cloud Run 控制平面的集成,以根据您定义的政策允许或阻止映像部署。借助 VPC Service Controls,安全团队可以跨 GKE 和 Cloud Run 资源定义精细的边界控制措施。
比较 GKE 和 Cloud Run
为了充分利用 GKE 和 Cloud Run 的最佳功能,并了解何时在它们之间移动工作负载,请务必了解这两种服务之间的不同之处。
功能 | GKE | Cloud Run |
---|---|---|
部署和管理 | 管理 Kubernetes 集群,包括节点配置、网络、扩缩和升级。 Google Cloud 管理底层基础设施并提供简化集群操作的工具,但您仍需负责 Kubernetes 的核心方面。 |
直接在 Google Cloud 可伸缩的基础设施之上运行容器。 您只需提供源代码或容器映像,Cloud Run 可以为您构建容器。您无需创建集群,也不必预配和管理基础设施。 |
控制和灵活性 | 对 Kubernetes 集群的完全控制。 您可以创建节点配置、网络政策、安全设置和插件的高级自定义设置。 |
对底层基础设施的有限控制。 您可以配置环境变量、并发和网络连接等内容,但无法自定义底层基础设施或环境。简单易用、速度快的选择。 |
应用类型 | 支持无状态和有状态应用,非常适合具有特定资源需求的复杂应用。 | 最适合无状态、请求或事件驱动型服务、Web 服务和函数。 |
定价模式 | 无论操作模式(Standard 或 Autopilot)、集群大小或拓扑如何,都按集群以每小时付费。 | 按量付费,计费时间以 100 毫秒为增量向上取整。 |
使用场景
假设您是一家正在构建大型电子商务平台的零售公司的平台管理员。您要部署以下容器化工作负载:
前端网站和移动应用:用于处理产品浏览、搜索和结账的无状态 Web 应用。
商品目录管理系统:管理商品库存情况性和更新的有状态服务。
商品推荐引擎:一种复杂的微服务,用于为每位用户生成个性化商品推荐。
批处理作业:包括更新商品清单和分析用户行为等定期任务。
这些工作负载同时代表无状态服务和有状态服务,因此您决定利用 GKE 和 Cloud Run 来获得最佳性能。以下是为工作负载实现混合方法的一种方法。
阅读 Cloud Run 工作负载适用性条件后,您决定将 Cloud Run 用于网站和移动应用,以及批处理作业。在 Cloud Run 上部署这些服务具有以下优势:
在流量高峰和大型批量作业时自动扩缩,无需人工干预。
采用按用量计费模式,经济高效。只有在用户浏览或结账时以及在批量作业执行期间使用资源时,您才需要付费。
部署速度更快,更新即时可用,从而改善用户体验。
轻松与其他 Google Cloud 服务集成。例如,对于事件驱动型处理,您可以使用 Cloud Run functions 在 Cloud Run 上启动批处理作业,并实现无缝工作流。
产品目录管理系统是一项有状态服务,需要精细的控制和潜在的自定义存储解决方案。您决定使用 GKE 进行部署,因为它提供永久性存储,并且允许您挂接卷以实现商品数据的持久性和可靠性。
商品推荐引擎是一种复杂的微服务,可受益于 GKE。借助 GKE,您可以管理复杂的依赖项,并精细控制资源分配和扩缩。
GKE 最适合复杂的微服务架构、有状态应用、需要自定义基础设施或网络配置的工作负载,以及必须对 Kubernetes 进行深度控制的场景。Cloud Run 最适合事件驱动型应用。它非常适合无状态 Web 服务、API、批量作业以及受益于按用量计费的其他工作负载。
上面的示例演示了结合使用 GKE 和 Cloud Run 如何为您的电子商务平台提供强大且灵活的解决方案。您将同时获享这两个平台的优势:无状态工作负载的无服务器效率,以及对复杂微服务和有状态组件的 Kubernetes 控制。
注意事项
GKE 和 Cloud Run 互为补充,可满足复杂应用环境中的不同需求。
在采用混合方法部署工作负载时,存在以下注意事项:
在 Cloud Run 上运行无状态微服务,以获得经济高效性和可伸缩性。
在 GKE 上部署需要深度自定义的复杂有状态应用。
如果您使用 Google Cloud 上的专用网络,通过 Cloud Run 服务访问 GKE 集群中的资源,则可以使用直接 VPC 出站流量向 Virtual Private Cloud (VPC) 网络发送请求。如要在 GKE 集群中使用 Kubernetes Service,Cloud Run 服务必须连接到集群的 VPC 网络,并且 Kubernetes Service 必须使用内部直通式网络负载均衡器。
如需在 Cloud Run 和 GKE 之间迁移流量,您可以在全球外部应用负载均衡器后面公开外部端点。在两个运行时中的服务前面实现此负载均衡器后,您将能够在 Cloud Run 和 GKE 上部署同一应用,从而逐步将流量从一个平台转移到另一个平台。
如需在专用 IP 地址后面公开 Virtual Private Cloud 中的 Cloud Run 服务,请使用内部负载均衡器。
请注意,如果您的工作负载已在 Cloud Run 上,则可以随时根据需要迁移到 GKE。
何时不应搭配使用 GKE 和 Cloud Run
虽然 GKE 和 Cloud Run 为许多容器化工作负载提供了极具吸引力的方法,但在某些情况下,将它们搭配使用可能不太合适。以下是不太建议您采用混合方法的一些示例:
紧密耦合的微服务:如果您的微服务相互之间高度依赖,并且需要频繁进行延迟时间短的通信,那么跨不同平台管理它们可能会增加复杂性。平台之间频繁的网络调用可能会增加开销和潜在瓶颈,从而影响性能。
具有自定义依赖项的旧版应用:如果您的应用依赖于 Cloud Run 不支持的特定库、框架或配置,则将其用于应用的某些部分可能需要大幅重构或解决方法。这可能会抵消无服务器优势,并导致专属于平台的维护开销。
对可预测工作负载的预算限制:如果您的工作负载具有一致的资源要求并且预算有限,则 GKE 的按节点付费模式可能比 Cloud Run 的按用量计费更经济实惠。如果您有可预测的工作负载,可能无法充分利用 Cloud Run 的自动扩缩优势,这使得 GKE 的固定费用更具吸引力。
最佳方法最终取决于您的特定需求和优先事项。 在决定混合 GKE 和 Cloud Run 架构之前,请仔细评估应用的要求、资源限制和团队专业知识。
后续步骤
如需了解如何将 Cloud Run 服务转换为 Kubernetes 部署,请参阅从 Cloud Run 迁移到 GKE。
按照从 Kubernetes 迁移到 Cloud Run,将 Kubernetes Deployment 打包到与 Cloud Run 兼容的容器中。