The GitHub Actions job "Required Checks" on 
texera.git/aws-eks/04-core-services-placement has succeeded.
Run started by GitHub user aicam (triggered by aicam).

Head commit for run:
9f2ab8a99c29d27d33e3d9f7ca2e53ba55c01123 / ali <[email protected]>
feat(k8s): isolate computing-unit pods on a dedicated Karpenter NodePool

CU pods are bare pods — the cu-manager creates them directly, with no
Deployment/StatefulSet behind them (KubernetesClient.createPod). If a cluster
autoscaler evicts one to repack an underutilized node, nothing recreates it and
the CU is permanently lost (often leaving a "zombie" DB row still marked
RUNNING). EKS Auto Mode's default pool runs consolidationPolicy:
WhenEmptyOrUnderutilized, which can mass-evict live CUs during a burst.

Give CUs their own NodePool with consolidationPolicy: WhenEmpty
(bin/k8s/utils/cu-nodepool.yaml, applied standalone via kubectl): Karpenter
never evicts a running CU to repack, while EMPTY CU nodes still scale down
normally. Deliberately NOT karpenter.sh/do-not-disrupt on the CU pods — that
also blocks empty-node scaledown/expiry and can pin nodes forever (orphaned
EC2). general-purpose-nodepool-disruption.yaml is the matching patch for any CU
that lands on the EKS-managed default pool.

The cu-manager pins CU pods onto that pool via a nodeSelector + toleration,
driven by three env vars (KUBERNETES_COMPUTE_UNIT_NODE_SELECTOR_LABEL / _VALUE /
_TOLERATION_KEY). All three are empty by default, so local / on-prem installs
schedule CU pods on the cluster's default pool unchanged (no-op); 
values-aws.yaml
sets them to match the cu-pool label/taint.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
Claude-Session: https://claude.ai/code/session_011uddVDp38gmru6oqVBwHFg

Report URL: https://github.com/apache/texera/actions/runs/29939521915

With regards,
GitHub Actions via GitBox

Reply via email to