故障排除 Pod

对 Pod 或 Pod 组的状态进行故障排除

此文档介绍在直接由 Kueue 管理时对 普通 Pod 进行故障排除,换句话说,不是由 Kubernetes 作业或受支持的 CRD 管理的 Pod。

我的 Pod 是否由 Kueue 直接管理?

Kueue 会将标签 kueue.x-k8s.io/managed(值为 true)添加到它管理的 Pod 中。如果 Pod 中不存在该标签,则表示 Kueue 不会直接承认或计算此 Pod 的资源使用情况。

Pod 可能由于以下原因之一而没有 kueue.x-k8s.io/managed

  1. 已禁用 Pod 集成
  2. Pod 属于命名空间或具有不满足 podOptions 要求(为 Pod 集成配置)的标签。
  3. Pod 归属于作业或由 Kueue 管理的同等 CRD。
  4. 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,您将看到类似于以下内容的输出

...
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



上次修改时间为 2024 年 5 月 3 日:队列故障排除文档(#2125)(c96f2e45)