定义自定义分析

Cloud Deploy 支持使用 Google Cloud Observability 基于指标和同样来自 Google Cloud Observability 的其他数据生成的提醒的分析作业。不过,您也可以扩展 Cloud Deploy 以使用其他指标提供方。本文档介绍了如何配置和使用分析作业,以及自定义容器(包含用于分析所选提供商的指标的逻辑)的要求。

准备工作

  1. 登录您的 Google 账号。

    如果您还没有 Google 账号,请注册新账号

  2. 安装 Google Cloud CLI。

  3. 如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI

  4. 如需初始化 gcloud CLI,请运行以下命令:

    gcloud init
  5. 验证您是否拥有完成本指南所需的权限

  6. 验证是否已为您的 Google Cloud 项目启用结算功能

  7. 启用 Compute Engine 和 Cloud Deploy API(如果尚未启用):

    启用 API 所需的角色

    如需启用 API,您需要拥有 serviceusage.services.enable 权限。如果您创建了项目,则可能已经通过 Owner 角色 (roles/owner) 获得了此权限。否则,您可以通过 Service Usage Admin 角色 (roles/serviceusage.serviceUsageAdmin) 获得此权限。了解如何授予角色

    gcloud services enable clouddeploy.googleapis.com  compute.googleapis.com
  8. 安装 Google Cloud CLI。

  9. 如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI

  10. 如需初始化 gcloud CLI,请运行以下命令:

    gcloud init
  11. 验证您是否拥有完成本指南所需的权限

  12. 验证是否已为您的 Google Cloud 项目启用结算功能

  13. 启用 Compute Engine 和 Cloud Deploy API(如果尚未启用):

    启用 API 所需的角色

    如需启用 API,您需要拥有 serviceusage.services.enable 权限。如果您创建了项目,则可能已经通过 Owner 角色 (roles/owner) 获得了此权限。否则,您可以通过 Service Usage Admin 角色 (roles/serviceusage.serviceUsageAdmin) 获得此权限。了解如何授予角色

    gcloud services enable clouddeploy.googleapis.com  compute.googleapis.com

所需的角色

如需获得创建和使用分析作业所需的权限,请让您的管理员为您授予项目账号的以下 IAM 角色:

如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

您也可以通过自定义角色或其他预定义角色来获取所需的权限。

为确保 Cloud Deploy 服务账号具有创建和使用分析作业所需的权限,请让您的管理员为 Cloud Deploy 服务账号授予项目的以下 IAM 角色:

如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

您的管理员还可以通过自定义角色或其他预定义角色向 Cloud Deploy 服务账号授予所需的权限。

配置自定义分析作业

自定义分析作业与使用 Google Cloud Observability 中的提醒的分析作业相同,但自定义作业使用一个或多个引用自定义容器的任务,以及要在这些容器上运行的命令,以处理来自指标提供方的数据。

本部分介绍了如何配置使用非Google Cloud 监控提供方的 Cloud Deploy 分析作业。

analysis stanza 可直接在部署策略配置(strategy.standard.analysis,用于标准策略)中使用。如果您想按阶段配置分析,可以使用自定义 Canary (strategy.canary.customCanaryDepolyment.phaseConfigs.phaseId.analysis)。

strategy:
  standard:
    analysis:
      duration: DURATION
      customChecks:
      - id: CHECK_ID
        frequency: FREQUENCY
        task:
          type: container
          image: IMAGE_NAME
          command: COMMAND
          args: [ARGS]
          env:
            [VAR_NAME: VALUE]

其中:

  • DURATION

    是运行分析作业的时长(以秒为单位)。时长到期后,作业即完成。如果分析失败(容器返回非零退出代码),作业会在时长到期之前完成 (FAILED)。

  • CHECK_ID

    是单个检查的 ID。此 ID 在相应分析作业中必须是唯一的

  • FREQUENCY

    表示运行单个检查的频率(以秒为单位)。

  • IMAGE_NAME

    是用于标识容器映像的路径和名称。

  • COMMAND

    是要在该容器上运行的命令,例如 shell 脚本 (/bin/bash)。

  • ARGS

    是相应命令的实参列表。这是一个逗号分隔列表。如果您的 COMMAND_TO_RUN 是“/bin/sh”,那么此处的某个实参将是 -c,另一个实参将是您要在调用的 shell 中运行的整个命令。

  • VAR_NAME

    是要传递给容器的环境变量的名称。您可以使用环境变量来配置容器的行为。也就是说,变量及其值会告知容器在指标提供方中具体要监控哪些内容。

    您可以在此处使用系统参数作为环境变量。

  • VALUE

    是每个环境变量的值。Cloud Deploy 不会对这些环境变量执行任何操作,只会将其及其值传递给您的容器。由容器决定是否在分析逻辑中使用这些值。

自定义分析定义中的每个检查都包含一个引用容器的任务、要在该容器上运行的命令,以及要传递给该容器的任何适用的环境变量。

自定义容器

对于自定义分析,您提供的容器负责分析遥测数据、日志或您使用的指标提供方提供的其他数据。Cloud Deploy 分析作业会等待容器返回代码。

自定义容器必须执行的操作

自定义容器负责从指标提供方提取数据,确定指标、日志或其他数据是否表明应用正常运行,并将结果返回给 Cloud Deploy。

自定义容器必须返回的内容

除了返回零或非零退出代码之外,Cloud Deploy 对自定义容器没有任何其他要求。如果容器返回非零退出代码,则分析失败。

容器可以将结果写入 Cloud Deploy 提供的 Cloud Storage 存储桶中名为 results.json(采用 JSON 格式)的文件。该文件将包含元数据,以键值对的形式呈现。此内容不是必需的。

可用的环境变量

Cloud Deploy 还在执行环境中提供并填充以下环境变量。 您可以在部署钩子验证作业自定义目标渲染或部署中使用这些环境变量。

  • ANTHOS_MEMBERSHIP

    对于类型为 ANTHOS 的目标,Anthos 会员资格的完全指定资源名称。

  • CLOUD_RUN_LOCATION

    对于类型为 RUN 的目标,这是 Cloud Run 服务部署到的区域。

  • CLOUD_RUN_PROJECT

    对于类型为 RUN 的目标,是指创建 Cloud Run 服务的项目。

  • CLOUD_RUN_SERVICE

    对于 RUN 类型的目标,已部署的 Cloud Run 服务的名称。

  • CLOUD_RUN_SERVICE_URLS

    对于 RUN 类型的目标,最终用户将用于访问您的服务的网址(或以英文逗号分隔的网址列表)。您可以在Google Cloud 控制台中,在服务的 Cloud Run 服务详情中找到这些信息。在 Cloud Run 服务成功部署后,Cloud Run 会生成网址。因此,此环境变量仅在 postdeploy 钩子和验证作业中可用。

  • CLOUD_RUN_REVISION

    对于类型为 RUN 的目标,这是 Cloud Run 服务的特定修订版本。

  • GKE_CLUSTER

    对于类型为 GKE 的目标,Google Kubernetes Engine 集群的完整指定资源名称,例如 projects/p/locations/us-central1/clusters/dev

  • TARGET_TYPE

    目标的具体运行时类型。GKEANTHOSRUN。 对于自定义目标,此值不会设置。

  • CLOUD_DEPLOY_LOCATION

    包含 Cloud Deploy 资源的区域。

  • CLOUD_DEPLOY_DELIVERY_PIPELINE

    交付流水线的 ID。

  • CLOUD_DEPLOY_TARGET

    目标的 ID。

  • CLOUD_DEPLOY_PROJECT

    包含 Cloud Deploy 资源的项目对应的 Google Cloud 项目编号。

  • CLOUD_DEPLOY_PROJECT_ID

    项目的 Google Cloud 项目 ID。

  • CLOUD_DEPLOY_RELEASE

    运行钩子的发布版本的 ID。

  • CLOUD_DEPLOY_ROLLOUT

    包含钩子作业的发布版本的 ID。

  • CLOUD_DEPLOY_JOB_RUN

    表示作业当前执行的作业运行的 ID。

  • CLOUD_DEPLOY_PHASE

    发布中的阶段,包含部署钩子、验证作业或自定义渲染/部署的作业。

后续步骤