mcpField
G
gke-ai-troubleshooting-tpu-metrics-monitoring

gke-ai-troubleshooting-tpu-metrics-monitoring

github.com/google云与 DevOps21.6k3.8k 次安装今天更新
代码仓库

关于 gke-ai-troubleshooting-tpu-metrics-monitoring

该技能指导 Agent 使用 GKE 系统指标监控 TPU 工作负载、节点和节点池,帮助从基础设施层面诊断中断与性能问题,并提供 Cloud Monitoring 指标和 PromQL 查询。

主要功能

  1. 01检查 TPU 指标配置前提
  2. 02监控加速器占空比与内存
  3. 03查看节点和节点池状态
  4. 04分析中断与恢复指标
  5. 05监控 TPU 主机利用率

适用场景

  1. 01检查 TPU 运行时指标是否已配置
  2. 02诊断工作负载性能问题
  3. 03调查节点或节点池中断
  4. 04计算恢复时间与中断间隔

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/google/skills --skill gke-ai-troubleshooting-tpu-metrics-monitoring

安装后在 Claude Code 中输入/gke-ai-troubleshooting-tpu-metrics-monitoring确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
attribution.md
failure_signatures.md
scripts/
validate_queries.sh

详细介绍

GKE TPU 指标监控指南

此技能可让 Agent 使用 GKE 系统指标监控 GKE TPU 工作负载、节点和节点池,帮助诊断工作负载中断或性能问题是否由底层基础设施导致。

归属信息

必须阅读:在执行任何 gcloud、REST API 或 MCP 命令之前,必须阅读使用归属信息。对于直接在终端中执行的命令(绝不在生成的脚本、Terraform 或用户代码中执行),请在 gcloud 前加上 CLOUDSDK_METRICS_REQUEST_ATTRIBUTION="agent-skills/1.0 (skill:gke-ai-troubleshooting-tpu-metrics-monitoring)",并将 agent-skills/1.0 (skill:gke-ai-troubleshooting-tpu-metrics-monitoring) 添加到 User-Agent 标头中。

步骤 0:必要上下文

使用可用的 GKE 和 Cloud 工具独立收集所需上下文(例如集群详情或节点池名称),或使用提供的 {variable} 占位符:

  • {project_id}:GCP 项目 ID。
  • {cluster_name}:GKE 集群名称。
  • {location}:GKE 集群位置(区域或可用区)。
  • {node_name}:(可选)特定 GKE 节点的名称。
  • {node_pool_name}:(可选)GKE 节点池的名称。

诊断步骤

步骤 1:验证 TPU 运行时指标配置 [低风险] [自动]

在分析运行时指标之前,请验证工作负载是否已配置为导出这些指标。这可确保集群和容器环境已设置好,以自动抓取指标并查看加速器运行状况。

  • 操作:验证 Pod 规范和集群是否满足以下先决条件:
    • TPU 容器已开放 containerPort: 8431(Prometheus 抓取指标所必需)。
    • 如果使用 JAX,版本为 0.4.14 或更高(较早版本不会导出运行时指标)。
    • GKE 版本为 1.27.4-gke.900 或更高(TPU 运行时指标支持所必需)。
    • 集群已启用 GKE 系统指标(向 Cloud Monitoring 导入指标所必需)。
步骤 2:监控 TPU 运行时指标 [低风险] [自动]

如果配置正确,Cloud Monitoring 中将提供以下指标(受监控资源为 k8s_node 和 k8s_container):

  • 容器指标:
    • kubernetes.io/container/accelerator/duty_cycle:过去一个采样周期(60 秒)内,TPU 芯片上的 TensorCore 正在处理数据的时间百分比。
    • kubernetes.io/container/accelerator/memory_used:已分配的加速器内存量(以字节为单位)。
    • kubernetes.io/container/accelerator/memory_total:加速器内存总量(以字节为单位)。
  • 节点指标:
    • kubernetes.io/node/accelerator/duty_cycle
    • kubernetes.io/node/accelerator/memory_used
    • kubernetes.io/node/accelerator/memory_total
步骤 3:检查节点状态条件 [低风险] [自动]

查询 GKE 节点的状态条件(GKE 版本为 1.32.1-gke.1357001 或更高)。

  • PromQL 查询(检查特定节点是否为 Ready):
    kubernetes_io:node_status_condition{monitored_resource="k8s_node", cluster_name="{cluster_name}", node_name="{node_name}", condition="Ready", status="True"}
    
  • PromQL 查询(列出条件为 True 且状态非 Ready 的节点):
    kubernetes_io:node_status_condition{monitored_resource="k8s_node", cluster_name="{cluster_name}", condition!="Ready", status="True"}
    
  • PromQL 查询(列出状态为 NOT Ready 的节点):
    kubernetes_io:node_status_condition{monitored_resource="k8s_node", cluster_name="{cluster_name}", condition="Ready", status="False"}
    
  • PromQL 查询(整个 Fleet 的节点状态):
    avg by (condition,status)(avg_over_time(kubernetes_io:node_status_condition{monitored_resource="k8s_node"}[5m]))
    
步骤 4:检查节点池状态 [低风险] [自动]

查询多主机 TPU 节点池的状态。

  • PromQL 查询(验证特定节点池是否正在运行):
    kubernetes_io:node_pool_status{monitored_resource="k8s_node_pool", cluster_name="{cluster_name}", node_pool_name="{node_pool_name}", status="Running"}
    
  • PromQL 查询(按状态分组监控节点池):
    count by (status)(count_over_time(kubernetes_io:node_pool_status{monitored_resource="k8s_node_pool"}[5m]))
    
    可能的状态:Provisioning、Running、Error、Reconciling、Stopping。
步骤 5:检查节点池可用性 [低风险] [自动]

查询多主机 TPU 节点池中的所有节点是否都可用。

  • PromQL 查询(检查一段时间内的可用性):
    avg by (node_pool_name)(avg_over_time(kubernetes_io:node_pool_multi_host_available{monitored_resource="k8s_node_pool", cluster_name="{cluster_name}"}[5m]))
    
    值:1(True,所有节点均可用)或 0(False,部分节点不可用)。
步骤 6:分析节点中断 [低风险] [自动]

查询 GKE 节点的中断次数。

  • PromQL 查询(中断及原因细分):
    sum by (interruption_type,interruption_reason)(sum_over_time(kubernetes_io:node_interruption_count{monitored_resource="k8s_node"}[5m]))
    
    中断类型:TerminationEvent、MaintenanceEvent、PreemptionEvent。 中断原因:HostError、Eviction、AutoRepair。
  • PromQL 查询(筛选 Host Maintenance 事件):
    sum by (interruption_type,interruption_reason)(sum_over_time(kubernetes_io:node_interruption_count{monitored_resource="k8s_node", interruption_reason="HW/SW Maintenance"}[5m]))
    
  • PromQL 查询(按节点池汇总中断次数):
    sum by (node_pool_name,interruption_type,interruption_reason)(sum_over_time(kubernetes_io:node_pool_interruption_count{monitored_resource="k8s_node_pool", interruption_reason="HW/SW Maintenance", node_pool_name="{node_pool_name}"}[5m]))
    
步骤 7:计算恢复和中断指标 [低风险] [自动]

计算过去 7 天的平均恢复时间(MTTR)和平均中断间隔(MTBI)。

  • PromQL 查询(MTTR - 平均恢复时间):
    sum(sum_over_time(kubernetes_io:node_pool_accelerator_times_to_recover_sum{monitored_resource="k8s_node_pool", cluster_name="{cluster_name}"}[7d])) / sum(sum_over_time(kubernetes_io:node_pool_accelerator_times_to_recover_count{monitored_resource="k8s_node_pool",cluster_name="{cluster_name}"}[7d]))
    
  • PromQL 查询(MTBI - 平均中断间隔):
    sum(count_over_time(kubernetes_io:node_memory_total_bytes{monitored_resource="k8s_node", node_name=~"gke-tpu.*|gk3-tpu.*", cluster_name="{cluster_name}"}[7d])) / sum(sum_over_time(kubernetes_io:node_interruption_count{monitored_resource="k8s_node", node_name=~"gke-tpu.*|gk3-tpu.*", cluster_name="{cluster_name}"}[7d]))
    
步骤 8:监控 TPU 主机指标 [低风险] [自动]

对于 GKE 版本 1.28.1-gke.1066000 或更高版本,监控 TPU 主机性能。

  • 容器指标:
    • kubernetes.io/container/accelerator/tensorcore_utilization:当前 TensorCore 的利用率百分比。
    • kubernetes.io/container/accelerator/memory_bandwidth_utilization:当前加速器内存带宽的使用百分比。
  • 节点指标:
    • kubernetes.io/node/accelerator/tensorcore_utilization
    • kubernetes.io/node/accelerator/memory_bandwidth_utilization

评论

支持 Markdown