将 Knative serving 服务迁移到 Cloud Run

使用本指南将工作负载迁移到 Cloud Run。通常,迁移工作负载需要移植任何基于 Kubernetes 的功能,然后将每个现有服务重新部署到 Cloud Run。

迁移到 Cloud Run 的主要优势:

  • 全托管式无服务器产品,用于实现 Knative Serving API 规范并遵循容器合同。

  • Cloud Run 的 v1 Admin API 旨在通过 Knative serving 最大限度地提高可移植性。

  • 用户体验在 Cloud Run 和 Knative serving 中类似:

    • gcloud run 命令组用于这两个产品。
    • Google Cloud 控制台中有类似界面布局和行为。

准备工作

Cloud Run 不支持以下 Google Kubernetes Engine 功能,其中包括:

迁移注意事项

您必须查看并了解产品之间的以下差异,以确保您可以移植所有依赖项和要求。

Secret

在 Cloud Run 中,您可以选择将 Secret 作为环境变量或卷装载,但包含敏感信息的 Secret 应存储在 Secret Manager 中。

Secret Manager 中的 SecretKubernetes Secret 之间的重要区别:

功能 Secret Manager Secret Kubernetes Secret
名称中允许使用的字符 [a-zA-Z0-9_-]{1,255} [a-z0-9-.]{1,253}
版本控制 对 Secret 进行版本控制 无支持
Secret 载荷 单个 []byte 映射:<string, string>

了解如何使用 Secret Manager 为 Knative serving 服务的 Secret 密钥创建带有版本控制功能的 Secret

网络

以下信息可帮助您将现有网络配置移植到 Cloud Run。

服务端点
Cloud Run 不支持 Knative serving 服务的 Kubernetes 端点详细了解 Cloud Run 中的唯一端点
网域映射
Cloud Run DomainMapping API 与 Knative serving 兼容。但是,Cloud Run 在可用的 Cloud Run 位置的子集中提供网域映射。建议将全局 HTTP(S) 负载均衡器用于您的自定义网域。
VPC 连接
Cloud Run 服务位于 VPC 之外。如需与 VPC 内的资源通信,您必须使用无服务器 VPC 访问通道连接器
入站流量控制
如果为专用内部网络配置了 Knative serving 服务,并且使用了内部负载均衡器 (ILB),您可以将 Cloud Run 服务配置为:Ingress = Internal。将服务配置为 internal 会限制对 VPC 或其他 Cloud Run 服务的访问。详细了解服务到服务的通信

迁移服务

如需迁移服务,您必须导出 Knative serving 服务,修改导出的 YAML 文件,然后将重新配置的服务部署到 Cloud Run。

  1. 通过运行以下命令将 Knative serving 服务导出到本地 YAML 文件:

    gcloud run services describe SERVICE --format export --namespace NAMESPACE --cluster CLUSTER --platform gke > FILENAME.yaml
    

    您需要进行如下替换:

    • SERVICE 替换为您的 Knative serving 服务的名称。
    • NAMESPACE 替换为运行服务的命名空间。
    • CLUSTER 替换为运行服务的集群的名称。
    • FILENAME 替换为您选择的唯一文件名。
  2. 针对 Cloud Run 修改导出的 FILENAME.yaml 文件:

    • 您必须搜索 Kubernetes 命名空间并将其替换为 Google Cloud 项目的 ID。例如,您必须将 namespace:default 替换为 namespace:my-unique-id
    • 您必须更新任何不受支持的功能的所有配置。
    • 您必须删除以下任何特性及其值:

      • metadata.annotations.kubectl.kubernetes.io/last-applied-configuration
      • metadata.managedFields
      • spec.template.spec.containers.readinessProbes
      • spec.template.spec.enableServiceLinks

      例如,您可能需要从 spec: > template: > spec: > containers: 特性下移除以下配置:

      ...
       readinessProbe:
         successThreshold: 1
         tcpSocket: {}
      ...
      
  3. 使用 --platform managed 标志将修改后的 .yaml 文件部署到 Cloud Run。详细了解如何部署

    请注意,您可以将同一个 Google Cloud 项目用于 Cloud Run。

    gcloud run services replace FILENAME.yaml --platform managed --region REGION
    

    您需要进行如下替换:

    • FILENAME 替换为您创建的已导出配置文件的名称。
    • REGION 替换为受支持的 Cloud Run 位置。例如:us-central1
  4. 配置对 Cloud Run 服务的访问权限:

  5. 在 Google Cloud 控制台的服务页面中,您可以点击显示的网址链接,以打开已部署服务的唯一、稳定的端点。

    转到 Cloud Run

将流量迁移到您的服务

在测试新部署的服务并准备好迁移所有生产流量后,您可以配置自定义网域并向注册商更新 DNS 记录。按照映射自定义网域中的说明进行操作。