Build1 distinct publisher3 min readPublished
Azure starts new subscriptions at zero GPU vCPUs and raises them by hand, which puts the one step you cannot rerun at the front of a walkthrough where everything after it is just a command you can repeat.
The Engineer · Build desk

Compiled by The EngineerSomething wrong?How this is made
Quota is the only artifact in this build that outlives the cluster. Azure grants it per subscription and it survives resource group deletion, so the walkthrough treats it as a one-time step rather than something you redo on every rebuild [8]. Everything downstream is a command. This one is a ticket a person at Azure approves, and the author's advice is that it has to happen before you plan to build, because without approval `az aks nodepool add` for a GPU fails outright [10]. New subscriptions sit at 0 vCPUs for GPU families, which the article attributes to cost and abuse potential [9].
The 108 is arithmetic, not an Azure constant. It is three nodes at 36 vCPUs, chosen to match the `--max-count 3` set on the GPU pool [7]. For that figure to transfer to your build you need the same VM family at 36 vCPUs per node, the same region, which is westus here [6], and the same ceiling of three. Note that 3 x 36 is exactly 108, so there is no headroom above the declared ceiling: a fourth node would need 144 vCPUs [20], and that is another approval round [10].
Scale-from-zero is what forces the taint and label to be declared at pool creation rather than found later. With no node running, the cluster autoscaler decides whether a pending pod would fit by reading the pool's declared taints, labels and VM size, then provisions a node if it would [14]. There is no running node to inspect, so the pool spec is the only evidence the autoscaler has. The three placement primitives then do separate jobs: the taint repels pods by default, a toleration lifts that block for one pod, and the `nodeSelector` steers it, which is why the vLLM pod spec carries both the toleration and the selector [15].
After that comes the part with no error message. AKS does not install the NVIDIA device plugin, and without it a GPU node never advertises `nvidia.com/gpu` as allocatable, so a pod requesting one stays Pending indefinitely [16]. The upstream DaemonSet at v0.17.1 tolerates only the standard `nvidia.com/gpu` taint, not the custom `sku=gpu` taint from the pool creation step, so it needs a JSON patch to schedule onto the node at all [17]. The taint that keeps CPU pods off your GPU also keeps the driver plugin off it.
The first link in the chain is the one this piece delegates: the VRAM requirement is worked out in a companion article on choosing the right GPU [19]. What lands on the node here is an AWQ-quantised Qwen2.5-7B served by `vllm/vllm-openai:latest` [3] on a single A10 with 24 GB [2]. If your model does not fit in 24 GB, the SKU changes, the vCPUs per node change with it, and the 108 you queued behind manual approval was the wrong number to ask for. That is the case for pricing the model against VRAM before you open the quota form, which is exactly the order the article states: model, VRAM requirement, GPU SKU, region availability, quota [5].
Ranked by verification strength, evidence, and original report placement.
The dev.to article is part of a series on running vLLM on AKS and walks through creating an AKS cluster with a GPU node pool, deploying vLLM onto it, and wiring up Prometheus and Grafana for visibility.
The GPU node used is Standard_NV36ads_A10_v5, with one A10 and 24 GB.
The deployment uses the image vllm/vllm-openai:latest serving Qwen/Qwen2.5-7B-Instruct-AWQ.
Observability is provided by kube-prometheus-stack (Prometheus plus Grafana), KEDA, and the NVIDIA DCGM exporter.
The build order follows one chain: model, then VRAM requirement, then GPU SKU, then region availability, then quota; the steps are ordered and each depends on the previous one.
The article requests Standard NVADSA10v5 Family vCPUs = 108 in westus, through Portal > Quotas > Compute.
Distinct publishers with included, body-backed reporting in this cluster.
dev.to
1 article · August 29, 2026
Follow any of these and your For You feed starts watching them — no settings page required.
invest
Nvidia's Perplexity talks move its money one layer further from its own chips1 distinct publisher
build
Intel puts its Arc GPU operating knowledge inside the coding agent already installed1 distinct publisher
build
OpenAI's confirmed NVIDIA footprint is a rack, not a chip; Rubin is still a roadmap1 distinct publisher
invest
H100 rentals are back to $2.35 an hour, and your AI cost model is stale1 distinct publisher
Evidence-backed comparisons of source perspectives and observed adoption signals. Read the methodology
Which Builder, Operator, and Investor concerns the observed source mix emphasized—not a truth score.
Evidence, demonstrated adoption, hype gap, incentives, and confidence are assessed independently, each on its own current evidence. How these are measured.
One practitioner's account, but a checkable one
Every specific in this story — the NV36ads_A10_v5 SKU, the 108-vCPU request in westus, the v0.17.1 plugin patch — comes from a single dev.to write-up with no independent confirmation. It scores as high as it does because the claims are commands rather than assertions: a reader can reproduce the node pool creation and the Pending-pod diagnosis in an afternoon. The claims that cannot be checked that way are Azure's own — zero default GPU quota, manual approval, quota surviving resource group deletion — and those are the ones the whole ordering rests on.
No use beyond the author's own build
Nothing tells us whether anyone else has run this. There are no usage numbers, no named deployments, no chart or image download counts — only one configuration in one region on one subscription, plus a pinned device-plugin version. A walkthrough being published is not evidence that it was adopted.
Undersold, especially on cost
The framing that a hand-approved quota gates everything downstream is not a stretch; it falls straight out of the author's own ordering, since every later step is a command you can repeat and this one is a ticket someone else closes. If anything the write-up soft-pedals the sharpest finding it has: that a GPU parked in the system pool bills continuously gets a single clause, with no dollar figure attached, and the arithmetic that a fourth node means another 36 vCPUs of approval is left for the reader to do.
Self-published craft credibility, no visible vendor stake
This is an individual writing a cross-linked series — the companion pieces on choosing a GPU and on flapping autoscalers point back at each other, and the payoff is reputation and readership. Azure, NVIDIA and the Qwen model all appear by name; nothing in the write-up indicates any of them is a sponsor or employer. The pull on a piece like this is to look authoritative and complete, which is a mild incentive to present one working path as the path rather than to favour a particular SKU.
Internally consistent, externally unverified, and perishable
The arithmetic checks out — 108 really is 3 x 36, and it really does match the max-count — and the technical reasoning about autoscaler placement hangs together. What holds confidence down is that the time-sensitive parts have no second witness and will drift: quota approval behaviour, the pinned v0.17.1 DaemonSet, chart defaults, and an image tag that says :latest. Solid enough to plan against today, worth re-verifying before you rely on it.