aicam opened a new pull request, #6609:
URL: https://github.com/apache/texera/pull/6609

   > ⚠️ **Review-only PR — opened so the diff is easy to review on GitHub, then 
closed immediately. Not intended for merge as-is.**
   
   ### What changes were proposed in this PR?
   
   Roadmap item 3 from #5891 — **core-services node placement + autoscaler 
safety** — ported to the `base`/`aws`/`on-prem` layout. Two complementary, 
opt-in-by-default mechanisms so a cluster autoscaler (e.g. Karpenter) can 
reclaim idle nodes while core services stay available:
   
   1. **`coreServices` placement** (`values.yaml`): a `nodeSelector` + 
`tolerations`, **empty by default** (no-op for local / on-prem), wired into the 
always-on singleton **computing-unit manager**. An AWS overlay pins it onto a 
dedicated core-services node pool so it never blocks consolidation of a 
transient node.
   2. **PodDisruptionBudgets** (`maxUnavailable: 1`) for the replicated, 
stateless app services (webserver, access-control, agent, config, file, 
litellm, workflow-compiling) — new 
`templates/base/pod-disruption-budgets/app-service-pdbs.yaml`. They stay 
continuously available while remaining relocatable.
   
   Deliberately **not** using `karpenter.sh/do-not-disrupt`: on replicated 
services it blocks consolidation, and on singletons it can pin a node 
indefinitely (orphaned capacity). PDBs + node placement give the protection 
without that side effect. Stateful/session-affine services 
(`shared-editing-server`, `pylsp`) are excluded from PDBs since eviction would 
drop per-connection state.
   
   `values-aws.yaml` gains an example `coreServices` pin (node-pool label + 
toleration).
   
   ### Any related issues, documentation, discussions?
   
   Part of #5891 (item 3 of 6). Follows the object-storage work (#5932, #6295) 
and the template reorg (#5757). Ports a design validated downstream.
   
   ### How was this PR tested?
   
   `helm lint` passes. Rendered default vs AWS overlay:
   
   ```bash
   cd bin/k8s && helm dependency build
   # default: placement is a no-op (0 nodeSelector/tolerations on cu-manager)
   helm template test . | grep -c 'nodeSelector'   # cu-manager: 0
   # AWS overlay: cu-manager pinned, PDBs present
   helm template test . -f values-aws.yaml | grep 'texera.io/node-pool'
   ```
   
   - **Default render:** cu-manager pod spec unchanged (empty `coreServices` 
renders nothing); the 7 app-service PDBs render (inert on a static cluster — a 
PDB only gates *voluntary* evictions).
   - **AWS overlay render:** cu-manager carries the `nodeSelector` + 
`toleration`; all 7 PDBs present.
   
   **Open question for reviewers:** the 7 PDBs render unconditionally (they 
change the default render by adding 7 inert objects). Happy to gate them behind 
a flag if the "default render strictly unchanged" guarantee should cover them 
too.
   
   ### Was this PR authored or co-authored using generative AI tooling?
   
   Generated-by: Claude Code (Claude Opus 4.8)
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to