Build1 distinct publisher2 min readUpdated
Gremlin's walkthrough of topology spread constraints is sound mechanics. Its own worked example still permits three of four replicas in one region, and the setting it recommends cannot enforce anything.
The Engineer · Build desk
Compiled by The EngineerSomething wrong?How this is made
maxSkew bounds a difference. It does not distribute anything. With three zones and four replicas, the tightest legal setting still has to put the fourth replica somewhere, and 2/1/1 is the only shape available [6][8][10]. Lose the zone holding two and half the replicas go with it [10]. That is the arithmetic inherited by every capacity plan resting on the phrase "we are zone-redundant".
The region detail in Gremlin's own example is the sharper one. Two of the three zones, us-east-1a and us-east-1b, sit in the same region [6]. Spreading on `topology.kubernetes.io/zone` treats them as two independent domains, so a perfectly legal 2/1/1 with the pair in us-east-1a puts three of four replicas inside us-east-1 [11]. That is the concentration the post opens by warning against [7]. A zone key buys zone redundancy and nothing above it.
Then there is `whenUnsatisfiable`. Gremlin sets it to `ScheduleAnyway` so the pod runs even when the constraint cannot be met [8], and describes `maxSkew: 1` in the same passage as ensuring that no node carries more than one extra replica [9]. Both cannot be true. `ScheduleAnyway` is a scoring preference that favours topologies which reduce skew [4]; under real zone pressure, from a drain or a capacity shortfall, the scheduler packs pods into the surviving domains and reports success. `DoNotSchedule`, the default [4], is the version that means what it says, and its price is Pending replicas at exactly that moment. Which failure you prefer is the actual decision, and it is buried in one word of YAML.
Worth noticing too that the recommendation counts nodes in prose while keying on zones in the manifest [8][9]. A slip in a blog post costs nothing. The same slip written with `topologyKey: kubernetes.io/hostname` gives you tidy node-level balance and no zone guarantee at all.
One structural detail in the field list repays attention: the restriction is one constraint per `topologyKey` and `whenUnsatisfiable` pair [5], which leaves both values of `whenUnsatisfiable` available on the same key [17]. A hard rule at a loose skew alongside a soft rule at a tight skew is therefore expressible. Most manifests carry one constraint and stop there.
Which leaves the question the material does not answer. The text we have ends at a heading promising how to find pods with missing topology spread constraints [16], and at fleet scale that is the whole problem: a cluster where four deployments set the field and forty omit it has no spread policy, it has four opinions. Cluster-level defaults exist [2], and they are the only version of this that survives contact with a platform team that does not review every manifest.
Follow any of these and your For You feed starts watching them — no settings page required.
Ranked by verification strength, evidence, and original report placement.
The recommended manifest sets maxSkew to 1, topologyKey to topology.kubernetes.io/zone so spread is limited by zone even where zones span multiple regions, whenUnsatisfiable to ScheduleAnyway so the pod runs even if the constraint cannot be satisfied, and a labelSelector matching app: nginx.
Gremlin's post argues that most Kubernetes users pay little attention to where pods are placed, that pod distribution plays a bigger role in reliability than they think, and that adding a few lines to a manifest can make deployments zone-redundant and evenly scalable.
Topology spread constraints determine how Kubernetes distributes pods across failure domains such as regions, zones and nodes. They are defined in the field spec.topologySpreadConstraints and can be applied to a pod or set at cluster level as a default.
The constraint fields are maxSkew, minDomains, topologyKey, whenUnsatisfiable, labelSelector, matchLabelKeys, nodeAffinityPolicy and nodeTaintsPolicy. topologyKey is the node label whose values group nodes into topology domains; minDomains is the minimum number of eligible domains.
whenUnsatisfiable defaults to DoNotSchedule, under which maxSkew is the maximum permitted difference between the minimum number of pods in a domain and the matching pods in the target topology. Setting ScheduleAnyway schedules the pod regardless, giving higher precedence to topologies that reduce the skew.
Only one topologySpreadConstraint may be defined for a given topologyKey and whenUnsatisfiable pair.
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.
Mechanics documented in one vendor source, corrections deterministic
The constraint semantics, field defaults and the worked example are stated explicitly in the single supplied source, and the corrective claims follow deterministically from that source's own numbers (four replicas, three zones, maxSkew 1, zone-keyed topology). Evidence is capped because there is one publisher, no independent corroboration of the API behaviour, and the captured text is truncated.
No adoption data in supplied material
The supplied source is an explainer with no release, deployment, benchmark, pricing, licensing or usage disclosure, and it reports no counts of clusters, users or customers applying topology spread constraints or Gremlin's Detected Risks. Nothing in the cluster supports an adoption measurement.
Promise of zone-redundant, evenly scalable overstates what the recommended config delivers
The post promises deployments that are 'zone-redundant and evenly scalable' from a few manifest lines, but its recommended whenUnsatisfiable: ScheduleAnyway makes the constraint a preference the scheduler may ignore, its own four-replica example can only reach 2/1/1 (half the replicas in one zone), a zone-keyed spread can still concentrate 75 percent of replicas in us-east-1, and evenness requires replicas to be a multiple of domains. The mechanics are accurate, so the gap is overclaimed outcome rather than false description.
Vendor explainer routing to its own risk-detection product
The publisher sells reliability tooling and the post's detection section directs readers to Gremlin's built-in Detected Risks feature, telling them the 'topology spread constraints absent' risk will flip from at-risk to mitigated and raise their service reliability score once a constraint is added. That commercial pull aligns with framing a preference-only setting as mitigation, though the post does also give a vendor-neutral kubectl plus jq alternative.
Deterministic corrections, single truncated vendor source, no adoption signal
Confidence is moderate: the corrective arithmetic is deterministic given the source's stated example, and the field semantics are quoted verbatim, so the analytical core is solid. It is held down by a one-publisher cluster, a truncated body, an internal inconsistency in the post's own maxSkew wording, and a complete absence of adoption evidence.
build
Rate limit your MCP servers, because a retrying agent turns one error into a billing incident1 distinct publisher
build
Kubernetes 1.35 lands 60 enhancements, 17 of them stable: treat the upgrade as a compatibility audit1 distinct publisher
build
The Slack CLI that skips admin approval keeps live tokens in a file your agent can read1 distinct publisher
security
GitLab 19.3 puts agent runtime, inference models and secrets under one permission model1 distinct publisher
Distinct publishers with included, body-backed reporting in this cluster.
1 article · August 23, 2026