IMAGE_NAME="eks-node-gpu" IMAGE_DESCRIPTION="Ubuntu EKS K3s GPU worker node — NVIDIA server driver (DKMS pre-built) + nvidia-container-toolkit; agent-only (GPU nodes never run the EKS control plane)" DISTRO="ubuntu" UBUNTU_VERSION="26.04" UBUNTU_CODENAME="resolute" # 16G — headroom for kernel headers, NVIDIA driver + DKMS build artefacts, and # nvidia-container-toolkit, mirroring scripts/images/ubuntu-gpu-nvidia.conf. IMAGE_SIZE="16G" # K3s bundles its own containerd, so no containerd/runc package here. The # NVIDIA server driver + nvidia-utils come from the stock Ubuntu repos and are # installed in setup.sh (kernel-version-pinned DKMS build, like the ubuntu-gpu # recipe). nvidia-container-toolkit lives in its own NVIDIA-hosted apt repo, # which is not enabled on the base cloud image, so it is also added+installed # in setup.sh rather than here (see scripts/images/ubuntu-gpu-nvidia-setup.sh). APT_PACKAGES="ca-certificates curl jq iptables conntrack cgroup-tools initramfs-tools" # ecr-credential-provider is the ONLY server binary a GPU worker needs: the # nodegroup userdata points kubelet at it (image-credential-provider-config + # bin-dir=/usr/local/bin) for ECR pulls, and kubelet treats a referenced-but- # missing provider binary as a FATAL init error (RegisterCredentialProviderPlugins), # so the node never registers. The Alpine eks-node ships it; the GPU AMI must too. # Server-only binaries (token-webhook, gateway-*, konnectivity, k3s server) stay # omitted — GPU nodes are agent-only. BUILD_COMMANDS="CGO_ENABLED=0 GOFIPS140=v1.0.0 go build -o bin/ecr-credential-provider ./cmd/ecr-credential-provider" INSTALL_BINARIES="bin/ecr-credential-provider:/usr/local/bin/ecr-credential-provider" # Role-agnostic helper scripts (including k3s-agent-prestart, the shared # start_pre logic for the k3s agent role: env require + IMDS provider-id) are # reused verbatim from scripts/images/eks-node/ — only the init wiring # changes: OpenRC -> systemd. Server-only units (role selector, k3s server, # eks-token-webhook, konnectivity, state-report, k3s recovery, mgmt-net) are # intentionally not ported — GPU nodes are single-NIC workers. INSTALL_FILES="\ scripts/images/eks-node/mulga-ebs-byid.sh:/usr/local/sbin/mulga-ebs-byid \ scripts/images/eks-node/mulga-eks-provider-id.sh:/usr/local/sbin/mulga-eks-provider-id \ scripts/images/eks-node/mulga-vpc-mtu.sh:/usr/local/sbin/mulga-vpc-mtu \ scripts/images/eks-node/k3s-agent-prestart.sh:/usr/local/sbin/k3s-agent-prestart \ scripts/images/eks-node-gpu/k3s-agent.service:/etc/systemd/system/k3s-agent.service \ scripts/images/eks-node-gpu/mulga-ebs-byid.service:/etc/systemd/system/mulga-ebs-byid.service \ scripts/images/eks-node-gpu/mulga-eks-provider-id.service:/etc/systemd/system/mulga-eks-provider-id.service \ scripts/images/eks-node-gpu/mulga-vpc-mtu.service:/etc/systemd/system/mulga-vpc-mtu.service \ scripts/images/eks-node-gpu/mulga-cdi-generate.service:/etc/systemd/system/mulga-cdi-generate.service \ scripts/images/eks-node-gpu/99-mulga-ebs-byid.rules:/etc/udev/rules.d/99-mulga-ebs-byid.rules" ENABLE_SERVICES="k3s-agent mulga-ebs-byid mulga-eks-provider-id mulga-vpc-mtu mulga-cdi-generate" SETUP_SCRIPT="scripts/images/eks-node-gpu/setup.sh" AMI_NAME="spinifex-eks-node-gpu" SYSTEM_TAG="spinifex:managed-by=eks gpu-vendor=nvidia"