NusapodDocsRequest a license

Control-Plane Setup

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:

bash
curl -sfL https://get.nusapod.app | sudo LICENSE=<your-license-token> bash

The 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:

bash
curl -sfL https://get.nusapod.app | sudo PUBLIC_URL=https://nusapod.example.com LICENSE=<token> bash

This 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:

bash
kubectl -n nusapod get pods

You 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.