将 Knative 服务服务迁移到 Cloud Run

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

迁移到 Cloud Run 的主要优势:

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

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

  • Cloud Run 和 Knative 服务的用户体验类似:

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

准备工作

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 服务服务的密钥创建版本化 Secret

网络

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

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

迁移服务

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

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

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

    您需要在其中:

    • SERVICE 替换为您的 Knative 服务服务的名称。
    • 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 Console 的服务页面中,您可以点击显示的网址链接,以打开已部署服务的唯一、稳定的端点。

    转到 Cloud Run

将流量迁移到您的服务

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