Skip to content

feat: dedicated storage class and nodepool for archive nodes#85

Merged
bdchatham merged 2 commits intomainfrom
feat/archive-infrastructure
Apr 14, 2026
Merged

feat: dedicated storage class and nodepool for archive nodes#85
bdchatham merged 2 commits intomainfrom
feat/archive-infrastructure

Conversation

@bdchatham
Copy link
Copy Markdown
Collaborator

Summary

  • Adds archive-specific infrastructure routing: dedicated StorageClass (io2-archive) and Karpenter NodePool (sei-archive)
  • Archive PVCs use io2 with reclaimPolicy: Retain at 25TB (up from 4TB gp3)
  • Archive pods schedule on memory-optimized instances (r6i/r7i) via mode-aware tolerations and node affinity
  • Bootstrap Jobs get the same nodepool affinity as StatefulSet pods
  • Ships controller-owned StorageClasses in config/storage/ (independent of config/default namePrefix)
  • Removes dead TolerationVal field (toleration value now derived from nodepool name)

Changes

File Change
platform.go Add NodepoolArchive, StorageClassArchive, NodepoolForMode(). Remove TolerationVal.
cmd/main.go Wire new env vars, remove SEI_TOLERATION_VALUE
sizing.go Route archive to StorageClassArchive
resources.go Mode-aware nodepool for pod affinity and tolerations
bootstrap_resources.go Same nodepool affinity for bootstrap Jobs
platformtest/config.go Updated fixture
manager.yaml New env vars, bumped archive size to 25TB
config/storage/ New: gp3-10k-750 and io2-archive StorageClasses

Tide team review findings addressed

  • P0: namePrefix no longer applies to StorageClasses (moved to independent kustomization)
  • P0: Bootstrap Job tolerations now use mode-aware nodepool
  • P1: Bootstrap Job gets karpenter.sh/nodepool node affinity (was missing)
  • P2: NodepoolForMode uses named constant, not string literal
  • P2: Dead TolerationVal removed

Test plan

  • All existing tests pass
  • Deploy with sei-archive NodePool and io2-archive StorageClass
  • Archive SeiNodeDeployment creates PVC with correct storage class and size
  • Archive pod schedules on archive nodepool with correct tolerations

🤖 Generated with Claude Code

bdchatham and others added 2 commits April 14, 2026 14:42
Archive nodes require io2 storage (25TB+) and memory-optimized
instances (256GB+ RAM) that differ fundamentally from other node
types. This adds archive-specific infrastructure routing:

- New platform config fields: StorageClassArchive, NodepoolArchive
- Archive nodes route to io2-archive StorageClass (25TB, Retain)
- Archive pods schedule on sei-archive Karpenter NodePool via
  mode-aware tolerations and node affinity
- Bootstrap Jobs get the same nodepool affinity as StatefulSet pods
- Removes unused TolerationVal (toleration value now derived from
  nodepool name via NodepoolForMode)
- Ships gp3-10k-750 and io2-archive StorageClasses in config/storage/
  (independent of config/default namePrefix)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…routing

Tests verify:
- Archive PVC uses io2-archive StorageClass at 25TB
- Archive pods schedule on sei-archive nodepool with correct tolerations
- Full node pods schedule on sei-node nodepool (regression)
- defaultStorageForMode routes archive vs full correctly
- defaultResourcesForMode returns archive-specific resources

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@bdchatham bdchatham merged commit e8df2a8 into main Apr 14, 2026
2 checks passed
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.

1 participant