部署您的应用

本页面介绍了如何使用 Cloud Deploy 获取应用 到预期的目标运行时环境中。在此之前,您需要 创建交付流水线和目标

准备工作

本部分介绍了在启用之前,您需要做好哪些准备工作 来部署您的应用

  • 确保您的执行服务账号 拥有必要的 IAM 角色和权限

  • 创建交付流水线和目标

    Cloud Deploy 可以部署到 Google Kubernetes Engine、Cloud Run、 和 GKE Enterprise 集群。 目标配置不同 具体取决于您要部署到哪个容器

  • 拥有容器映像和清单。

    您需要一个或多个要部署的容器映像,以及一个或多个 Kubernetes 清单(部署到 GKE)或服务 YAML 文件(用于部署 到 Cloud Run)。

    您需要一个持续集成流水线或其他流程 并放置您的图片您的 CI 工具可以 Cloud Build、Jenkins 或任何可生成容器映像的 您可以提供给 Cloud Deploy 交付流水线的解决方案。

  • 有一个 skaffold.yaml 配置文件

    Cloud Deploy 调用 skaffold render 使用此文件呈现 Kubernetes 清单 skaffold apply 将其部署到目标环境中。为此,Skaffold 至少需要 最小 skaffold.yaml。您可以通过以下两种方式之一来获取该 ID:

    • 自行创建。

      请注意,skaffold.yaml 文件必须引用命名空间 对应于受支持的 Skaffold 版本 如下例所示:

      `apiVersion: skaffold/v4beta7`
      
    • 让它为您生成。

      如果您还没有 skaffold.yaml 文件,可以 让 Cloud Deploy 为您创建一个。 此文件适用于入门培训、学习或演示 Cloud Deploy,不应用于生产工作负载。

    请参阅将 Skaffold 与 Cloud Deploy 搭配使用 了解详情。此外,请参阅在 Cloud Deploy 中管理清单 详细了解如何将 Skaffold 和 Cloud Deploy 与 清单管理工具,例如 Helm、Kustomize 和 kpt。

为您选择的运行时环境设置 Cloud Deploy

Cloud Deploy 可以将您的应用部署到以下任一位置 运行时环境:

调用交付流水线以创建版本

将 Cloud Deploy 配置为部署到运行时后, 现在可以根据交付情况提交您的应用进行部署 创建流水线

  1. 运行常规持续集成 (CI) 流程,以创建一个或多个可部署的工件。

  2. 通过调用 Cloud Deploy 启动交付流水线 发布。

    从包含 Skaffold 配置的目录中运行以下命令:

    gcloud deploy releases create RELEASE_NAME --delivery-pipeline=PIPELINE_NAME --region=REGION
    

    由于此命令会创建一个 tar 文件,其中包含 以及任何子目录,则您可能不想运行此命令 从主目录或根目录从目录运行命令 或包含 --source= 选项,具体请参阅 。

    在此命令中...

    RELEASE_NAME 是为此版本指定的名称。该名称在此交付流水线的所有版本中必须是唯一的。

    您可以通过添加 '$DATE''$TIME' 或 两者都有。例如,如果您在世界协调时间 (UTC) 下午 3:07 调用此命令,则 'rel-$TIME' 将解析为 rel-1507'$DATE''$TIME' 必须采用英文单引号,并且 时间是调用该命令的机器上的世界协调时间 (UTC)。

    PIPELINE_NAME 是交付流水线的名称,该流水线将在目标的进展过程中管理此版本的部署。此名称必须与流水线定义中的 name 字段匹配。

    REGION 是您所在的区域的名称 创建发布版本,例如 us-central1。这是必填项。

此命令将包含您配置的 tar 文件上传到 Cloud Storage 并创建版本。Cloud Deploy 还会自动 创建发布并将映像部署到 交付流水线

除了此命令中显示的参数之外,您还可以添加以下选项之一:

  • --images=<name=path/name:$IMAGE_SHA>,<name=path/name:$IMAGE_SHA>

    映像名称的集合到映像完整路径替换。

  • --build-artifacts=<path/file>

    对 Skaffold 构建工件输出文件的引用,该文件可以传入 来表示图片完整路径替换项。

这两个选项是互斥的。

您还可以添加以下标志之一,让 Cloud Deploy 生成 skaffold.yaml 文件:

这两个选项是互斥的。

如果 .gcloudignore 文件中有任何文件, 指定您不希望包含在 tar 文件中的目录。

通过 Google Cloud 控制台创建版本

您可以使用 Google Cloud 控制台为提交内容创建版本 流水线。这对于试用 Cloud Deploy 非常有用,但 适合生产工作负载。

以下过程假定您已创建交付流水线并且 一个或多个目标(您也可以使用 Google Cloud 控制台) 创建交付流水线。)

  1. 对于特定交付,在交付流水线详情页面中 流水线中,点击创建版本

    显示“创建版本”按钮的交付流水线详细信息

  2. 选择容器字段中,粘贴或输入容器的路径 部署的映像您还可以使用预先填充的默认容器 以进行评估。

    您还可以点击选择,从 Artifact Registry 中选择一个容器映像 即 Container Registry

  3. 发布版本名称字段中为此版本提供一个唯一的名称,或使用 提供的默认名称

  4. 发布名称字段中提供发布的名称,或使用 提供的默认名称。

    此名称用于在此版本中发布到第一个目标。对于 后续目标,则可以在升级对话框中或 gcloud deploy releases promote 命令。

  5. (可选)在说明部分添加此版本的说明。 字段。

  6. 部署详情下,输入 GKE 的名称 部署或 Cloud Run 服务,也可以使用默认名称 。

    对于 GKE,Cloud Deploy 为 。对于 Cloud Run,Cloud Deploy 会生成 服务定义,用于创建服务。

  7. 点击创建

    “创建版本”对话框

Cloud Deploy 使用生成的清单或 Cloud Run 服务定义,以及生成的 skaffold.yaml, 来创建版本。

更改部署超时时间

对于部署到 GKE 和 GKE Enterprise 目标 有三个单独的超时影响系统 等待 Kubernetes 报告稳定的部署:

  • 对于 Cloud Build 可针对 Cloud Deploy 执行。

    您可以在 执行环境的配置

  • Skaffold 有一个 健康检查超时 (deploy.statusCheckDeadlineSeconds)、 这是等待部署稳定所需的时间(以秒为单位)。

    默认值是 600 秒(10 分钟)。要使用此超时, deploy.statusCheck 必须设置为 true。默认情况下,是的。如果 statusCheckfalse,则 无状态检查,kubectl apply 后发布会被标记为成功 已成功完成。

  • 对于 kind: Deployment 的 Kubernetes 资源, Deployment.spec.progressDeadlineSeconds、 该时间是 Kubernetes 等待 Deployment 报告为 稳定版。

    此超时仅适用于 Deployment 资源。这些是 前两个超时会协同工作:

    • 如果在 Kubernetes 中未设置 Deployment.spec.progressDeadlineSeconds,则 无论它是 默认或明确设置。

    • 如果在 Kubernetes 中设置了 Deployment.spec.progressDeadlineSeconds,则 Skaffold 会忽略自己的健康检查超时,而 Kubernetes 进程 即有效超时时间。但是,如果 Kubernetes 超时 明确设置为 600(10 分钟),则 Skaffold 会假定它是 默认(未设置)并忽略它,并使用 Skaffold 超时(如果已设置)。

    • 如果二者均未设置,则有效超时时间为 Skaffold 默认值为 600(10 分钟)。

    Deployment 之外,其他 Kubernetes 资源可能也有超时, 不会影响稳定性超时。如果存在上述任何一项,请查看 以确保它们不会与稳定性超时发生冲突。

    如果 Skaffold(或 Cloud Build)超时,GKE 会 继续运行Cloud Deploy 显示失败 它仍然可以在 GKE 集群上成功或失败

如需更改部署稳定性超时设置,请执行以下操作:

  1. 确保 deploy.statusCheckskaffold.yaml 中设置为 true

    默认为 true。如果值为 true,Skaffold 会等待健康检查 报告稳定的部署(受下一步中的超时值限制)。

  2. skaffold.yaml 中,设置 将 statusCheckDeadlineSeconds 设置为您要等待的秒数。

    deploy:
      ...
      statusCheck: true
      statusCheckDeadlineSeconds: 600
      ...
    

    默认值为 600(10 分钟)。Skaffold 等待这个时间 稳定的部署如果在部署稳定之前超过这个时间, 部署失败

  3. 您还可以选择添加 tolerateFailuresUntilDeadline: true statusCheckDeadlineSeconds之后。

    如果单个部署失败,此设置会指示 Skaffold 不要退出,而是 在 statusCheckDeadlineSeconds 到期之前容忍故障。此设置 如果您的资源可能需要更多时间,可以提供帮助 (在状态检查截止日期之前)以达到稳定状态。

    例如,如果您使用的是 Istio 或 Cloud Service Mesh, 部署失败,并显示类似如下的消息:

    error iptables validation failed; workload is not ready for Istio.
    When using Istio CNI, this can occur if a pod is scheduled before the node is ready.
    

    此设置仅适用于 Skaffold 2.0 或更高版本。

  4. 在 Kubernetes 清单中,为 kind: Deployment 的资源设置 将Deployment.spec.progressDeadlineSeconds的值更改为您为 statusCheckDeadlineSeconds.

后续步骤