Skip to main content
rightsizing · gcp

VMs parked on sole-tenant nodes that shared tenancy would serve

resource types
1
rule IDs covered
1
severity
medium

What does ZopNight detect here?

GCP charges a fixed 10% sole-tenancy premium on the vCPU and memory cost of VMs placed on dedicated nodes. ZopNight detects the placement from the discoverer's sole_tenant flag but deliberately abstains from a savings figure. The premium SKU cannot yet be isolated per VM, and flat fractions were retired.

Signal and threshold

How ZopNight evaluates VMs parked on sole-tenant nodes that shared tenancy would serve.
Field Value
Rule IDsRC-1205
Categoryrightsizing
Severitymedium
Metricnone — pure configuration read
Sourcevm_sole_tenant.go

The 10% premium and where it hides

Sole-tenant nodes give a VM a physical host it shares with nobody, and GCP prices that isolation as a fixed 10% premium on the underlying vCPU and memory cost. The Cloud Billing Catalog publishes it as its own SKU line (“Sole Tenancy Premium for … Instance Core/Ram running in …”), separate from the node charge itself. Workloads that needed it for a licensing term or a compliance audit often keep paying it years after the requirement lapsed.

Detection works; pricing is withheld

The placement signal is solid: the discoverer stamps sole_tenant=true from the instance’s node affinity, and the rule accepts it from either the metadata sink or its legacy label mirror, failing closed when neither is present. What the rule refuses to do is attach dollars. Earlier revisions shipped flat fractions: 30% of the bill, later a 9.09% premium-removal approximation. Both were retired because the premium applies to the vCPU-plus-memory slice, not the whole bill, and no live rate backed either number.

Why not just multiply by 10%

Two inputs are missing. The pricing pipeline currently collapses every sole-tenancy SKU into a single node-rate key, so the distinct premium rate is indistinguishable from the regular per-core rate. And the discovered VM record carries no vCPU or memory quantity to multiply a per-core premium against. Until both exist, any figure would be an estimate wearing a price tag, so the rule surfaces nothing rather than a number it cannot defend.

Confirm node affinity on a VM

Terminal window
gcloud compute instances describe my-vm --zone us-central1-a \
--format="yaml(scheduling.nodeAffinities)"

A populated nodeAffinities block confirms sole-tenant placement. Migrating off is a recreate onto shared tenancy, not an in-place flag change, so plan it like a resize with downtime.

Legitimate reasons to stay sole-tenant

Bring-your-own-license Windows or SQL Server workloads, per-core licensing audits, and hard isolation mandates all justify the premium. The point of the flag is to force the question annually, not to assume the answer is always “move”.

See it fire on your bill.

Connect an account read-only. The first findings land in minutes.

417 rule families across 353 resource types on 22 platforms. Every threshold, metric, and IAM action is documented on these pages before you grant anything.

417 rule families documented
353 resource types covered
read-only default access level
Multi-cloud automation· Production-ready in 30 min· SOC 2 · ISO 27001· 20–60% off the bill, first month· 4 platforms · 1 console· Multi-cloud automation· Production-ready in 30 min· SOC 2 · ISO 27001· 20–60% off the bill, first month· 4 platforms · 1 console·