NatLabRockies / NatLabRockies/openstudio-server-helm

Phase 2: Cluster Autoscaler Priority-Based Scale-Up for 10k+ Nodes

Open
#90 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

enhancement
Dominant language
Go Template
Stars
12
Forks
24
PR merge metrics
No merged PRs in 30d

Description

Problem

At 2 workers per node (400m CPU request), 10k workers requires 5,000+ nodes. Node provisioning becomes a bottleneck — OpenStack API rate limits, node bootstrap time (2-5 min per node), and cluster autoscaler max-node-provision-time (20 min default) all constrain scale-up speed (B8).

What Phase 1 Did

  • Reduced worker CPU request from 600m→400m for better pod density (~2 per 1-core slice)
  • Increased worker memory request from 700Mi→1Gi
  • Added worker resource limits (CPU: 2, memory: 2Gi)

What Remains (This Issue)

  1. Priority-based scale-up: Add workerPriority and webPriority values that map to priority class names, enabling cluster-autoscaler to prioritize worker nodes over other pods during scale-up events
  2. ProvisioningConfig: Add cluster-autoscaler provisioningConfig support with multiple node group definitions (worker, web, system) and per-node-group minSize / maxSize / instanceType
  3. Over-provisioning: Add a buffer node group that creates extra nodes ahead of scale-up demand using PDB-violating low-priority pause pods
  4. Bottleneck documentation: Update values_large.templateyaml with node provisioning guidance per provider:
    • OpenStack: Recommended CAPI node group sizes, Nova quotas
    • AWS: Recommended ASG warm pools, instance families
    • GKE/AKS: Recommended node pool configs

Design Notes

  • Priority-based scale-up: priorityClassName on pending pods determines which node pool expands first
  • Over-provisioning uses pause containers with very low priority that PDBs don't protect; when real pods arrive, pause pods are preempted
  • This is provider-specific — AWS has ASG warm pools, OpenStack CAPO has ServerGroup/ServerTemplate
  • The chart should document but not implement provider-specific autoscaler config (defer to cloud-provider subdirectories)

References

  • .agents/results/result-tf-infra.md — B8: Node Provisioning (HIGH)
  • openstudio-server/values.yamlworker.container.resources.requests.cpu: 400m
  • openstudio-server/templates/_scheduling.tpl — priority classes

Acceptance Criteria

  • Priority class hierarchy documented in values.yaml
  • Buffer/over-provisioning pause pod template (opt-in, disabled by default)
  • values_large.templateyaml updated with node provisioning guidance per provider
  • OpenStack-specific CAPO node group sizing documented
  • AWS-specific ASG warm pool config documented

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with openstudio-server/values.yaml and openstudio-server/templates/_scheduling.tpl to understand the existing worker resources and priority classes. Then inspect values_large.templateyaml and the chart structure for where provisioningConfig, node groups, buffer pods, and provider guidance would fit. Done means the opt-in buffer configuration, documented priority hierarchy, and OpenStack and AWS provisioning guidance satisfy the listed acceptance criteria.

Written by the indexing model from the issue text.

Assessment

Tech stack
helm, kubernetes
Domain
cloud, devops, documentation, infrastructure
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.