Overview
NUSAPOD runs on two types of hosts: one control-plane server and one or more GPU nodes. The control plane is the management hub — it runs K3s (Kubernetes), the GPU VRAM partitioning layer, the NUSAPOD backend, and the web console. GPU nodes join the control plane and expose their VRAM as schedulable resources; they do not need to be on the same physical machine as the control plane, only reachable over the network.
You can add GPU capacity at any time by repeating the node-install step on additional hosts. The control plane itself does not need a GPU.
Prerequisites
Check the Requirements page before running the installer — you will need a valid license token and the control plane must meet the OS and hardware minimums.
Prerequisites
Operating system: Ubuntu 22.04 / 24.04 or Debian 12 (tier 1); RHEL / Rocky 9 (best-effort). x86_64 or arm64.
Hardware minimum: 2 vCPU, 4 GB RAM, 20 GB disk. No GPU required on the control plane.
Access: root or sudo access on the host.
Network: a stable hostname or IP address that GPU nodes can reach on port 6443 (K3s API) and the backend port (80 / 443 via the built-in Traefik ingress). Outbound 443 for pulling packages and images.
No Docker requiredat runtime — NUSAPOD uses K3s's built-in containerd. The installer handles K3s, Helm, GPU VRAM partitioning, and kubectl automatically; curl is the only prerequisite.
Install (one command)
Run the following on your control-plane host. Replace <your-license-token> with the token from your license email:
curl -sfL https://get.nusapod.app | sudo LICENSE=<your-license-token> bashThe installer:
- Installs K3s (Kubernetes), Helm, and GPU VRAM partitioning.
- Deploys the NUSAPOD backend and console via the licensed Helm chart.
- Creates the enrollment secret used by GPU nodes to join.
- Prints the GPU-node join command at the end — copy it for Step 6.
The installer is idempotent; re-running it with the same license upgrades in place.
Expose the backend — DNS and TLS
The chart ships a Traefik ingress that serves the backend on the control-plane host at port 80 (and 443 if TLS is configured) out of the box — no manual port-forwarding needed. For internet-accessible deployments, point a DNS record at the server's IP and configure TLS (cert-manager with Let's Encrypt works with the built-in Traefik). On a private LAN, plain http:// is acceptable. Set the PUBLIC_URL environment variable to the reachable address before running the installer, or pass it directly:
curl -sfL https://get.nusapod.app | sudo PUBLIC_URL=https://nusapod.example.com LICENSE=<token> bashThis URL is embedded in the GPU-node join command, so nodes can reach the backend to redeem their enrollment token.
Verify
After the installer finishes, confirm the backend is running:
kubectl -n nusapod get podsYou should see the backend pod in Running state. Open a browser to the control-plane host — the web console should be reachable on port 80 (or your configured domain).
Add GPU nodes
The installer prints a join command at the end. Copy it and run it on each GPU host — see the GPU node install guide for prerequisites (NVIDIA driver, network requirements) before running the command.
Get a license
NUSAPOD is distributed under a commercial license. To obtain a license token, contact us.
