将容器部署到 Cloud Run

如果您使用默认提供的增强型 Linux 服务管理器迁移容器工作负载,则可以在 Cloud Run 上部署容器,而无需对容器进行任何额外的更改。

如需在 Cloud Run 上部署容器,请执行以下操作:

  1. 安装 Migrate to Containers 1.15.0 版

  2. 添加迁移来源创建迁移,与现有运行时相同。

  3. 根据需要自定义您的迁移计划

    1. 下载迁移计划。迁移计划由 AppXGenerateArtifactsFlow 表示。

      例如,对于名为“my-migration”的迁移:

      migctl migration get my-migration
    2. 在文本编辑器中打开下载的迁移计划 my-migration.yaml

    3. 验证增强的 Linux 服务管理器。v2kServiceManager 标志默认设置为 true。但是,如果 Migrate to Containers 检测到服务管理器不支持的系统服务,您将会收到提醒,并且 v2kServiceManager 标志将设置为 false。当标志为 false 时,迁移将使用支持服务的旧版运行时。

      以下提醒会与不受支持的服务一起提供:

      Service is not supported by v2k service manager, therefore legacy runtime
      will be used instead of v2k service manager, and migrated workload would
      not fit running on Autopilot clusters of Cloudrun.

      发现不受支持的服务时,您还可以选择手动将标志设置为 true。在这种情况下,您可以选择将不受支持的服务保留在无法运行的生成映像上,或者通过从迁移计划中移除服务来排除该服务。

      如需启用新服务管理器,请将标志重置为 true

      v2kServiceManager: true
      
    4. 执行迁移所需的任何其他自定义,如自定义迁移计划中所述。

    5. 修改完成后,保存修改后的文件。

    6. 上传修改后的迁移计划:

      migctl migration update my-migration --main-config my-migration.yaml
  4. 生成查看迁移工件,与现有运行时相同。

  5. 修改新的 services-config.yaml 文件以配置容器的初始化属性。保存文件并重新构建容器映像以应用更改。

    如需详细了解如何修改 services.yaml 文件,请参阅使用 services-config.yaml

  6. 生成迁移工件后,在编辑器中打开 deployment_spec.yaml 文件以确定容器映像的位置。例如,您应该会看到以下内容:

    spec:
      containers:
      - image: gcr.io/PROJECT_NAME/IMAGE_NAME:LABEL

    其中,gcr.io/PROJECT_NAME/IMAGE_NAME:LABEL 指定容器映像的位置。

  7. 使用以下命令在 Cloud Run 上部署容器:

    gcloud run deploy my-runtime
        --image gcr.io/PROJECT_NAME/IMAGE_NAME:LABEL
        --region REGION --platform managed
        --set-env-vars=HC_V2K_SERVICE_MANAGER=true --port PORT 

    --set-env-vars 属性将 HC_V2K_SERVICE_MANAGER 环境变量设置为 true 以启用增强型 Linux 服务管理器。

    --port 属性指定将请求发送到容器时的端口。默认端口为 8080。

示例:在 Cloud Run 上部署快速入门容器

使用当前的快速入门指南迁移包含简单 Web 服务器的容器,然后将其部署到 Cloud Run。您只需对快速入门流程进行以下更改:

  1. 迁移虚拟机的第 3 步,即“查看迁移计划”中,在迁移计划中将 v2kServiceManager 设置为 true,然后保存计划:

    v2kServiceManager: true
    
  2. 迁移完成后,在编辑器中打开 deployment_spec.yaml 文件以确定容器的位置。例如,您应该会看到以下内容:

    spec:
      containers:
      - image: gcr.io/PROJECT_NAME/quickstart-instance:LABEL
  3. 部署迁移后的工作负载部分中,使用以下命令将容器映像部署到 Cloud Run:

    gcloud run deploy my-runtime
        --image gcr.io/PROJECT_NAME/quickstart-instance:LABEL
        --region REGION --platform managed
        --set-env-vars=HC_V2K_SERVICE_MANAGER=true --port 80 

    迁移后的容器中的 Web 服务器会监听端口 80 上的请求,因此请确保在部署容器时指定该端口。

    您应该会看到以下响应,其中包括 Cloud Run 服务的网址:

    Allow unauthenticated invocations to [my-runtime] (y/N)?  y
    
    Deploying container to Cloud Run service [my-runtime] in project [PROJECT_NAME] region [REGION]
    Deploying new service... Done.
      ✓ Creating Revision…
      ✓ Routing traffic…
        Setting IAM Policy…
    Done.
    Service [my-runtime] revision [my-runtime-00001-sas] has been deployed and is serving 100 percent of traffic.
    Service URL: https://my-runtime-s5ahdq-uc.a.run.app
  4. 在 Cloud Shell 中,使用容器的服务网址向容器发出请求,并传入您的凭据:

    curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" https://my-runtime-s5ahdq-uc.a.run.app

    您现在应该会看到“Hello World!”页面。

后续步骤