gke-ai-troubleshooting-tpu-metrics-monitoring
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseGKE TPU Metrics Monitoring Guide
GKE TPU指标监控指南
This skill enables the agent to monitor GKE TPU workloads, nodes, and node pools using GKE system metrics. It helps diagnose if workload interruptions or performance issues are caused by underlying infrastructure.
本技能支持Agent使用GKE系统指标监控GKE TPU工作负载、节点及节点池,有助于诊断工作负载中断或性能问题是否由底层基础设施导致。
Step 0: Mandatory Context
步骤0:必备上下文
Independently gather required context (such as cluster details or node pool names) using available GKE and Cloud tools, or use the provided placeholders:
{variable}- : The GCP Project ID.
{project_id} - : The GKE Cluster Name.
{cluster_name} - : The GKE Cluster Location (region or zone).
{location} - : (Optional) The name of the specific GKE node.
{node_name} - : (Optional) The name of the GKE node pool.
{node_pool_name}
使用可用的GKE和云工具自行收集所需上下文(如集群详情或节点池名称),或使用提供的占位符:
{variable}- :GCP项目ID。
{project_id} - :GKE集群名称。
{cluster_name} - :GKE集群位置(区域或可用区)。
{location} - :(可选)特定GKE节点的名称。
{node_name} - :(可选)GKE节点池的名称。
{node_pool_name}
Diagnostic Steps
诊断步骤
Step 1: Verify TPU Runtime Metrics Configuration [Low Risk] [Auto]
步骤1:验证TPU运行时指标配置 [低风险] [自动]
Before analyzing runtime metrics, verify that the workload is configured to export them. This ensures the cluster and container environment are set up for automated metric scraping and visibility into accelerator health.
- Action: Verify that the Pod specification and cluster meet the following prerequisites:
- exposed on the TPU container (required for Prometheus metric scraping).
containerPort: 8431 - JAX version or later if using JAX (earlier versions do not export runtime metrics).
0.4.14 - GKE version is or later (required for TPU runtime metric support).
1.27.4-gke.900 - GKE System Metrics are enabled on the cluster (required for Cloud Monitoring ingestion).
分析运行时指标前,需验证工作负载已配置为导出指标。这确保集群和容器环境已设置好自动指标采集,可查看加速器健康状态。
- 操作:验证Pod规格和集群满足以下前提条件:
- TPU容器暴露(Prometheus指标采集所需)。
containerPort: 8431 - 若使用JAX,JAX版本为或更高(早期版本不导出运行时指标)。
0.4.14 - GKE版本为或更高(支持TPU运行时指标所需)。
1.27.4-gke.900 - 集群已启用GKE系统指标(Cloud Monitoring数据导入所需)。
- TPU容器暴露
Step 2: Monitor TPU Runtime Metrics [Low Risk] [Auto]
步骤2:监控TPU运行时指标 [低风险] [自动]
If configured correctly, the following metrics are available in Cloud Monitoring (monitored resources and ):
k8s_nodek8s_container- Container Metrics:
- : Percentage of time over the past sampling period (60 seconds) during which the TensorCores were actively processing on a TPU chip.
kubernetes.io/container/accelerator/duty_cycle - : Amount of accelerator memory allocated in bytes.
kubernetes.io/container/accelerator/memory_used - : Total accelerator memory in bytes.
kubernetes.io/container/accelerator/memory_total
- Node Metrics:
kubernetes.io/node/accelerator/duty_cyclekubernetes.io/node/accelerator/memory_usedkubernetes.io/node/accelerator/memory_total
配置正确的情况下,以下指标可在Cloud Monitoring中查看(监控资源为和):
k8s_nodek8s_container- 容器指标:
- :过去采样周期(60秒)内,TPU芯片上TensorCore处于活跃处理状态的时间占比。
kubernetes.io/container/accelerator/duty_cycle - :已分配的加速器内存字节数。
kubernetes.io/container/accelerator/memory_used - :加速器总内存字节数。
kubernetes.io/container/accelerator/memory_total
- 节点指标:
kubernetes.io/node/accelerator/duty_cyclekubernetes.io/node/accelerator/memory_usedkubernetes.io/node/accelerator/memory_total
Step 3: Check Node Status Condition [Low Risk] [Auto]
步骤3:检查节点状态条件 [低风险] [自动]
Query the status condition of GKE nodes (GKE version or later).
1.32.1-gke.1357001- PromQL Query (Check if a specific node is Ready):
promql
kubernetes_io:node_status_condition{monitored_resource="k8s_node", cluster_name="{cluster_name}", node_name="{node_name}", condition="Ready", status="True"} - PromQL Query (List nodes with non-Ready conditions that are True):
promql
kubernetes_io:node_status_condition{monitored_resource="k8s_node", cluster_name="{cluster_name}", condition!="Ready", status="True"} - PromQL Query (List nodes that are NOT Ready):
promql
kubernetes_io:node_status_condition{monitored_resource="k8s_node", cluster_name="{cluster_name}", condition="Ready", status="False"} - PromQL Query (Fleet-wide node status):
promql
avg by (condition,status)(avg_over_time(kubernetes_io:node_status_condition{monitored_resource="k8s_node"}[5m]))
查询GKE节点的状态条件(GKE版本或更高)。
1.32.1-gke.1357001- PromQL查询(检查特定节点是否就绪):
promql
kubernetes_io:node_status_condition{monitored_resource="k8s_node", cluster_name="{cluster_name}", node_name="{node_name}", condition="Ready", status="True"} - PromQL查询(列出存在非就绪且状态为True的节点):
promql
kubernetes_io:node_status_condition{monitored_resource="k8s_node", cluster_name="{cluster_name}", condition!="Ready", status="True"} - PromQL查询(列出未就绪的节点):
promql
kubernetes_io:node_status_condition{monitored_resource="k8s_node", cluster_name="{cluster_name}", condition="Ready", status="False"} - PromQL查询(集群范围内节点状态):
promql
avg by (condition,status)(avg_over_time(kubernetes_io:node_status_condition{monitored_resource="k8s_node"}[5m]))
Step 4: Check Node Pool Status [Low Risk] [Auto]
步骤4:检查节点池状态 [低风险] [自动]
Query the status of multi-host TPU node pools.
- PromQL Query (Verify if a specific node pool is Running):
promql
kubernetes_io:node_pool_status{monitored_resource="k8s_node_pool", cluster_name="{cluster_name}", node_pool_name="{node_pool_name}", status="Running"} - PromQL Query (Monitor node pools grouped by status):
Possible statuses:promql
count by (status)(count_over_time(kubernetes_io:node_pool_status{monitored_resource="k8s_node_pool"}[5m])),Provisioning,Running,Error,Reconciling.Stopping
查询多主机TPU节点池的状态。
- PromQL查询(验证特定节点池是否处于运行状态):
promql
kubernetes_io:node_pool_status{monitored_resource="k8s_node_pool", cluster_name="{cluster_name}", node_pool_name="{node_pool_name}", status="Running"} - PromQL查询(按状态分组监控节点池):
可能的状态:promql
count by (status)(count_over_time(kubernetes_io:node_pool_status{monitored_resource="k8s_node_pool"}[5m])),Provisioning,Running,Error,Reconciling.Stopping
Step 5: Check Node Pool Availability [Low Risk] [Auto]
步骤5:检查节点池可用性 [低风险] [自动]
Query if all nodes in a multi-host TPU node pool are available.
- PromQL Query (Check availability over time):
Value: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]))(True, all nodes available) or1(False, some nodes unavailable).0
查询多主机TPU节点池中的所有节点是否可用。
- PromQL查询(检查一段时间内的可用性):
数值: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(否,部分节点不可用)。0
Step 6: Analyze Node Interruptions [Low Risk] [Auto]
步骤6:分析节点中断 [低风险] [自动]
Query the count of interruptions for GKE nodes.
- PromQL Query (Breakdown of interruptions and causes):
Interruption Types:promql
sum by (interruption_type,interruption_reason)(sum_over_time(kubernetes_io:node_interruption_count{monitored_resource="k8s_node"}[5m])),TerminationEvent,MaintenanceEvent. Interruption Reasons:PreemptionEvent,HostError,Eviction.AutoRepair - PromQL Query (Filter for Host Maintenance events):
promql
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 Query (Interruption count aggregated by node pool):
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]))
查询GKE节点的中断次数。
- PromQL查询(中断类型及原因细分):
中断类型: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查询(筛选主机维护事件):
promql
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查询(按节点池聚合中断次数):
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]))
Step 7: Calculate Recovery and Interruption Metrics [Low Risk] [Auto]
步骤7:计算恢复与中断指标 [低风险] [自动]
Calculate Mean Time to Recovery (MTTR) and Mean Time Between Interruptions (MTBI) over the last 7 days.
- PromQL Query (MTTR - Mean Time to Recovery):
promql
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 Query (MTBI - Mean Time Between Interruptions):
promql
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]))
计算过去7天的平均恢复时间(MTTR)和平均中断间隔时间(MTBI)。
- PromQL查询(MTTR - 平均恢复时间):
promql
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 - 平均中断间隔时间):
promql
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]))
Step 8: Monitor TPU Host Metrics [Low Risk] [Auto]
步骤8:监控TPU主机指标 [低风险] [自动]
For GKE version or later, monitor TPU host performance.
1.28.1-gke.1066000- Container Metrics:
- : Current percentage of the TensorCore that is utilized.
kubernetes.io/container/accelerator/tensorcore_utilization - : Current percentage of the accelerator memory bandwidth that is being used.
kubernetes.io/container/accelerator/memory_bandwidth_utilization
- Node Metrics:
kubernetes.io/node/accelerator/tensorcore_utilizationkubernetes.io/node/accelerator/memory_bandwidth_utilization
对于GKE版本或更高版本,监控TPU主机性能。
1.28.1-gke.1066000- 容器指标:
- :当前TensorCore的使用率百分比。
kubernetes.io/container/accelerator/tensorcore_utilization - :当前加速器内存带宽的使用率百分比。
kubernetes.io/container/accelerator/memory_bandwidth_utilization
- 节点指标:
kubernetes.io/node/accelerator/tensorcore_utilizationkubernetes.io/node/accelerator/memory_bandwidth_utilization