系统管理员参考
Kubernetes 事件
TensorFusion 会在它管理的对象上记录 Kubernetes 事件,包括 Pod、GPUPool、GPUNode、TensorFusionWorkload 和 TensorFusionConnection。本页列出所有事件的 Reason、类型和含义,方便你快速判断 Pod 为什么 Pending、节点为什么被创建或回收。
事件挂在它描述的对象上,用 kubectl 时指定对象类型和名称:
# 某个 Pod 的事件
kubectl describe pod <pod-name> -n <namespace>
# 某个 GPUPool 的事件(GPUPool 是集群级资源)
kubectl events --for gpupool/<pool-name>
# 命名空间内的所有 Warning 事件,最新的排在最后
kubectl get events -n <namespace> --field-selector type=Warning --sort-by=.lastTimestamp
Kubernetes 默认只保留 1 小时的事件。需要更长的历史,请用日志系统采集。
| Reason | 类型 | 含义 |
|---|
PreScheduleDone | Normal | 调度器找到了能放下该 Pod 的 GPU 节点,并完成资源预留。消息里有候选节点数量。 |
GPUDeviceAllocated | Normal | GPU 设备 ID 已写入 Pod,Pod 即将绑定到节点。 |
PodIndexAllocationPending | Normal | Pod 的设备序号还被同节点的另一个 Pod 占用,等对方释放后再写入。 |
ScheduleWithNativeGPU | Normal | Pod 不由 TensorFusion 管理,按原生 GPU 资源调度。只在从 NVIDIA Device Plugin 渐进迁移时出现。 |
GPUQuotaOrCapacityNotEnough | Warning | 没有 GPU 剩余足够的算力或显存,或者命名空间的 GPUResourceQuota 已用完。消息里有具体原因。 |
PartitionTemplateMatchFailed | Warning | partitioned 隔离模式下,没有分区模板能匹配请求的资源。 |
GPUDeviceAllocatedFailed | Warning | 调度器已选好 GPU,但无法把设备 ID 写入 Pod。 |
ContainerGPUAllocationFailed | Warning | 调度器无法把已分配的 GPU 对应到 Pod 的各个容器。 |
CommitFailed | Warning | GPU 分配在多次重试后仍无法提交。本次调度失败,调度器稍后重试。 |
| Reason | 类型 | 含义 |
|---|
GPUInterconnectTopologyFallback | Normal | 部分节点的拓扑数据不完整,调度器对这些节点降级为 NUMA 级或未知拓扑。 |
GPUInterconnectTopologyUnsatisfied | Warning | Pod 以 hard 模式要求 GPU 拓扑,但没有节点能满足。 |
| Reason | 类型 | 含义 |
|---|
GangWaitingForMembers | Normal | Pod 已通过调度,正在等同组的其他成员。消息里显示“已就绪/所需”数量。 |
GangScheduled | Normal | 就绪成员数达标,整组一起调度。 |
GangSchedulingTimeout | Warning | 超时前成员数没有达标。消息里显示已就绪的成员数。 |
GangStrictRejected | Warning | 有一个成员无法调度,整组被拒绝(strict 模式)。 |
Controller 带 -enable-auto-expander 启动时,Pending 的 Pod 上会出现以下事件。
| Reason | 类型 | 含义 |
|---|
NodeExpansionCheck | Normal 或 Warning | 判断新增节点是否有用的结果,具体情况见消息:Pod 能放进现有或正在创建的容量、扩容交给 Karpenter、失败原因与 GPU 无关、没有 GPU 节点能承载该 Pod,或扩容 10 分钟后 Pod 仍未调度。 |
NodeExpansionCompleted | Normal | 已为该 Pod 创建 GPUNodeClaim 或 Karpenter NodeClaim。 |
NodeExpansionFailed | Warning | 没有机型能放下该 Pod,或创建节点声明失败。 |
NodeExpansionCandidateFailed | Warning | 某个 Karpenter NodeClaim 因云厂商容量不足而失败,扩容器改试下一个候选。 |
NodeExpansionCandidatesExhausted | Warning | 所有扩容候选都失败了,Pod 等待下一次调度。 |
| Reason | 类型 | 含义 |
|---|
ManagedNodeCreated | Normal | 已为 GPU 池创建云主机。消息里有实例 ID 和内网 IP。 |
Compaction | Normal | 某个节点已空闲,删除它不影响 GPU 池的预热容量,GPU 池正在回收它。 |
MaxResourceConstraintReached | Warning | GPU 池达到 capacityConfig.maxResources 上限,无法继续扩容。 |
节点合并(compaction)开启碎片整理后记录。
| Reason | 类型 | 含义 |
|---|
DefragStarted | Normal | 一轮碎片整理开始。 |
DefragPodEvicted | Normal | 从源节点驱逐了一个 Pod,让它重新调度到更满的节点。 |
DefragFinished | Normal | 本轮结束。消息里汇总了候选节点数、驱逐的 Pod 数、失败数和跳过数。 |
DefragSkipUnschedulable | Normal | 节点被跳过:它上面的 Pod 在别处放不下。 |
DefragSkipPDBBlocked | Normal | 节点被跳过:PodDisruptionBudget 目前不允许驱逐。 |
DefragBlockedBySourceNode | Normal | 本轮暂停:上一轮的源节点还在排空。 |
DefragBlockedByEvictedPod | Normal | 本轮暂停:之前驱逐的 Pod 还没有重新调度成功。 |
DefragSkipMissingPDB | Warning | 节点被跳过:它上面有 Pod 没有 PodDisruptionBudget。给这些 Pod 加上 PDB 后才能参与碎片整理。 |
DefragPodEvictFailed | Warning | 驱逐 Pod 失败,或把节点标记为碎片整理源节点失败。 |
DefragNodeEvictSkip | Warning | 驱逐失败后,节点被加入 evict-skip 列表,后续轮次会跳过它。 |
DefragAbortNode | Warning | 某个节点的碎片整理被中止,例如调度模拟出错。 |
DefragConfigInvalid | Warning | 碎片整理配置无效。修正之前碎片整理处于停用状态。 |
| Reason | 类型 | 对象 | 含义 |
|---|
HypervisorCrashLoopRecreate | Warning | GPUNode | Hypervisor 容器的重启次数超过 dynamicConfig.hypervisorMaxCrashCount(默认 5),Controller 已删除该 Pod 以便重建。 |
DriverProbeFailed | Warning | Job | 节点的驱动探测 Job 重试次数用尽。请检查该节点的 GPU 驱动。 |
| Reason | 类型 | 含义 |
|---|
ResourceScaledUp | Normal | 自动伸缩调高了 worker 的算力或显存。消息里有调整前后的值。 |
ResourceScaledDown | Normal | 自动伸缩调低了 worker 的算力或显存。 |
| Reason | 类型 | 含义 |
|---|
WorkerSelected | Normal | 已为该连接选定 worker。 |
ConnectionReady | Normal | worker 已运行。消息里有连接地址。 |
WorkerSelectionFailed | Warning | 无法为该连接选出 worker。 |
- 故障排查手册:从常见现象找到处理办法。
- 监控指标定义:这些事件背后的计数器,例如
total_allocation_fail_cnt。