Skip to content

Document automatic volume placement (pin, load-aware, Pod co-location) - #178

Open
boddumanohar wants to merge 4 commits into
mainfrom
docs/volume-placement-draft
Open

Document automatic volume placement (pin, load-aware, Pod co-location)#178
boddumanohar wants to merge 4 commits into
mainfrom
docs/volume-placement-draft

Conversation

@boddumanohar

@boddumanohar boddumanohar commented Aug 3, 2026

Copy link
Copy Markdown
Member

Summary

Documents docs/usage/simplyblock-csi/volume-placement.md — how Simplyblock picks a new volume's primary storage node. This started from the "Volume Placement at Creation Time" design doc, but the design doc turned out to be stale relative to what's actually shipped in simplyblock-operator, so the content here is rewritten to match the real code, verified by reading (not just grepping) operator/internal/webhook/simplyblock_volume_placement_injector.go and csi-driver/pkg/spdk/controllerserver.go:

  • simplyblock.io/selected-storage-node is the canonical pin annotation (already documented for migration; this page notes it also works at creation time). host-id and legacy simplybk/host-id are accepted but auto-normalized into it — documented as deprecated.
  • Load-aware placement for new volumes is real and shipped, gated by volumeAutoPlacement.latencyBenchmarkEnabled (not .enabled, which only controls the separate continuous rebalancer) — it stamps a non-pinning simplyblock.io/placement-hint annotation. Documented present-tense, no "Planned" language.
  • Pod co-location (simplyblock.io/pod-affinity) has no EnableNodeAffinity precondition in the actual code — that cluster flag only affects SPDK's erasure-coding data plane and is unrelated to this CSI-level mechanism. Removed that incorrect precondition, including from the node-affinity.md cross-link.
  • simplyblock.io/disable-smart-placement is implemented and documented as-is.

Also corrects the volume-migration.md Auto-Rebalancing cross-reference to name latencyBenchmarkEnabled specifically, since that's the flag that actually gates creation-time placement.

Test plan

  • mkdocs build locally to confirm the new page renders and nav weight (40050) doesn't collide
  • Spot-check the annotation names/precedence against atlas-lib/kube/names.go and controllerserver.go once more before merge, since this is user-facing and precision matters

🤖 Generated with Claude Code

…inity, disable-smart-placement)

Adds a new page covering the PVC annotations from the "Volume Placement
at Creation Time" design doc that aren't documented anywhere yet:
simplyblock.io/host-id (Tier 0 pin, plus its deprecated simplybk/
prefix), simplyblock.io/pod-affinity (Tier 1 co-location, marked
Planned pending implementation), and simplyblock.io/disable-smart-placement
(opt-out). Cross-links added from node-affinity.md and volume-migration.md.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Aug 3, 2026

Copy link
Copy Markdown
Contributor

🤖: Deployment available as https://docstest.simplyblock.io/docs/volume-placement-draft

@noctarius

Copy link
Copy Markdown
Collaborator

Why would we point out tier 1 if nothing is implemented? Same as, why would we make a distinction between "tier 0" and "tier 1"?

The previous draft followed the design doc's proposed mechanism, which
turned out to be stale relative to the shipped code in
simplyblock-operator. Corrections, verified against
operator/internal/webhook/simplyblock_volume_placement_injector.go and
csi-driver/pkg/spdk/controllerserver.go:

- The canonical pin annotation is simplyblock.io/selected-storage-node;
  host-id and the legacy simplybk/host-id prefix are accepted but
  normalized into it automatically. Documented as deprecated, not as
  the primary annotation.
- Load-aware placement for new volumes is real and already shipped,
  gated by volumeAutoPlacement.latencyBenchmarkEnabled (not .enabled,
  which only controls the continuous rebalancer) — it writes a
  non-pinning simplyblock.io/placement-hint annotation. Documented as
  present-tense, not "Planned".
- Pod co-location (simplyblock.io/pod-affinity) has no
  EnableNodeAffinity precondition in the actual code — that cluster
  flag only affects SPDK's erasure-coding data plane, unrelated to
  this CSI-level mechanism. Removed the incorrect precondition from
  both the new page and the node-affinity.md cross-link.
- simplyblock.io/disable-smart-placement is implemented and documented
  as-is.

Also removed all "Planned" warnings now that every documented
annotation and behavior is verified against the current code, and
corrected the auto-rebalancing cross-reference in volume-migration.md
to name latencyBenchmarkEnabled specifically.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@boddumanohar boddumanohar changed the title Draft: document proposed automatic volume placement Document automatic volume placement (pin, load-aware, Pod co-location) Aug 3, 2026
@boddumanohar
boddumanohar marked this pull request as draft August 3, 2026 08:40
@boddumanohar

Copy link
Copy Markdown
Member Author

need to do some refining, moving it to draft state for now.

Matches the terse, table-driven format used elsewhere (e.g.
quality-of-service.md, backup-recovery.md's annotation reference,
reference/kubernetes/index.md): a resolution-order table, a single
annotations reference table, then one compact example per annotation
instead of narrative walkthroughs.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Aug 3, 2026

Copy link
Copy Markdown
Contributor

🤖: Deployment available as https://docstest.simplyblock.io/docs/volume-placement-draft

1 similar comment
@github-actions

github-actions Bot commented Aug 3, 2026

Copy link
Copy Markdown
Contributor

🤖: Deployment available as https://docstest.simplyblock.io/docs/volume-placement-draft

@boddumanohar
boddumanohar marked this pull request as ready for review August 3, 2026 12:36
Tier 1 (pod-affinity co-location) is already per-PVC opt-in, the
inverse of load-aware placement's cluster-wide opt-out default, so
disable-smart-placement never actually affected it in a way users
needed to override — not setting pod-affinity already excludes a PVC
from co-location. Matches the corresponding fix in
simplyblock-operator (csi-driver's coLocateEligible/disableSmartPlacement
plumbing reverted to a plain pod-affinity check).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Aug 3, 2026

Copy link
Copy Markdown
Contributor

🤖: Deployment available as https://docstest.simplyblock.io/docs/volume-placement-draft

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants