- On a Kubernetes Operator executor, as pods in the cluster, like every other chain.
- On a bare-metal Agent executor, as Docker containers on the host rather than as
systemdservices.
Deploying onto an Agent, the wizard’s Runtime field locks itself to Docker — Igra’s only valid runtime — so there’s nothing to choose. See Runtime.
On an Agent, Novacula installs the Docker engine for you — it’s a prerequisite of the container runtime, not something you prepare in advance. Before an Igra node’s first launch the agent checks whether it can reach the Docker daemon; if it can’t, it adds Docker’s official package repository (pinned, with a checksum-verified signing key), installs
docker-ce, enables the daemon, and joins itself to the docker group. The agent then restarts once so that group membership takes effect. The step is idempotent — a no-op on a host that already has a working Docker — and Docker is left in place when you delete the node.Auto-install covers Ubuntu hosts. On another distribution the step fails with an explicit message instead of guessing at your package manager: install the Docker engine yourself and make sure the agent’s user can reach the daemon socket, then redeploy.Quick start on k3s
No full cluster? A lightweight distribution works too. k3s is a CNCF-certified, single-binary Kubernetes that stands up a working cluster in one command — enough to host the Novacula Operator and an Igra node.1
Install a single-node k3s cluster
local-path storage class, which the Operator’s PVCs can use. It stores data on the node’s own disk, so size that disk for Igra’s volumes (see Resource defaults below). This is fine for a test or galleon-testnet node; for a production mainnet node use a real CSI storage class instead.2
Install Helm
The Operator ships as a Helm chart, so you need Helm:
3
Point your shell at the cluster
root with 600 permissions. If you aren’t running as root, either use sudo, or install k3s with --write-kubeconfig-mode 644 (append it to the install command above) so kubectl and helm can read the file.4
Install the Operator
Copy the Helm command from the Connect Executor screen in the UI — it comes pre-filled with your Hub URL, executor key, and the current version, so you don’t fill those in by hand. It looks like this:Then confirm the Operator rolled out:The executor row in the UI flips to
online within seconds. See Connect an executor and the full Provision on Kubernetes walkthrough.5
Deploy Igra
Open the Deploy Node wizard, pick Igra and a network, and deploy. See Deploy a node.
Networks
The wizard offers exactly the networks, clients, and versions the executor declares. Pick a network and the wizard pre-fills the resource and storage defaults for it. Igra has a single node type, full.
Clients
The two roles move in lock-step at the same version. kaspad runs with a co-located
kaspa-rest-proxy helper that gives the HTTP-less node a readable REST surface for health probing; it’s part of the node and not something you configure.
Resource defaults
The wizard pre-fills these per network; you can raise them before deploying.
kaspad is the heavier process — plan for a node well above 32Gi total RAM once both processes and the OS are accounted for.
Ports
The Ethereum JSON-RPC is served on:8545 (HTTP) and :8546 (WebSocket). Point your apps at these.
Configuration
Igra runs with a fixed, upstream-pinned configuration per network — there are no client config overrides to set when you deploy. The product picks the correct ports, chain identity, and bootstrap for the network you chose.Sync
- The execution layer receives blocks from kaspad over the internal Engine API; the L2 itself has no peer-to-peer chain-tip discovery.
- Block Height and Sync Progress are derived by comparing the node’s local height against the public Igra explorer’s tip on each reporting cycle. This requires outbound HTTPS from the executor to the public explorer (
explorer.igralabs.com). If your network blocks that egress, Sync Progress will report stale.
Monitoring
Open a node and select the Monitoring tab to read the common per-node metrics — Block Height, Peers, Sync Progress, plus EL Finalized Block and EL Safe Block extras — as charts. Kaspad-side health is surfaced too: Kaspad DAA Score (the kaspad chain height) and Kaspad Sync progress. See Node monitoring.Common patterns
- RPC endpoint — accept the defaults and expose
:8545(HTTP) and:8546(WebSocket) to your apps. Check egress to the public Igra explorer is open, or Sync Progress won’t track.