故障排除 Pod
此文档介绍在直接由 Kueue 管理时对 普通 Pod 进行故障排除,换句话说,不是由 Kubernetes 作业或受支持的 CRD 管理的 Pod。
注意
此文档重点介绍 Kueue 在管理 Pod 时与其他作业集成不同的行为。你可以阅读 对作业进行故障排除 以了解更通用的故障排除步骤。我的 Pod 是否由 Kueue 直接管理?
Kueue 会将标签 kueue.x-k8s.io/managed
(值为 true
)添加到它管理的 Pod 中。如果 Pod 中不存在该标签,则表示 Kueue 不会直接承认或计算此 Pod 的资源使用情况。
Pod 可能由于以下原因之一而没有 kueue.x-k8s.io/managed
- 已禁用 Pod 集成。
- Pod 属于命名空间或具有不满足
podOptions
要求(为 Pod 集成配置)的标签。 - Pod 归属于作业或由 Kueue 管理的同等 CRD。
- Pod 没有
kueue.x-k8s.io/queue-name
标签,并且manageJobsWithoutQueueName
已设置为false
。
识别 Pod 的工作负载
使用 Pod 组 时,工作负载的名称与标签 kueue.x-k8s.io/pod-group-name
的值相匹配。
使用 单个 Pod 时,可以通过遵循 识别作业的工作负载 指南来识别其对应的工作负载。
为什么我的 Pod 组没有工作负载?
在创建工作负载对象之前,Kueue 期望创建组的所有 Pod。所有 Pod 的标签 kueue.x-k8s.io/pod-group-name
的值应相同,并且 Pod 的数量应等于注释 kueue.x-k8s.io/pod-group-total-count
的值。
你可以运行以下命令来识别 Kueue 是否为 Pod 创建了工作负载
kubectl describe pod my-pod -n my-namespace
如果 Kueue 未创建 Workload 对象,您将看到类似于以下内容的输出
...
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning ErrWorkloadCompose 14s pod-kueue-controller 'my-pod-group' group has fewer runnable pods than expected
注意
上述事件可能会显示在 Kueue 观察到的第一个 Pod 中,即使 Kueue 稍后成功为 Pod 组创建 Workload,它仍会保留。一旦 Kueue 观察到该组的所有 Pod,您将看到类似于以下内容的输出
...
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal CreatedWorkload 14s pod-kueue-controller Created Workload: my-namespace/my-pod-group
我的 Pod 为何消失?
当您启用抢占时,Kueue 可能会抢占 Pod 以容纳更高优先级的作业或回收配额。抢占是通过 DELETE
调用实现的,这是在 Kubernetes 中终止 Pod 的标准方式。
当使用单个 Pod 时,Kubernetes 会连同 Pod 一起删除 Workload 对象,因为没有其他对象拥有它的所有权。
在抢占时,Kueue 通常不会完全删除 Pod 组中的 Pod。请参阅下一个问题以了解 Pod 组中 Pod 的删除机制。
当失败或成功时,为何不会删除 Pod 组中的 Pod?
当使用 Pod 组时,Kueue 会保留一个finalizer kueue.x-k8s.io/managed
以防止删除 Pod 并能够跟踪该组的进度。您不应手动修改 finalizer。
当以下情况发生时,Kueue 会从 Pod 中移除 finalizer
- 该组满足终止条件,例如,当所有 Pod 均成功终止时。
- 对于失败的 Pod,当 Kueue 观察到替换 Pod 时。
- 您删除 Workload 对象。
一旦 Pod 没有 finalizer,Kubernetes 将根据以下内容删除 Pod
- 用户或控制器是否已发出 Pod 删除。
- Pod 垃圾回收器。