自动扩缩工作负载的自定义指标和外部指标

本页面讨论自定义指标和外部指标,横向 Pod 自动扩缩程序可以使用这些指标自动增加或减少给定工作负载的副本数量。

纵向 Pod 自动扩缩程序不同,横向 Pod 自动扩缩程序不会修改工作负载的已配置请求。横向 Pod 自动扩缩程序仅扩缩副本的数量。

除了工作负载本身以外,自定义指标和外部指标可让工作负载适应其他条件。假设有一个从队列中提取任务并完成任务的应用。对于处理任务的时间或待处理任务的数量,您的应用可能有相应的服务等级目标 (SLO)。如果队列不断增长,则使用更多的工作负载副本可能会实现工作负载的 SLO。如果队列为空或减少的速度超出预期,您可以通过运行较少的副本来节省费用,同时仍能实现工作负载的 SLO。

自定义指标和外部指标各不相同:

  • 自定义指标是通过在 Kubernetes 中运行的应用报告的。如需了解详情,请参阅本主题中的自定义指标
  • 外部指标是通过未在您的集群上运行(但其性能会影响您的 Kubernetes 应用)的应用或服务报告的。如需了解详情,您可以通过 Cloud Monitoring 或 Pub/Sub 报告该指标。

您还可以逆向看待自定义指标和外部指标。例如,如果队列中的任务数量较少,可能表示应用的运行状况良好,适合自动缩减。

如需了解详情,请参阅本主题中的自定义指标外部指标

自定义指标

您的应用可以向 Cloud Monitoring 报告自定义指标。 您可以将 Kubernetes 配置为对这些指标做出响应并自动扩缩工作负载。例如,您可以根据指标(例如每秒查询次数、每秒写入次数、网络性能、与其他应用通信的延迟时间或其他适合工作负载的指标)来扩缩应用。

您可以为以下任一项选择自定义指标:

  • 特定节点、Pod 或任何类型的任何 Kubernetes 对象,包括 CustomResourceDefinition (CRD)。
  • 某个 Deployment 中所有 Pod 报告的指标的平均值

您可以通过添加 selector 字段(设置为标签的键和值)来按标签过滤给定的自定义指标。例如,您可以将 selector: "environment=prod" 设置为仅聚合标签为 environment=prod 的指标值。选择器可以是多个标签表达式的二元组合。如需了解详情,请参阅 Monitoring 文档中的基于日志的指标标签

在可使用自定义指标之前,您必须在 Google Cloud 项目中启用 Monitoring,并在集群上安装 Stackdriver 适配器。将自定义指标导出到 Monitoring 后,它们可触发 Pod 横向自动扩缩程序的自动扩缩事件,以更改工作负载的形态。

自定义指标必须以特定格式从您的应用导出。Monitoring 界面包含一款自动创建指标的工具,可帮助您自动创建自定义指标。如果您使用该自动创建工具来创建自定义指标,则 Monitoring 会自动检测到这些指标。

如需了解详情,请参阅有关使用自定义指标自动扩缩 Deployment 的教程。

外部指标

如果您需要根据 Kubernetes 之外的应用或服务的性能来扩缩工作负载,可以配置外部指标。例如,如果未发送的消息数量呈上升趋势,您可能需要增加应用从 Pub/Sub 中提取消息的容量。

外部应用需要将指标导出到集群可以访问的 Monitoring 实例。随着时间的推移,每个指标的趋势都会导致横向 Pod 自动扩缩程序自动更改工作负载的形态。

如需了解详情,请参阅有关使用外部指标自动扩缩 Deployment 的教程。

导入指标

如需将指标导入 Monitoring,您可以执行以下操作之一:

  • 使用 Cloud Monitoring API 从应用导出指标,
  • 将应用配置为以 Prometheus 格式发出指标。然后,运行 Prometheus-to-Stackdriver 适配器。这是一个小型开源辅助信息文件容器,用于抓取指标,然后将其转换为 Monitoring 格式并推送到 Monitoring API。

如需了解详情,请参阅 Monitoring 文档中的创建指标

后续步骤