部署容器映像
Cloud Run 提供了多种部署选项。 所有部署选项都会生成容器映像,该映像会在 Cloud Run 的全托管式且可高度扩缩的基础设施上作为 Cloud Run 服务、作业或工作器池运行。
可部署的容器映像
您可以将任何遵循 Cloud Run 容器运行时合同的容器映像部署到 Cloud Run 服务、作业或工作器池。
从源代码部署
为方便起见,Cloud Run 可让您通过一个命令构建和部署源代码。如需了解详情,请参阅从源代码部署服务和从源代码部署工作器池。
从源代码部署时,Cloud Build 会将代码转换为存储在 Artifact Registry 中的容器映像。您可以部署包含 Dockerfile
或使用某个支持的语言运行时的源代码。
函数
您可以部署单一用途函数,以响应您的云基础设施和服务发出的事件。当所监控的事件发生时,Cloud Run 会触发您的函数。
函数部署是一种特殊类型的源代码部署,您只需提供函数代码即可。 您可以使用许多受支持的编程语言编写 Cloud Run functions 函数。
部署函数会创建 Cloud Run 服务。
通过 Git 进行持续源代码部署
Cloud Run 可帮助您配置通过 Git 进行持续部署。与源代码部署一样,您可以部署包含 Dockerfile
或使用某个支持的语言运行时编写的源代码。
Cloud Run 服务支持通过 Git 进行持续部署。您可以在 Cloud Build 中为 Cloud Run 作业手动进行配置。
Cloud Run 服务
服务是 Cloud Run 的主要资源之一。 每项服务都位于特定的Google Cloud 区域。为了提供冗余和故障切换,Cloud Run 会自动跨区域内的多个可用区复制服务。给定 Google Cloud 项目可以在不同区域中运行多项服务。
每项服务都会公开唯一端点。默认情况下,Cloud Run 会自动扩缩以处理传入请求。如果需要,您可以选择将扩缩行为更改为手动扩缩。您可以从容器、仓库或源代码部署服务。
下图显示了服务的 Cloud Run 资源模型:
该图展示了一个包含三项 Cloud Run 服务(即 Service A、Service B 和 Service C)的 Google Cloud 项目,每项服务都有多个修订版本:
服务 A 正在接收多个请求,因此 Cloud Run 已启动多个实例来处理负载。其中每个实例仅运行一个容器(应用的容器)。
服务 B 没有请求,因此处于空闲状态,Cloud Run 未运行其应用的任何副本。
服务 C 有请求,并且已通过创建多个实例来扩缩以处理负载。每个实例都包含多个容器,并作为一个独立的集运行。在每个集中,只有入站流量容器会收到请求,但其他容器会帮助处理请求。
Cloud Run 服务修订版本
向服务执行的每次部署都会创建一个修订版本。修订版本包含一个或多个容器映像以及配置设置(如环境变量、内存限制或请求并发值)。
修订版本创建后无法修改。例如,将容器映像部署到新服务时,Cloud Run 会创建第一个修订版本。 如果接着将另一个容器映像部署到该同一服务,Cloud Run 会创建第二个修订版本。如果随后设置了环境变量,Cloud Run 会创建第三个修订版本。随着时间的推移,Cloud Run 最终会移除未使用的旧修订版本。
Cloud Run 会尽快将请求自动路由到运行状况良好的最新服务修订版本。
Cloud Run 服务实例
Cloud Run 会根据处理所有这些请求所需的实例数量,自动扩缩接收请求的每个服务修订版本。请注意,实例可以同时接收许多请求。利用请求并发设置,您可以设置可并行发送到每个修订版本实例的请求数上限。
Cloud Run 作业
每个作业都位于特定的 Google Cloud 区域中,并包含一个或多个作业任务,这些作业任务的执行是为了运行一个或多个容器直至完成操作。作业任务是独立的,可以在给定的作业执行中并行执行。
Cloud Run 作业执行
执行作业时,系统会创建一个作业执行,以启动所有作业任务。作业执行中的所有任务都必须成功完成,执行作业才视为成功。您可以设置任务的超时,并指定在任务失败的情况下的重试次数。
如果任何任务的重试次数超出上限,Cloud Run 会将该任务标记为失败,并将作业标记为失败。默认情况下,可以并行执行的任务数最多为 100,但如果您的任何支持性资源(例如数据库)需要并行执行任务,您可以指定较低的上限。
Cloud Run 作业任务
每次作业执行都会并行执行多个任务,每个任务运行一个实例。Cloud Run 会根据作业的 maxRetries 配置自动尝试再次运行任何失败的任务。
Cloud Run 工作器池
工作器池是一种 Cloud Run 资源,专门为非请求工作负载(例如拉取队列)而设计。请注意,工作器池不具备以下功能:
- 没有端点/网址
- 对已部署的容器在端口上监听请求没有要求
- 不自动扩缩
与 Cloud Run 服务类似,部署或更新工作器池会创建新的修订版本。
可以根据需要手动扩缩工作器池实例,以便为工作负载扩缩足够的实例。不过,如有必要,您可以创建自己的自动扩缩器。这方面的一个示例是 Kafka 自动扩缩器,它负责处理来自 Kafka 消息队列的工作负载的扩缩。