Do these 3 things before closing this tab:
1Fix the driver behind crashes, sound loss and screen glitches2Repair Windows errors before they cause bigger problems3Scan for outdated or missing drivers - takes under a minuteKubernetes places a Pod in two stages: it filters out nodes that cannot satisfy the Pod’s requirements, then scores the remaining feasible nodes and picks the highest-scoring one. For GPU workloads and SSD-heavy databases, you steer that process with node labels plus either nodeSelector (a strict label match) or node affinity (required or preferred rules). This is Part 2 of my Kubernetes scheduling series, and it answers four practical questions: how does Kubernetes decide where GPU workloads should run, how do you make a Pod run on an SSD node, what is the difference between nodeSelector and node affinity, and does preferred node affinity guarantee that Kubernetes will use that node? (It does not.)
How the scheduler decides: filter, then score
The kube-scheduler works in two phases. In the official wording, “the scheduler finds feasible Nodes for a Pod and then runs a set of functions to score the feasible Nodes and picks a Node with the highest score among the feasible ones to run the Pod” (Kubernetes Scheduler).
As an Amazon Associate I earn from qualifying purchases.
Factors the documentation lists include resource requirements, hardware and software constraints, policies, affinity and anti-affinity, and data locality. If no node is feasible, the Pod simply stays unscheduled until placement becomes possible.
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
That framing explains everything below:
- Hard rules (
nodeSelector, required node affinity) act in the filtering phase. A node that fails them is out. - Soft rules (preferred node affinity) act in the scoring phase. They add weight to matching nodes but do not remove the others.
Neither mechanism knows anything about your hardware. Kubernetes only sees node labels. A label is an administrator’s classification, so it does not provision, verify, or guarantee the underlying disk or GPU.
#1 Best Overall
- [ Maximum AI Compute Power ] Dominate complex workloads with the ASUS ESC8000A-E13. This 4U rack server is a powerhouse engineered for mass-scale AI, machine learning, and deep training. Featuring support for dual AMD EPYC 9005/9004 processors and up to eight dual-slot GPUs, it delivers the raw computational muscle required to train LLMs and run complex simulations effortlessly. Accelerate your data science pipeline and transform raw data into actionable intelligence faster than ever.
- [ Advanced Thermal Efficiency ] High performance demands elite cooling. The ESC8000A-E13 features a cutting-edge aerodynamic design with independent CPU and GPU airflow tunnels. Equipped with redundant hot-swap fans and optimized for liquid cooling integrations, this 4U server ensures maximum uptime under heavy, sustained workloads. Keep your data center running cool, quiet, and highly efficient while preventing thermal throttling during mission-critical enterprise operations.
- [ Scale with Flexible Storage ] Future-proof your infrastructure with unmatched storage and expansion flexibility. This offers comprehensive front-panel drive bays supporting Gen5 NVMe, SAS, or SATA drives alongside multiple PCIe 5.0 slots. Designed as a high-density 4U server capable of housing eight dual-slot GPUs: NVD H200, RTX PRO 6000 Blackwell, RTX PRO 4500 Blackwell or AMD Instinct MI350P PCIe Card, each supporting up to 600 watts.
- [ Enterprise-Grade Reliability ] Minimize downtime and secure your ecosystem with server-grade redundancy. The ESC8000A-E13 is built for 24/7 continuous operation, boasting 2+2 redundant (3200W total) 80 PLUS Titanium power supplies and integrated ASUS ASMB11-iKVM for comprehensive out-of-band management. Ideal for cloud service providers, rendering farms, and large enterprise infrastructure, it combines robust physical hardware with smart remote monitoring to safeguard your digital assets.
- [Reliability Guaranteed] Shop with total peace of mind knowing that every new computer component we sell is backed by our EPC 3-year warranty. Whether you are investing in high-speed DDR5 RAM or a powerhouse GPU, we protect your build against defects and performance failures. We stand firmly behind the quality of our hardware, ensuring that your setup remains fast, stable, and secure for years to come.
Step one: labels on the nodes
Placement rules need something to match. For SSDs, the official task example uses a disktype=ssd label (Assign Pods to Nodes using Node Affinity). An administrator applies it to the nodes that really have SSD storage:
kubectl label nodes <node-name> disktype=ssd
kubectl get nodes --show-labels
For GPUs, the cluster needs eligible GPU nodes and labels that identify the capability. Kubernetes documents node affinity for this and mentions Node Feature Discovery as one way to discover and label GPU-enabled nodes (Schedule GPUs). There is no universal GPU label: the actual label keys, drivers, device plugins and available resources depend on how your cluster or cloud provider is set up. Check what your nodes actually carry before writing a rule against it.
Affinity does not install drivers, allocate GPU capacity, or make an incompatible node usable. It only narrows or biases which nodes the scheduler considers.
Recommended Free Tools
Rank #2
- NVIDIA Volta GV100 Architecture — 4,608 CUDA Cores, 640 1st-Gen Tensor Cores delivering 14 TFLOPS FP32 and 112 TFLOPS deep learning performance for AI training, inference, HPC, and scientific computing workloads
- 32GB HBM2 ECC Memory — 900 GB/s Bandwidth — High-bandwidth memory on a 4096-bit bus with ECC error correction provides the memory capacity and throughput required for the largest AI models, simulations, and datasets
- PCIe 3.0 x16 Interface — 250W TDP — Standard PCIe Gen3 connectivity with passive cooling designed for enterprise rack server deployment in HPE ProLiant, Dell PowerEdge, and Supermicro platforms with adequate chassis airflow
- NVLink — Scale to 96GB Unified Memory — Connect two V100 GPUs via NVLink at 300 GB/s bi-directional bandwidth to scale GPU memory from 32GB to 96GB for larger AI training and HPC workloads
- Multi-Precision Computing — Supports FP64 (7 TFLOPS), FP32 (14 TFLOPS), FP16 (112 TFLOPS) and INT8 precision modes for flexible deployment across training, inference, and scientific simulation workloads
What is the difference between nodeSelector and node affinity?
nodeSelector is the simple option: every key/value label you list must be present on a node for it to qualify. Node affinity is more expressive, supporting operators and both required and preferred modes (Assigning Pods to Nodes).
| Aspect | nodeSelector |
Node affinity |
|---|---|---|
| Matching | Exact key/value labels; all must match | Expressions such as In inside match terms |
| Hard or soft | Hard only | Either: required or preferred |
| Best for | One or two obvious must-have labels | Alternatives, preferences, weighted choices |
A minimal nodeSelector for the SSD case:
spec:
nodeSelector:
disktype: ssd
How do I make a Pod run on an SSD node?
Use required node affinity when the workload must not run on anything else, such as a database whose performance target is unachievable on spinning disks. This is adapted from the official disktype=ssd example:
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: disktype
operator: In
values:
- ssd
The same task page also demonstrates a preferred version, which suits workloads that run better on SSD but can tolerate other nodes:
Rank #3
- AI-Optimized: Designed to support up to 4 GPUs, it is perfect for handling intensive AI and machine learning tasks, ensuring high performance and scalability for advanced computational needs.
- Intelligent Storage: Equipped with 8 hot-swappable 3.5" SATA/SAS drives (12Gbps), featuring SGPIO and temperature control, it ensures efficient data management and reliable storage performance.
- Robust Cooling: The system includes 3x 12038 hot-swap PWM fans and 2x 8038 rear fans, providing advanced thermal management to maintain optimal temperatures and ensure stable operation under heavy workloads.
- Rack-Ready: Comes with a pre-installed rail kit, allowing for quick and easy installation in standard 19-inch server racks, making it ideal for data center environments and enterprise setups.
- Versatile Connectivity: Offers USB 3.0 and the latest USB 3.2 Type-C ports, ensuring high-speed data transfer and compatibility with a wide range of peripherals and devices for enhanced connectivity options.
spec:
affinity:
nodeAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 1
preference:
matchExpressions:
- key: disktype
operator: In
values:
- ssd
Preferred rules carry a weight from 1 to 100. A matching node gets that weight added to its score from the scheduler’s other priority functions. It is a nudge, not an instruction, so a node with spare capacity but no SSD label can still win.
Required versus preferred
| Decision axis | Required affinity | Preferred affinity |
|---|---|---|
| Effect | Node must match for the Pod to be scheduled | Scheduler favors a match but may use another feasible node |
| No matching node available | Pod stays unscheduled (Pending) until one is available | Pod can still be scheduled on another feasible node |
| Appropriate use | Essential capability or policy requirement | Optimization that can be relaxed |
| Illustration | Must land on a GPU-capable pool | Prefer SSD nodes, but allow others if the workload tolerates it |
The GPU and SSD pairings are policy choices for illustration, not benchmark-backed recommendations. The decision is about what failure you prefer: a Pod that waits, or a Pod that runs somewhere slower.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Combining rules: AND and OR
- If you specify both
nodeSelectorandnodeAffinity, both must be satisfied for the Pod to be scheduled onto a node. - In required affinity, multiple
nodeSelectorTermsare ORed: any one matching term qualifies the node. - Multiple expressions inside a single term are ANDed: all must match.
- Preferred expressions add weighted score; nodes are still judged against all other requirements and scoring functions.
All of this comes from Assigning Pods to Nodes. The AND/OR split is the classic source of mistakes. Putting disktype=ssd and a GPU label as two expressions in one term demands both; putting them in two separate terms accepts either.
Rank #4
- Professional AI & Creator Workstation: AMD Radeon AI PRO R9700 GPU with 32GB GDDR6 is engineered for AI development, professional content creation, and compute-intensive workloads.
- Massive 32GB Memory Capacity: 32GB of GDDR6 memory on a 256-bit bus provides ample bandwidth for large AI models, 8K video editing, and complex 3D rendering.
- Advanced RDNA 4 with AI Accelerators: 64 Compute Units with 3rd Gen Ray Tracing and dedicated 2nd Gen AI Accelerators for groundbreaking AI performance and visual computing.
- Professional Blower Cooling: Efficient single blower design exhausts heat directly out of the chassis, ideal for multi-GPU workstation and server configurations.
- Enterprise-Grade Thermal Solution: Vapor chamber heatsink with industrial Honeywell PTM7950 thermal interface material ensures reliable cooling under sustained professional loads.
What “IgnoredDuringExecution” means
Both affinity types end in IgnoredDuringExecution: if node labels change after the Pod is scheduled, the Pod continues to run. Relabeling a node from ssd to something else will not evict a database already on it. The rules apply at scheduling time only.
Troubleshooting a Pod that will not schedule
- Run
kubectl describe pod <pod>and read the Events section for the scheduler’s reason. - Run
kubectl get nodes --show-labelsand confirm the exact key and value match your rule, including spelling and case. - Check whether you combined
nodeSelectorand affinity, since both must match. - Check the AND/OR structure of terms and expressions.
- Confirm the matching nodes have enough free resources for the Pod’s requests; a label match alone does not make a node feasible.
- For GPUs, verify the nodes are actually GPU-ready under your cluster’s setup (drivers, device plugin, discovery labels).
Scope and version note
The behavior described comes from the current, unversioned Kubernetes documentation as checked on 2026-10-05; the pages do not state a release number, so verify against your own cluster version. The documentation describes generic Kubernetes, not any cloud provider’s GPU label conventions or storage implementation, and it publishes no performance figures for GPU or SSD placement.
The Bottom Line
Label your nodes honestly, use nodeSelector or required affinity for non-negotiable hardware needs, and use preferred affinity only where a fallback is acceptable. Next in the series, the scheduler’s other levers build on this foundation.
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.




