VMs parked on sole-tenant nodes that shared tenancy would serve
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
| Field | Value |
|---|---|
| Rule IDs | RC-1205 |
| Category | rightsizing |
| Severity | medium |
| Metric | none — pure configuration read |
| Source | vm_sole_tenant.go |
Where it applies
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
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”.