定义自定义分析

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,您需要拥有 Service Usage Admin IAM 角色 (roles/serviceusage.serviceUsageAdmin),该角色包含 serviceusage.services.enable 权限。了解如何授予 角色

    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,您需要拥有 Service Usage Admin IAM 角色 (roles/serviceusage.serviceUsageAdmin),该角色包含 serviceusage.services.enable 权限。了解如何授予 角色

    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 节可以直接在部署策略 配置 (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 对自定义容器没有任何要求,只需其返回零或非零退出代码即可。如果容器返回非零退出代码,则分析失败。

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

可用的环境变量

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 服务成功部署后生成。因此,此环境变量仅在部署后钩子和 验证作业中可用。

  • 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

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

后续步骤