Divide responsibilities from GPU discovery through device injection into the Pod
Device plugin: an extension component that advertises a node's devices to the kubelet and supplies device access information to containers.
Four steps are separate: the host driver discovers the GPU, the device plugin advertises the resource to the kubelet, the scheduler matches the Pod request, and the runtime injects the device node.
A vendor extended resource appears as an integer in capacity and allocatable and is generally not overcommitted. Labels, taints, and affinity narrow placement, but they do not automatically verify actual GPU health and topology.
Do not conclude from a Pending Pod that there is no GPU. Check nvidia-smi, the plugin DaemonSet, node allocatable, the Pod request, events, and runtime allocation in that order.
In the training example nvidia-smi shows 8 GPUs but the node allocatable contains no GPU. Host driver recognition and Kubernetes resource advertisement are separate boundaries. Check the device plugin state and the kubelet registration, then compare the resource requests with the actual Pod placement. Do not interpret a Pod without a request happening to reach a GPU as a scheduling guarantee.
- Why does this happen?
- A vendor extended resource appears as an integer in capacity and allocatable and is generally not overcommitted. Labels, taints, and affinity narrow placement, but they do not automatically verify actual GPU health and topology.
- When is it a problem?
- If you see a capacity, request, or runtime mismatch, there are insufficient grounds to proceed.
- Common beginner misconceptions
- Do not bypass the scheduler by injecting GPU device files directly through hostPath. Doing so breaks resource accounting, isolation, and health handling.
- How to verify it yourself
- Check the host's GPU UUIDs and health first. Then check the device plugin Pod and the kubelet registration log.