Files
lux-gpu-ci/helm/karpenter-values.yaml
zeekay dde006617a Initial commit: EKS GPU CI infrastructure
EKS cluster with Karpenter v1 NodePool that scales g4dn.xlarge spot
instances 0..1 on demand for CUDA workflows. ARC RunnerScaleSet
registers as [self-hosted, linux, amd64, cuda, gpu, t4].

Components:
- terraform/ — VPC, EKS 1.31, system node group, Karpenter IAM/SQS
- helm/karpenter-nodepool.yaml — v1 NodePool + EC2NodeClass for GPU spot
- helm/nvidia-device-plugin-values.yaml — DS with GPU taint toleration
- helm/arc-values.yaml + helm/runner-scaleset.yaml — ARC v0.9.x
- bootstrap.sh — one-shot deploy
- Makefile — init/apply/destroy/verify/cost-estimate

Cost: ~$138/mo idle (EKS control plane + tiny system node + NAT),
~$0.027/build for a 10-minute g4dn.xlarge spot run.
2026-02-27 09:00:00 -08:00

41 lines
880 B
YAML

# Karpenter controller values. Render with:
# helm template karpenter oci://public.ecr.aws/karpenter/karpenter \
# --version 1.0.7 -n kube-system -f helm/karpenter-values.yaml
#
# Substitute placeholders via bootstrap.sh from terraform output.
settings:
clusterName: ${CLUSTER_NAME}
clusterEndpoint: ${CLUSTER_ENDPOINT}
interruptionQueue: ${KARPENTER_QUEUE_NAME}
serviceAccount:
name: karpenter
# Pod Identity association is created by the karpenter terraform module.
# No annotations needed.
replicas: 1
controller:
resources:
requests:
cpu: "200m"
memory: "256Mi"
limits:
cpu: "1"
memory: "1Gi"
# Schedule controller on the always-on system node group.
nodeSelector:
role: system
tolerations:
- key: CriticalAddonsOnly
operator: Exists
podDisruptionBudget:
name: karpenter
maxUnavailable: 1
logLevel: info