Skip to content

docs: add HCP scheduling controller design - #6649

Draft
Gerd Oberlechner (geoberle) wants to merge 3 commits into
Azure:mainfrom
geoberle:hcp-scheduling
Draft

docs: add HCP scheduling controller design#6649
Gerd Oberlechner (geoberle) wants to merge 3 commits into
Azure:mainfrom
geoberle:hcp-scheduling

Conversation

@geoberle

Copy link
Copy Markdown
Collaborator

Summary

  • Design doc for moving HCP placement decisions from Cluster Service into the backend
  • PlacementController: capacity-aware two-pass scheduling (current capacity, then scale ceiling) with least-loaded tie-breaking
  • ManagementClusterAssignmentSync: reconciles pending entries against observed CapacityReport data
  • Modifications to existing controllers: ClusterPendingClusterServiceIDAssign, ClusterClusterServiceCreate, CapacityReportingController

Test plan

  • Review design with team
  • Validate against David's original scheduling proposal
  • Confirm capacity formula covers edge cases (burst creates, MC unhealthy, crash recovery)

@openshift-ci

openshift-ci Bot commented Aug 21, 2026

Copy link
Copy Markdown

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: geoberle

The full list of commands accepted by this bot can be found here.

The pull request process is described here

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@openshift-ci

openshift-ci Bot commented Aug 21, 2026

Copy link
Copy Markdown

Skipping CI for Draft Pull Request.
If you want CI signal for your change, please convert it to an actual PR.
You can still manually trigger a test run with /test all

Move HCP placement decisions from Cluster Service into the backend.
Split into three phases: simple placement with provision shard pinning,
capacity-aware scheduling with pending lists, and observation-based
pending cleanup via CapacityReport resource ID mirroring.
…lout

Replaces the original 3-phase design (simple SPC-count → capacity-aware →
observation-based cleanup) with a revised phasing that delivers
capacity-aware scheduling from the first placement phase:

- Phase 0: Mirror ReadyResourceIDs/NotReadyResourceIDs from CapacityReport
  to ManagementClusterScheduling.Status. Pure data plumbing.
- Phase 1: Swift-NIC scheduling against ScaleCeiling with pending
  reservations. Two-path cleanup: CapacityReportingController clears
  observed entries, PendingCleanupController sweeps stale entries.
  ManagementClusterPlacementSync detects and self-heals CS pinning
  mismatches.
- Phase 2: Multi-resource capacity-aware fit with HCPResourceRequirements.

Key design changes from the original phasing:
- SPC Spec/Status split: Spec = scheduler intent, Status = CS-confirmed
  reality. Mismatch triggers error log and Spec overwrite for self-healing.
- PendingAssignedClusters introduced in phase 1 (was phase 2).
- No explicit assignedClusters field — ReadyResourceIDs ∪ NotReadyResourceIDs
  serves that role.
- Provision shard pinning via ClusterBuilder.ProvisionShardID() SDK method.
Align the Spec/Status mismatch description with the actual behavior
(log error + overwrite Spec with Status to self-heal) and replace
the PR Azure#6651 reference with a self-contained implementation description.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant