使用本指南将工作负载迁移到 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 功能,其中包括:
- 集群和 Pod 功能,例如启动、活跃和就绪探测以及服务发现。
- 配置:
- ConfigMaps - 您可以使用 Secret Manager 将 ConfigMaps 转换为 Secret。
- NVIDIA GPU
访问权限控制:
您可以使用 Cloud Run 中的 IAM 来实现对资源访问权限的相同控制。此外,请考虑使用服务身份。
迁移注意事项
您必须查看并了解产品之间的以下差异,以确保您可以移植所有依赖项和要求。
Secret
在 Cloud Run 中,您可以选择将 Secret 作为环境变量或卷装载,但包含敏感信息的 Secret 应存储在 Secret Manager 中。
Secret Manager 中的 Secret 和 Kubernetes 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。
通过运行以下命令将 Knative serving 服务导出到本地 YAML 文件:
gcloud run services describe SERVICE --format export --namespace NAMESPACE --cluster CLUSTER --platform gke > FILENAME.yaml
您需要进行如下替换:
- 将
SERVICE
替换为您的 Knative serving 服务的名称。 - 将
NAMESPACE
替换为运行服务的命名空间。 - 将
CLUSTER
替换为运行服务的集群的名称。 - 将
FILENAME
替换为您选择的唯一文件名。
- 将
针对 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: {} ...
- 您必须搜索 Kubernetes 命名空间并将其替换为 Google Cloud 项目的 ID。例如,您必须将
使用
--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
。
- 将
配置对 Cloud Run 服务的访问权限:
默认情况下,无法从外部访问 Cloud Run 服务。如需将服务公开到互联网并允许未经身份验证的请求,您必须允许公共(未经身份验证)访问。
如需将此服务配置为仅限内部专用访问(例如在 Cloud Run 服务之间),请参阅对服务到服务进行身份验证。
在 Google Cloud 控制台的服务页面中,您可以点击显示的网址链接,以打开已部署服务的唯一、稳定的端点。
将流量迁移到您的服务
在测试新部署的服务并准备好迁移所有生产流量后,您可以配置自定义网域并向注册商更新 DNS 记录。按照映射自定义网域中的说明进行操作。