Google Kubernetes Engine 节点池不会从 0 个节点自动扩展

not*_*ami 7 graphics-processing-unit kubernetes google-kubernetes-engine nvidia

我正在尝试在 GKE 上运行机器学习作业,并且需要使用 GPU。

我使用 Tesla K80 创建了一个节点池,如本演练中所述

我将最小节点大小设置为 0,并希望自动缩放器会根据我的工作自动确定我需要多少个节点:

gcloud container node-pools create [POOL_NAME] \
--accelerator type=nvidia-tesla-k80,count=1 --zone [COMPUTE_ZONE] \
--cluster [CLUSTER_NAME] --num-nodes 3 --min-nodes 0 --max-nodes 5 \
--enable-autoscaling
Run Code Online (Sandbox Code Playgroud)

最初,没有需要 GPU 的作业,因此集群自动缩放器正确地将节点池缩小到 0。

但是,当我使用以下规范创建作业时

resources:
  requests:
    nvidia.com/gpu: "1"
  limits:
    nvidia.com/gpu: "1"
Run Code Online (Sandbox Code Playgroud)

这是完整的作业配置。(请注意,此配置是部分自动生成的。我还删除了一些与问题无关的环境变量)。

Insufficient nvidia.com/gpu我手动将节点池增加到至少 1 个节点之前,Pod一直处于挂起状态。

这是 GPU 节点池的当前限制,还是我忽略了什么?

Mac*_*tel 6

Autoscaler 支持扩展 GPU 节点池(包括从 0 到 0 和从 0 开始)。

此问题的一个可能原因是您是否启用了节点自动配置并设置了资源限制(通过 UI 或 gcloud 标志,例如 --max-cpu、max-memory 等)。这些限制适用于集群中的所有自动缩放,包括您手动创建并启用自动缩放的节点池(请参阅文档中的注释:https ://cloud.google.com/kubernetes-engine/docs/how-to/node-auto-provisioning#资源限制)。

特别是如果您已启用 NAP 并且想要使用 GPU 自动缩放节点池,则您需要按照https://cloud.google.com/kubernetes-engine/docs/how-to/node-auto- 中所述为 GPU 设置资源限制 配置#gpu_limits

最后,自动配置还支持 GPU,因此(假设您按照上述方式设置了资源限制)您实际上并不需要为您的 GPU 工作负载创建节点池 - NAP 会自动为您创建一个。

===

此外,为了将来参考 - 如果 autoscaler 无法为您的某些 pod 创建节点,您可以尝试使用 autoscaler 事件对其进行调试:

  • 在您的 pod ( kubectl describe pod <your-pod>) 上应该有两个事件之一(它们可能需要一分钟才能出现):
    • TriggeredScaleUp - 这意味着自动缩放器决定为这个 pod 添加一个节点。
    • NotTriggerScaleUp - 自动缩放器发现了你的 pod,但它认为没有任何节点池可以扩展来帮助它。在 1.12 及更高版本中,该事件包含了将节点添加到不同节点池对 Pod 没有帮助的原因列表。这通常是调试最有用的事件。
  • kubectl get events -n kube-system | grep cluster-autoscaler将为您提供描述所有自动缩放器操作(放大、缩小)的事件。如果尝试扩大规模,但由于任何原因失败,它也会有描述该情况的事件。

请注意,事件仅在创建后的 1 小时内在 Kubernetes 中可用。您可以通过转到 UI 并导航到 Stackdriver->Logging->Logs 并在下拉列表中选择“GKE Cluster Operations”来查看 Stackdriver 中的历史事件。

最后,您可以通过运行来检查 autoscaler 的当前状态kubectl get configmap cluster-autoscaler-status -o yaml -n kube-system