研发协作
GKE TPU 动态切片故障排查与卡死清理:诊断切片状态…
当 GKE 上的 TPU Dynamic Slice 自定义资源出现创建失败、卡在 DEACTIVATING 或需要禁用切片控制器时,用于诊断状态、校验工作负载配置并安全清理。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 59/100 ×0.15
适用场景
GKE TPU 动态切片故障排查与卡死清特定
解决思路
- 收集上下文:确定 Project ID、Cluster Name、Region/Zone、Slice Name 以及问题时间戳(默认取 [T-30m] 到 [T+30m] 的时间窗口)。
- 执行 `kubectl describe slice {slice_name}` 检查切片状态,解析 Status.Conditions(尤其是 Type: Ready 的 Reason 与 Status)来定位状态。
- 按状态对照处理:SliceNotCreated 表示控制器正在初始化,等待几分钟后重查;SliceCreationFailed 表示前置校验失败,需检查所选节点是否存在、是否已被其他切片占用、拓扑是否匹配分区数;ACTIVATING 表示正在组建,监控节点供应;ACTIVE 表示已就绪,可部署工作负载;ACTIVE_DEGRADED 表示可用但有子块降级,需查看工作负载日志中的互联或设备错误并检查故障节点 VM;FAILED 表示组建失败(如所选节点不在同一 reservation block),需确保所有节点属于同一 reservation block;DEACTIVATING 表示正在拆除,等待完成或按卡死流程 patch finalizer;INCOMPLETE 表示 CR 即将被删除,无需操作。
- 排查创建/供应失败时逐项验证:用 `kubectl get nodes -l cloud.google.com/gke-tpu-slice` 和 `kubectl get slice -A` 确认所选 TPU 节点存在且未被其他切片占用;确认分区数与请求的拓扑维度匹配(如拓扑 2x2 需要 4 个节点);确认所有所选 TPU 节点属于同一 reservation 和 reservation block。
- 校验单切片工作负载清单:Pod 模板需包含注解 `cloud.google.com/gke-tpu-slice-topology: "{topology}"`(如 "4x4x4");nodeSelector 需包含 `cloud.google.com/gke-tpu-topology: "{topology}"`、`cloud.google.com/gke-tpu-accelerator: "{accelerator_type}"`(如 "tpu7x")、`cloud.google.com/gke-tpu-slice: "{slice_name}"`(如 "test-slice")。
- 校验多切片(JobSet)工作负载清单:JobSet 注解需包含 `alpha.jobset.sigs.k8s.io/exclusive-topology: cloud.google.com/gke-tpu-slice`;Pod 模板注解需包含 `cloud.google.com/gke-tpu-slice-topology: "{topology}"`;Pod 模板 nodeSelector 需包含 `cloud.google.com/gke-tpu-topology: "{topology}"` 和 `cloud.google.com/gke-tpu-accelerator: "{accelerator_type}"`;注意不要在 nodeSelector 中手动指定 `cloud.google.com/gke-tpu-slice`,JobSet 会自动分配切片。
- 强制删除卡死切片(高风险):先说明是 metadata.finalizers 阻止了删除,然后提议用 JSON patch 移除 `/metadata/finalizers`:`kubectl patch slice {slice_name} --type json -p='[{"op": "remove", "path": "/metadata/finalizers"}]'`;必须明确警告这会绕过标准控制器拆除流程,可能遗留未清理的 VM、网络或加速器资源;执行前必须显式向用户请求确认(例如询问是否确认对切片 {slice_name} 应用该 patch)并等待用户确认。
- 禁用并清理切片控制器(高风险):先用 `kubectl get slice -A` 确认所有切片已删除;再用 `gcloud container clusters update {cluster_name} --location={location} --no-enable-slice-controller` 禁用控制器;然后执行 `kubectl delete crd slices.accelerator.gke.io` 删除 CRD;最后用 `kubectl label nodes --all cloud.google.com/gke-tpu-slice- cloud.google.com/gke-tpu-slice-topology-` 清理所有节点上的 GKE TPU Slice 标签;执行禁用或破坏性清理前需先给出确切命令并确认。
适用边界 · 注意事项
- 不适用于通用 GKE 集群节点池创建或标准非 TPU 工作负载管理(应改用 gke-basics 或 gke-cluster-creation)。
- 未启用 Cloud Logging 或未配置可访问该 GKE 集群的 kubectl 与 gcloud CLI 时无法执行。
- 移除 finalizer 和禁用切片控制器属于高风险操作,未获得用户明确确认前不应执行。