mirror of
https://github.com/luxfi/lux-gpu-ci.git
synced 2026-10-30 16:20:42 +00:00
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.
41 lines
880 B
YAML
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
|