在 Kueue 中对预置请求进行故障排除
此文档可帮助你对配置请求进行故障排除,配置请求是 ClusterAutoscaler 定义的 API。
Kueue 通过 Provisioning Admission Check Controller 创建 ProvisioningRequest,并将它们视为 Admission Check。为了让 Kueue 允许工作负载,为其创建的 ProvisioningRequest 需要成功。
在开始之前
在开始故障排除之前,请确保您的集群满足以下要求
- 您的集群已启用 ClusterAutoscaler,并且 ClusterAutoscaler 支持 ProvisioningRequest API。查看您的云提供商文档以确定支持 ProvisioningRequest 的最低版本。如果您使用 GKE,您的集群应运行版本
1.28.3-gke.1098000
或更高版本。 - 您使用支持 ProvisioningRequest 的节点类型。这可能因您的云提供商而异。
- Kueue 的版本为
v0.5.3
或更高版本。 - 您已在 功能门配置 中启用
ProvisioningACC
。对于 Kueuev0.7.0
或更高版本,此功能门默认启用。
识别作业的 Provisioning Request
请参阅 故障排除作业指南,了解如何识别作业的工作负载。
您可以运行以下命令,在工作负载状态的 admissionChecks
字段中查看 Provisioning Request(和其他 Admission Check)的简要状态。
kubectl describe workload WORKLOAD_NAME
Kueue 使用命名模式创建 ProvisioningRequest,这有助于您识别与工作负载相对应的请求。
[NAME OF YOUR WORKLOAD]-[NAME OF THE ADMISSION CHECK]-[NUMBER OF RETRY]
例如
sample-job-2zcsb-57864-sample-admissioncheck-1
当作业的节点已配置时,Kueue 还会将注释 cluster-autoscaler.kubernetes.io/consume-provisioning-request
添加到工作负载状态中的 .admissionChecks[*].podSetUpdate[*]
字段。此注释的值是 Provisioning Request 的名称。
kubectl describe workload
命令的输出应类似于以下内容
[...]
Status:
Admission Checks:
Last Transition Time: 2024-05-22T10:47:46Z
Message: Provisioning Request was successfully provisioned.
Name: sample-admissioncheck
Pod Set Updates:
Annotations:
cluster-autoscaler.kubernetes.io/consume-provisioning-request: sample-job-2zcsb-57864-sample-admissioncheck-1
cluster-autoscaler.kubernetes.io/provisioning-class-name: queued-provisioning.gke.io
Name: main
State: Ready
我的配置请求的当前状态是什么?
作业未运行的一个可能原因是 ProvisioningRequest 正在等待配置。要了解是否为这种情况,可以通过运行以下命令查看 Provisioning Request 的状态
kubectl get provisioningrequest PROVISIONING_REQUEST_NAME
如果是这种情况,输出应类似于以下内容
NAME ACCEPTED PROVISIONED FAILED AGE
sample-job-2zcsb-57864-sample-admissioncheck-1 True False False 20s
您还可以通过运行以下命令查看 ProvisioningRequest 的更详细状态
kubectl describe provisioningrequest PROVISIONING_REQUEST_NAME
如果 ProvisioningRequest 无法配置节点,错误输出可能类似于以下内容
[...]
Status:
Conditions:
Last Transition Time: 2024-05-22T13:04:54Z
Message: Provisioning Request wasn't accepted.
Observed Generation: 1
Reason: NotAccepted
Status: False
Type: Accepted
Last Transition Time: 2024-05-22T13:04:54Z
Message: Provisioning Request wasn't provisioned.
Observed Generation: 1
Reason: NotProvisioned
Status: False
Type: Provisioned
Last Transition Time: 2024-05-22T13:06:49Z
Message: max cluster limit reached, nodepools out of resources: default-nodepool (cpu, memory)
Observed Generation: 1
Reason: OutOfResources
Status: True
Type: Failed
请注意,Failed
条件的 Reason
和 Message
值可能与您的输出不同,具体取决于阻止配置的原因。
配置请求状态在 .conditions[*].status
字段中描述。空字段表示 ProvisioninongRequest 仍由 ClusterAutoscaler 处理。否则,它将进入以下列出的状态之一
Accepted
- 表示 ProvisioningRequest 已被 ClusterAutoscaler 接受,因此 ClusterAutoscaler 将尝试为其配置节点。Provisioned
- 表示已创建所有请求的资源,并且它们在集群中可用。VM 创建成功完成后,ClusterAutoscaler 将设置此条件。Failed
- 表示无法获取资源来满足此 ProvisioningRequest。条件原因和消息将包含有关失败内容的更多详细信息。BookingExpired
- 表示 ProvisioningRequest 之前具有已配置条件,并且容量预留时间已到期。CapacityRevoked
- 表示请求的资源不再有效。
状态转换如下
为什么不创建配置请求?
如果 Kueue 未为您的作业创建配置请求,请尝试检查以下要求
a. 确保 Kueue 的控制器管理器启用了 ProvisioningACC
功能门
运行以下命令以检查 Kueue 的控制器管理器是否已启用 ProvisioningACC
特性门
kubectl describe pod -n kueue-system kueue-controller-manager-
Kueue 容器的参数应类似于以下内容
...
Args:
--config=/controller_manager_config.yaml
--zap-log-level=2
--feature-gates=ProvisioningACC=true
对于 Kueue v0.7.0
或更高版本,此特性默认启用,因此您可能看到不同的输出。
b. 确保您的工作负载已预留配额
要检查您的工作负载在 ClusterQueue 中是否已预留配额,请通过运行以下命令检查您的工作负载状态
kubectl describe workload WORKLOAD_NAME
输出应类似于以下内容
[...]
Status:
Conditions:
Last Transition Time: 2024-05-22T10:26:40Z
Message: Quota reserved in ClusterQueue cluster-queue
Observed Generation: 1
Reason: QuotaReserved
Status: True
Type: QuotaReserved
如果您获得的输出类似于以下内容
Conditions:
Last Transition Time: 2024-05-22T08:48:47Z
Message: couldn't assign flavors to pod set main: insufficient unused quota for memory in flavor default-flavor, 4396Mi more needed
Observed Generation: 1
Reason: Pending
Status: False
Type: QuotaReserved
这意味着您在 ClusterQueue 中没有足够的可用配额。
您的工作负载未预留配额的其他原因可能与 LocalQueue/ClusterQueue 配置错误有关,例如
Status:
Conditions:
Last Transition Time: 2024-05-22T08:57:09Z
Message: ClusterQueue cluster-queue doesn't exist
Observed Generation: 1
Reason: Inadmissible
Status: False
Type: QuotaReserved
您可以检查 ClusterQueue 和 LocalQueue 是否已准备好接收您的工作负载。有关更多详细信息,请参阅 队列故障排除。
c. 确保准入检查处于活动状态
要检查您的作业使用的准入检查是否处于活动状态,请运行以下命令
kubectl describe admissionchecks ADMISSIONCHECK_NAME
其中 ADMISSIONCHECK_NAME
是在您的 ClusterQueue 规范中配置的名称。有关更多详细信息,请参阅 准入检查文档。
准入检查的状态应类似于
...
Status:
Conditions:
Last Transition Time: 2024-03-08T11:44:53Z
Message: The admission check is active
Reason: Active
Status: True
Type: Active
如果上述步骤均无法解决您的问题,请通过 Slack wg-batch
频道 联系我们