监控启动延迟时间指标


本页介绍了可用于监控 Google Kubernetes Engine (GKE) 工作负载和底层集群节点的启动延迟时间的指标和信息中心。您可以使用这些指标来跟踪、排查问题并缩短启动延迟时间。

本页面适用于需要监控和优化工作负载启动延迟时间的平台管理员和运维人员。如需详细了解我们在 Google Cloud 内容中提及的常见角色,请参阅常见的 GKE Enterprise 用户角色和任务

概览

启动延迟时间会显著影响应用对流量激增的响应方式、其副本从中断中恢复的速度,以及集群和工作负载的运营费用效率。监控工作负载的启动延迟时间有助于您检测延迟时间下降情况,并跟踪工作负载和基础架构更新对启动延迟时间的影响。

优化工作负载启动延迟时间具有以下好处:

  • 缩短服务在流量高峰期间向用户响应的延迟时间。
  • 减少在创建新副本时为吸收需求高峰而需的过剩服务容量。
  • 缩短已部署且在等待其余资源启动期间处于空闲状态的资源的空闲时间。

准备工作

在开始之前,请确保您已执行以下任务:

  • 启用 Google Kubernetes Engine API。
  • 启用 Google Kubernetes Engine API
  • 如果您要使用 Google Cloud CLI 执行此任务,请安装初始化 gcloud CLI。 如果您之前安装了 gcloud CLI,请运行 gcloud components update 以获取最新版本。
  • 启用 Cloud Logging 和 Cloud Monitoring API。

    Enable the APIs

要求

如需查看工作负载启动延迟时间的指标和信息中心,您的 GKE 集群必须满足以下要求:

  • 您必须使用 GKE 1.31.1-gke.1678000 或更高版本。
  • 您必须配置系统指标收集。
  • 您必须配置系统日志的收集。
  • 在集群上使用 POD 组件启用 kube 状态指标,以查看 Pod 和容器指标。

所需的角色和权限

如需获得启用日志生成以及访问和处理日志所需的权限,请让管理员向您授予以下 IAM 角色:

  • 查看 GKE 集群、节点和工作负载:项目的 Kubernetes Engine 查看器 (roles/container.viewer)
  • 访问启动延迟时间指标并查看信息中心:针对您的项目的 Monitoring Viewer (roles/monitoring.viewer)
  • 访问包含延迟时间信息的日志(例如 Kubelet 映像拉取事件),并在 Logs Explorer 和 Log Analytics 中查看这些日志: 针对您的项目的 Logs Viewer (roles/logging.viewer)

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

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

启动延迟时间指标

启动延迟时间指标包含在 GKE 系统指标中,并会导出到与 GKE 集群所在项目相同的 Cloud Monitoring。

此表中的 Cloud Monitoring 指标名称必须以 kubernetes.io/ 为前缀。表中的条目已省略该前缀。

指标类型(资源层次结构级别
显示名称
种类、类型、单位
受监控的资源
说明
标签
pod/latencies/pod_first_ready(项目)
Pod 首次就绪延迟时间
GAUGEDoubles
k8s_pod
Pod 端到端启动延迟时间(从 Pod CreatedReady),包括映像拉取。每 60 秒采样一次。
node/latencies/startup(项目)
节点启动延迟时间
GAUGEINT64s
k8s_node
节点的总启动延迟时间,即从 GCE 实例的 CreationTimestamp 首次转换为 Kubernetes node ready 所用的时间。每 60 秒采样一次。

accelerator_family:基于硬件加速器对节点进行的分类:gputpucpu
kube_control_plane_available:在 KCP(kube 控制平面)可用时是否收到了节点创建请求。
autoscaler/latencies/per_hpa_recommendation_scale_latency_seconds(项目)
每个 HPA 建议的扩缩延迟时间
GAUGEDOUBLEs
k8s_scale
HPA 目标的Pod 横向自动扩缩器 (HPA) 扩缩建议延迟时间(从创建指标到将相应扩缩建议应用于 API 服务器之间的时间)。每 60 秒采样一次。采样后,数据在最长 20 秒的时间内不会显示。

metric_type:指标来源的类型。应为 "ContainerResource""External""Object""Pods""Resource" 之一。

查看工作负载的“启动延迟时间”信息中心

工作负载的启动延迟时间信息中心仅适用于部署。如需查看部署的启动延迟时间指标,请在 Google Cloud 控制台中执行以下步骤:

  1. 转到工作负载页面。

    转到“工作负载”

  2. 如需打开部署详情视图,请点击要检查的工作负载的名称。

  3. 点击可观测性标签页。

  4. 从左侧菜单中选择启动延迟时间

查看 Pod 的启动延迟时间分布情况

Pod 的启动延迟时间是指总启动延迟时间(包括映像拉取),用于衡量从 Pod 处于 Created 状态到处于 Ready 状态所用的时间。您可以使用以下两个图表评估 Pod 的启动延迟时间:

  • Pod 启动延迟时间分布图表:此图表显示 Pod 的启动延迟时间百分位(第 50 百分位、第 95 百分位和第 99 百分位),这些百分位是根据固定的 3 小时时间间隔(例如,凌晨 12:00 到凌晨 3:00 和凌晨 3:00 到凌晨 6:00)内 Pod 启动事件的观察结果计算得出的。您可以将此图表用于以下用途:

    • 了解基准 Pod 启动延迟时间。
    • 了解 Pod 启动延迟时间随时间的变化情况。
    • 将 Pod 启动延迟时间的变化与近期事件(例如工作负载部署或集群自动扩缩器事件)相关联。您可以在信息中心顶部的注释列表中选择事件。
“Pod 启动延迟时间分布情况”图表
图: “Pod 启动延迟时间分布情况”图表
  • Pod 启动次数图表:此图表显示所选时间间隔内启动的 Pod 数量。您可以将此图表用于以下用途:

    • 了解用于计算给定时间间隔内 Pod 启动延迟时间分布百分位的 Pod 样本大小。
    • 了解 Pod 启动的原因,例如工作负载部署或横向 Pod 自动扩缩器事件。您可以在信息中心顶部的注释列表中选择事件。
“Pod 启动次数”图表
图: “Pod 启动次数”图表

查看各个 Pod 的启动延迟时间

您可以在 Pod 首次就绪延迟时间时间轴图表和关联的列表中查看各个 Pod 的启动延迟时间。

  • 使用 Pod 首次就绪延迟时间时间轴图表可将各个 Pod 启动与近期事件(例如 Pod 横向自动扩缩器或集群自动扩缩器事件)相关联。您可以在信息中心顶部的注释列表中选择这些事件。此图表可帮助您确定与其他 Pod 相比,启动延迟时间发生任何变化的潜在原因。
  • 使用 Pod 首次就绪延迟时间列表可了解启动时间最长或最短的各个 Pod。您可以按延迟时间列对列表进行排序。确定启动延迟时间最长的 Pod 后,您可以将 Pod 启动事件与其他近期事件相关联,以排查延迟时间下降问题。
“Pod 首次就绪延迟时间”图表
图: Pod 首次就绪延迟时间图表

您可以通过查看相应 Pod 创建事件的 timestamp 字段中的值,了解各个 Pod 的创建时间。如需查看 timestamp 字段,请在 Logs Explorer 中运行以下查询:

   log_id("cloudaudit.googleapis.com/activity") AND
   protoPayload.methodName="io.k8s.core.v1.pods.create" AND
   resource.labels.project_id=PROJECT_ID AND
   resource.labels.cluster_name=CLUSTER_NAME AND
   resource.labels.location=CLUSTER_LOCATION AND
   protoPayload.response.metadata.namespace=NAMESPACE AND
   protoPayload.response.metadata.name=POD_NAME

如需列出工作负载的所有 pod 创建事件,请在上面的查询中使用以下过滤条件:protoPayload.response.metadata.name=~"POD_NAME_PREFIX-[a-f0-9]{7,10}-[a-z0-9]{5}"

比较各个 Pod 的延迟时间时,您可以测试各种配置对 Pod 启动延迟时间的影响,并根据您的要求确定最佳配置。

确定 Pod 调度延迟时间

Pod 调度延迟时间是指从创建 Pod 到在节点上调度 Pod 之间的时间。Pod 调度延迟时间会影响 Pod 的端到端启动时间,其计算方法是将 Pod 调度事件的时间戳与 Pod 创建请求的时间戳相减。

您可以在相应 Pod 调度事件的 jsonPayload.eventTime 字段中找到单个 Pod 调度事件的时间戳。如需查看 jsonPayload.eventTime 字段,请在 Logs Explorer 中运行以下查询:

  log_id("events")
  jsonPayload.reason="Scheduled"
  resource.type="k8s_pod"
  resource.labels.project_id=PROJECT_ID
  resource.labels.location=CLUSTER_LOCATION
  resource.labels.cluster_name=CLUSTER_NAME
  resource.labels.namespace_name=NAMESPACE
  resource.labels.pod_name=POD_NAME

如需列出工作负载的所有 Pod 调度事件,请在上面的查询中使用以下过滤条件:resource.labels.pod_name=~"POD_NAME_PREFIX-[a-f0-9]{7,10}-[a-z0-9]{5}"

查看图片拉取延迟时间

在节点上尚无映像或映像需要刷新的场景中,容器映像拉取延迟会导致 Pod 启动延迟。优化映像拉取延迟时间后,您可以缩短集群扩容事件期间的工作负载启动延迟时间。

您可以查看 Kubelet 映像拉取事件表,了解工作负载容器映像的拉取时间以及该过程所用的时间。

“Kubelet 映像拉取事件”表格
图: Kubelet 映像拉取事件表

图片拉取延迟时间显示在 jsonPayload.message 字段中,该字段包含如下消息:

  "Successfully pulled image "gcr.io/example-project/image-name" in 17.093s (33.051s including waiting). Image size: 206980012 bytes."

查看 HPA 扩缩建议的延迟时间分布

HPA 目标的水平 Pod 自动扩缩器 (HPA) 扩缩建议的延迟时间是指从创建指标到将相应扩缩建议应用于 API 服务器之间的时间。优化 HPA 扩缩建议延迟时间后,您可以缩短扩容事件期间的工作负载启动延迟时间。

您可以在以下两个图表中查看 HPA 扩缩情况:

  • HPA 扩缩建议延迟时间分布图表:此图表显示 HPA 扩缩建议延迟时间的百分位(第 50 百分位、第 95 百分位和第 99 百分位),这些百分位是根据过去 3 小时时间间隔内 HPA 扩缩建议的观察结果计算得出的。您可以使用此图表来实现以下目的:

    • 了解基准 HPA 扩缩建议延迟时间。
    • 了解 HPA 扩缩建议延迟时间随时间的变化情况。
    • 将 HPA 扩缩建议延迟时间的变化与近期事件相关联。 您可以在信息中心顶部的注释列表中选择事件。
“HPA 扩缩建议延迟时间分布”图表
图: HPA 扩缩建议延迟时间分布图
  • HPA 扩缩建议数图表:此图表显示在所选时间间隔内观察到的 HPA 扩缩建议的数量。您可以使用此图表执行以下任务:

    • 了解 HPA 扩缩建议的样本大小。这些样本用于计算给定时间间隔内 HPA 扩缩建议延迟时间分布中的百分位。
    • 将 HPA 扩缩建议与新 Pod 启动事件和水平 Pod 自动扩缩器事件相关联。您可以在信息中心顶部的注释列表中选择事件。
“HPA 扩缩建议数”图表
图: HPA 扩缩建议数图表

查看 Pod 的调度问题

Pod 调度问题可能会影响工作负载的端到端启动延迟时间。如需缩短工作负载的端到端启动延迟时间,请排查并减少此类问题的数量。

以下两个图表可用于跟踪此类问题:

  • 不可调度/待处理/已失败的 Pod 图表会显示一段时间内不可调度、待处理和已失败的 Pod 的数量。
  • 退避/等待/就绪性失败的容器图表会显示一段时间内处于这些状态的容器数量。

查看节点的启动延迟时间信息中心

如需查看节点的启动延迟时间指标,请在 Google Cloud 控制台中执行以下步骤:

  1. 前往 Kubernetes 集群页面。

    转到“Kubernetes 集群”

  2. 如需打开集群详情视图,请点击要检查的集群的名称。

  3. 点击可观测性标签页。

  4. 在左侧菜单中,选择启动延迟时间

查看节点启动延迟时间的分布情况

节点的启动延迟时间是指总启动延迟时间,用于衡量节点从 CreationTimestamp 状态到 Kubernetes node ready 状态所用的时间。您可以在以下两个图表中查看节点启动延迟时间:

  • 节点启动延迟时间分布图表:此图表显示节点启动延迟时间的百分位数(第 50 百分位、第 95 百分位和第 99 百分位),这些百分位数是根据固定的 3 小时时间间隔(例如,凌晨 12:00 到凌晨 3:00 和凌晨 3:00 到凌晨 6:00)内节点启动事件的观察结果计算得出的。您可以将此图表用于以下用途:

    • 了解基准节点启动延迟时间。
    • 了解节点启动延迟时间随时间的变化情况。
    • 将节点启动延迟时间的变化与近期事件(例如集群更新或节点池更新)相关联。您可以在信息中心顶部的注释列表中选择事件。
“节点启动延迟时间分布情况”图表
图: “节点启动延迟时间分布”图表
  • 节点启动次数图表:此图表显示所选时间间隔内启动的节点数量。您可以将此图表用于以下用途:

    • 了解节点样本大小,用于计算给定时间间隔内的节点启动延迟时间分布百分位。
    • 了解节点启动的原因,例如节点池更新或集群自动扩缩器事件。您可以在信息中心顶部的注释列表中选择事件。
“节点启动次数”图表
图: “节点启动次数”图表

查看各个节点的启动延迟时间

比较各个节点的延迟时间时,您可以测试各种节点配置对节点启动延迟时间的影响,并根据您的要求确定最佳配置。您可以在节点启动延迟时间时间轴图表和关联的列表中查看各个节点的启动延迟时间。

  • 使用节点启动延迟时间时间轴图表可将各个节点启动与近期事件(例如集群更新或节点池更新)相关联。您可以确定与其他节点相比,启动延迟时间发生变化的潜在原因。您可以在信息中心顶部的注释列表中选择事件。

  • 使用节点启动延迟时间列表可了解启动时间最长或最短的各个节点。您可以按延迟时间列对列表进行排序。确定启动延迟时间最长的节点后,您可以将节点启动事件与其他近期事件相关联,以排查延迟时间下降问题。

“节点启动延迟时间”图表
图: “节点启动延迟时间”图表

您可以通过查看相应节点创建事件中的 protoPayload.metadata.creationTimestamp 字段的值,了解单个节点的创建时间。如需查看 protoPayload.metadata.creationTimestamp 字段,请在 Logs Explorer 中运行以下查询:

   log_id("cloudaudit.googleapis.com/activity") AND
   protoPayload.methodName="io.k8s.core.v1.nodes.create" AND
   resource.labels.project_id=PROJECT_ID AND
   resource.labels.cluster_name=CLUSTER_NAME AND
   resource.labels.location=CLUSTER_LOCATION AND
   protoPayload.response.metadata.name=NODE_NAME

查看节点池中的启动延迟时间

如果您的节点池具有不同的配置(例如,运行不同的工作负载),您可能需要按节点池分别监控节点启动延迟时间。比较不同节点池中的节点启动延迟时间后,您可以深入了解节点配置对节点启动延迟时间的影响,从而优化延迟时间。

默认情况下,节点启动延迟时间信息中心会显示集群中所有节点池的汇总启动延迟时间分布和各个节点的启动延迟时间。如需查看特定节点池的节点启动延迟时间,请使用信息中心顶部的 $node_pool_name_var 过滤条件选择节点池的名称。

后续步骤