Cloud Workstations 架构

Cloud Workstations 可管理 Google Cloud 资源,例如 Compute Engine 虚拟机永久性磁盘 (PD),让您更清楚地了解和掌控项目的资源。例如,您可以设置磁盘快照时间表政策,以针对所有工作站 PD 强制执行备份政策。同样,在项目中拥有虚拟机可让您顺畅地访问和管理 VPC 网络中的资源。

下图展示了 Cloud Workstations 的架构。

架构图

图 1. Cloud Workstations 架构

工作站集群

工作站集群包含并管理项目中的单个云区域VPC 网络中的一组工作站。每个工作站集群都包含两个由Google Cloud管理的组件:控制器和网关。

  • 控制器:管理项目中的虚拟机实例和其他工作站资源的生命周期。

    控制器使用 Compute Engine API 来管理资源的生命周期,并利用 Private Service Connect 将流量路由到工作站的虚拟机。

  • 网关:接收来自客户端的流量,这些流量的目标是特定工作站,并将流量转发到相应的虚拟机实例。每个工作站集群都有一个唯一的域名,并且每个工作站都可以通过工作站集群网域的子网域访问,例如 $WORKSTATION_ID.$CLUSTER_ID.cloudworkstations.dev

工作站集群的其他功能如下:

  • 管理员和平台团队创建工作站集群,这些集群定义了特定区域中的一组工作站及其所连接的 VPC 网络。

  • 工作站集群与 Google Kubernetes Engine (GKE) 集群无关。

  • 每个工作站集群都有一个专用控制器,该控制器通过 Private Service Connect 连接到工作站所在的 VPC(这不会影响 VPC 对等互连限制)。此控制器在其整个生命周期内管理工作站资源,并通过公共集群网关为工作站提供网络出站和入站流量。

  • 每个云区域至少需要一个工作站集群。

  • 如有必要,您还可以启用完全专用网关,以便只有专用网络中的端点可以访问 Cloud Workstations。

VPC 网络

创建工作站集群时,您需要指定用于托管资源的项目和 VPC 网络。然后,Cloud Workstations 会在您的项目中预配以下资源:

  • Private Service Connect:在 Cloud Workstations 控制器与您的 VPC 之间建立连接,以便在您的项目中创建资源。

  • 虚拟机实例:工作站启动后,系统会在您的项目和 VPC 内动态创建 Compute Engine 虚拟机。此虚拟机会在用户会话结束时或在可配置的会话超时时间过后自动删除。

    • 虚拟机网关:从工作站集群网关拉取客户端流量,对其进行身份验证和授权,然后将其转发到容器。

    • 容器:定义工作站中预安装的工具,例如 IDE 或代码编辑器,以及工作站配置指定的任何其他程序或设置。

      Cloud Workstations 提供许多预配置了热门 IDE 和语言工具的基础映像。此外,管理员和平台团队还可以通过创建和指定包含必要工具的自定义容器映像来定制其环境,以满足开发者的需求。这些容器映像可以扩展 Cloud Workstations 基础映像,也可以是平台团队创建的新的自定义 Linux 容器映像。

  • 永久性磁盘:附加到工作站虚拟机的永久性磁盘,已装载到 /home 文件夹,可在会话结束后存储数据和文件。

资源生命周期

Cloud Workstations 会管理虚拟机、容器映像和永久性磁盘,以用作每个工作站的运行时环境。在工作站配置中配置这些资源的规范。

当工作站启动时,Cloud Workstations 会执行以下操作:

  1. 创建虚拟机。
  2. 将工作站容器映像拉取到虚拟机上。
  3. 首次启动工作站时,系统会创建一个永久性磁盘,用作工作站的 /home 目录。
  4. 将永久性磁盘挂接到虚拟机。
  5. 在虚拟机上启动容器,并将永久性磁盘装载到容器中的 /home 目录。

会话结束后,Cloud Workstations 会删除虚拟机,但会分离并保留永久性磁盘,以便在未来的工作站会话中使用。工作站服务会保留磁盘,直到工作站被删除,届时永久性磁盘也会被删除,除非配置为保留(可选)。

资源池

管理员和平台团队可以选择使用池大小工作站配置选项来汇集虚拟机和永久性磁盘,以便更快地启动工作站。如果指定了该参数,服务会预先将指定数量的永久性磁盘和虚拟机放入池中,并在分配工作站之前将容器映像预先拉取到虚拟机上。池中未分配的虚拟机和磁盘每 12 小时会自动删除并重新创建。这样可以缩短工作站启动时间,因为无需等待创建虚拟机并将容器映像拉取到虚拟机上。

启用池化后,Cloud Workstations 在启动工作站时会执行以下操作:

  1. 从池中选择已预先拉取容器映像的虚拟机。
  2. 首次启动工作站时,从池中选择一个永久性磁盘。
  3. 将永久性磁盘挂接到虚拟机。
  4. 在虚拟机上启动容器映像,并将永久性磁盘装载到容器映像中的 /home 目录。
  5. 通过创建新的虚拟机和永久性磁盘来替换已分配的虚拟机和永久性磁盘,从而重新填充池。

会话结束后,Cloud Workstations 会删除虚拟机,但会分离并保留永久性磁盘,以便在未来的工作站会话中使用。工作站服务会保留磁盘,直到工作站被删除,届时永久性磁盘也会被删除,除非配置为保留(可选)。

容器映像更新

由于工作站容器映像已预先拉取到池化虚拟机上,因此在具有相同映像标记的远程映像仓库中对容器映像进行的更新不会被提取,直到所有池化虚拟机在 12 小时后被分配或删除。此时,系统会创建新的虚拟机来补充节点池并拉取更新后的容器映像。

如需强制刷新池以立即获取容器映像更新,管理员可以将 pool_size 设置为 0,然后再将其设置回首选的 pool_size。在 Google Cloud 控制台中,停用工作站配置中的快速启动工作站功能,保存配置,将其重新设置为首选数量,然后再次保存。

或者,管理员和平台团队可以更新工作站配置中 container.image 字段中的映像标记,这会强制刷新池以获取新的容器映像标记。

使用映像流式传输缩短工作站启动时间

Cloud Workstations 支持映像流式传输,该功能可缩短工作站容器映像拉取时间,从而缩短工作站启动时间。

Cloud Workstations 中的映像流式传输通常可将容器映像拉取时间从数分钟缩短到数秒,并且工作站容器通常无需等待整个映像下载完毕即可开始运行。

要求

您必须满足以下要求才能在 Cloud Workstations 中使用映像流式传输:

  • 您必须在工作站宿主项目中启用 Container File System API。

    启用 Container File System API

    或者,您也可以运行以下 gcloud CLI 命令,在工作站宿主项目中启用 Container File System API:

    gcloud services enable containerfilesystem.googleapis.com
    

  • 您的容器映像必须存储在 Artifact Registry 中。

  • 您必须指定要在工作站配置中使用的服务账号。

  • 如果您的集群位于 VPC Service Controls 边界内,您必须添加一项出站规则,以允许您的服务账号访问托管容器映像的项目中的 Container File System API。如果您使用的是预配置的 IDE,则必须将 cloud-workstations-images 项目(项目编号 662288601415)添加到许可名单中。

限制

  • 在符合条件的映像首次拉取期间,您可能不会注意到映像流式传输的优势。但是,在映像流缓存映像后,工作站上将来的映像将受益于映像流式传输。

  • 还存在其他 GKE 映像流式传输限制

空闲超时

您可以将工作站配置为在一段时间的空闲后自动关停。每次收到传入的网络请求以及每次发出 workstations.Start API 调用时,空闲超时都会重置。此外,安装在基本工作站映像中的预配置 IDE 预安装了一个插件,用于检测与 IDE 的互动(鼠标点击、按键等)并重置空闲超时时间。

如果您启动长时间运行的后台进程,并且停止与工作站互动,则可能会达到空闲超时阈值。这会导致工作站关机。 如果需要保持工作站处于活跃状态,您可以使用基本工作站映像中提供的 /google/scripts/keep_alive.sh 脚本来防止出现空闲超时。或者,在后台进程中触发 workstation.Start API 调用,以防止空闲关机。例如,如果您使用的是 Google Cloud CLI,则可以通过运行 gcloud workstations start 命令来执行此操作。