kubectl or a Kubernetes client library. The Ornn CLI is optional.
There are two separate APIs:
- Ornn REST API (
https://api.ornn.com): authenticate with an Ornn API key to create clusters, read their status, retrieve access, add or remove workers, and tear clusters down. - Your cluster’s Kubernetes HTTPS API: authenticate with the issued kubeconfig to manage Pods, Jobs, Deployments, Services, namespaces, and quotas. Use the server address and namespace in that file, not
api.ornn.com. An Ornn API key is not a Kubernetes bearer token.
/controllers). Buying capacity does not launch a cluster.
The cluster table shows cluster name, status, node count, GPU model, network, and last update.
On the cluster manage page, the node list fits each page to the available window space, with previous and next controls and a result count. Search and filters apply to the whole cluster and return you to the first page. This also applies to Slurm clusters.
Old /compute/kubernetes bookmarks now open Orchestration (/controllers), where you create and manage clusters.
Before you start
- Sign in to an approved organization that owns the reservation.
- The reservation must be active and have available, eligible nodes.
- For API integration, create an API key and use an HTTPS client. For the terminal workflow, install kubectl and use a version compatible with your cluster.
- Your organization can run one Kubernetes cluster at a time, and cannot run a Kubernetes cluster and a Slurm cluster at the same time. Tear down the other cluster and wait for it to finish first.
- Decide whether you need a Public or Private connection. Private access requires WireGuard on your computer. Choose Private if you need a shared filesystem at
/workspace. - Save any data on selected nodes before launch. If Ornn asks to clean an existing environment, that cleanup can destroy local data.
- Spot VMs cannot join a cluster.
- Running VMs on your reservation can join as workers, alone or alongside nodes. While a VM is in a cluster, its SSH keys are set aside and its open SSH sessions end; its disk and data stay. The keys come back when the VM leaves the cluster, including any key changes you made in the meantime.
- In a Public cluster, every worker needs its own network address. A VM whose address another worker already uses cannot join; choose a different VM or use Private networking.
Provision and manage through REST
Every lifecycle step in the console has an API equivalent. With an Ornn API key, your automation can:- List the hosts on a reservation and choose eligible ones.
- Create a cluster on those hosts.
- Poll the cluster list until its
stateisactive. - Fetch the kubeconfig.
- Run GPU workloads through the cluster’s own Kubernetes API.
- Add or remove workers.
- Tear down the cluster and confirm it is gone.
curl, and Python examples, including polling, safe retries, and teardown confirmation. Keep these rules in mind:
- Creating a cluster for a reservation that already has one returns the existing cluster; it does not add hosts. Use the worker endpoints to change membership.
- Ornn does not add or remove workers automatically. Pending Pods do not add capacity; scaling is an API call your automation makes against hosts you already reserved.
- The kubeconfig token is valid for seven days. Reading access again returns the same token. Contact support for new credentials; do not tear down a working cluster to renew access.
- There is no
GETfor one cluster. Read the cluster list and select bycontroller.id.
Launch through the console or Ornn CLI
1
Open Orchestration
Open Orchestration and start a new cluster. Select Kubernetes.
2
Select your nodes
Open Choose available nodes to cluster, select your reservation group, and select the nodes to use. Only eligible nodes appear. The node count is a worker count, not a GPU count.Select VMs in the same dropdown alongside nodes. Only running VMs that are not in another cluster appear.If the picker is empty, check that the term has started and the nodes are available. Launch On-Demand, when shown, opens a separate VM purchase flow; it does not create a Kubernetes cluster.
3
Choose networking and launch
Public makes the cluster API reachable over the internet; authentication is still required. Private requires a connection to the selected organization’s private network. Set up its WireGuard config in the launch dialog or the cluster’s Network tab.Review the selected nodes and any cleanup confirmation, then click Create cluster. The manage page shows progress while Ornn creates the control plane, prepares the hosts, joins the workers, and issues access. Image downloads and host preparation can take several minutes. Wait for Download kubeconfig to become available.
--vms <vm-id>,<vm-id>; use --nodes 0 for a cluster of VMs only. For automation, use the complete inputs and consent described in ornn help launch and the CLI interaction guide.
Connect and verify access
1
Download your kubeconfig
On the cluster manage page, select the Download kubeconfig icon beside the Actions menu. This file contains the API address, default namespace, and a token with cluster-admin access to your cluster. The token is valid for seven days. Keep it private.
2
Select the downloaded file
In a macOS or Linux terminal, replace the path with the actual downloaded filename:The commands below use that default namespace. Do not paste a placeholder such as
tenant-<id> into a manifest. If your manifest specifies a namespace, use the Namespace shown on the cluster page.3
Check the cluster
Bring up WireGuard first if the cluster is Private, then run:Check that your selected workers are Ready. The node list also includes managed control-plane nodes; they are not GPU capacity for your workloads.
Run your first GPU job
This NVIDIA example requests one GPU, runsnvidia-smi, and exits. Use it on NVIDIA capacity with a compatible driver. It does not install a training framework.
amd-smi installed, request amd.com/gpu: 1, and run ["amd-smi", "list"] instead. Use a distinct job name. See the Kubernetes GPU scheduling guide for resource-request rules.
Run your application
Use an image that includes your framework and dependencies. Match its CUDA or ROCm requirements to the reserved hardware. Private images need your own registry credentials in animagePullSecret in the workload namespace.
In the supplied namespace, Ornn adds the scheduling rules that place pods on the workers from the reservation the cluster launched on. You do not need to add a reservation node selector or toleration. Those defaults apply to that namespace; a namespace you create yourself does not automatically receive them. Avoid changing managed scheduling policies or placing workloads on control-plane nodes.
Request CPU and memory as well as GPUs. A single container’s GPU request must fit on one worker; requesting eight GPUs does not combine four GPUs on each of two workers. Distributed training needs separate worker pods and an application configured for distributed execution.
MPI and distributed training
The cluster includes the MPI Operator. Check that its resource is available:Autoscaling and queueing
A Horizontal Pod Autoscaler can scale a Deployment, ReplicaSet, or StatefulSet using CPU or memory. Set the corresponding containerresources.requests. GPU utilization needs a separately configured metrics adapter.
Autoscaling changes pod replicas, not your purchased node count. Ornn does not add workers when pods are pending; there is no Cluster Autoscaler or Karpenter integration. To change capacity, add or remove workers yourself or from your own automation through the API.
Pending and running pods count toward the namespace GPU request quota, ornn-gpu-quota. A quota rejection prevents pod creation; an admitted pod can remain Pending while all matching GPUs are busy. Inspect workload events and kubectl describe resourcequota ornn-gpu-quota before increasing replicas. Adding workers and changing a namespace quota are separate operations.
Choose storage before running a long job
Local persistent volumes
The defaultlocal-path class supports ReadWriteOnce and binds when the first consumer pod is scheduled. A Pending PVC without a consumer is expected. Mount the PVC in your workload; do not rely on an arbitrary host path.
Local data stays on the selected worker. It does not follow a workload to another worker after disk or node loss. Requested capacity is not an enforced filesystem limit, and resizing is unsupported. The class uses a Delete reclaim policy: deleting the PVC can delete its backing data. Export important data before deleting a claim, removing a worker, or tearing down the cluster.
Shared filesystem at /workspace
A shared filesystem requires a Private cluster. Contact Ornn to confirm capacity, performance, region, cost, and reservation networking. The console’s shared-filesystem view directs you to Ornn for provisioning.
If using the CLI, this command requests both provisioning and attachment for the reservation. It does not require a second console attachment step:
standard, performance, and enterprise are the supported tier keys. Capacity rules and region availability vary; confirm the storage cost with Ornn before provisioning.
Wait for provisioning and attachment to finish. Once active, the supplied namespace injects /workspace into workload pods. Verify both the claim and access from your application:
ornn filesystems delete as a data-preserving detach command. Export data first and confirm deletion and the end of storage charges with Ornn. Keep backups outside the cluster.
Private access with WireGuard
Install WireGuard on your computer. Generate a key pair locally:.conf, replace its private-key placeholder locally with the contents of ornn-wg-private.key, and protect the file. Keep MTU = 1200 and PersistentKeepalive = 25 from the generated config.
The cluster’s Network tab uses the private network selected at launch. You do not need to create another network to add a device. Confirm that the tab shows your cluster’s network before creating a config. Shared (default) means the cluster has no dedicated network selected. A dedicated network that is not active keeps its name and shows its status; Dedicated network (unavailable) means its details could not be loaded. Wait for a pending or provisioning network to become active. Contact support if the network is degraded or unavailable, or if Shared (default) appears when you expected a dedicated network.
On Linux with wg-quick installed:
Add or remove workers
On the cluster manage page, use Add nodes to select eligible nodes owned by your organization or running VMs from the Target nodes dropdown. Ornn prepares each node before it joins, which wipes its tenant home directory and removes any VM on it; a VM joins as it is. Wait for the new workers to become Ready, then check their GPU capacity before increasing your workload. Adding a worker does not raise the supplied namespace’s GPU quota, which Ornn sizes from the cluster’s workers when it first becomes active. Pods in that namespace also stay pinned to the reservation the cluster launched on, so prefer nodes from that reservation. After new workers are Ready, runkubectl describe resourcequota ornn-gpu-quota, and contact support if the quota does not cover the GPUs you plan to request.
To remove workers, select them in Nodes and use Remove. Removal drains those workers and interrupts workloads using them. Export local data and checkpoint first. Review remaining GPU capacity and pending workloads afterward. Removing a worker does not cancel its reservation. A removed VM keeps running and gets its SSH keys back.
To add and remove workers from your own automation, see Scale workers up or down.
Stop, tear down, or retry
In the cluster list, hover over a row or focus it with the keyboard to reveal Delete cluster. On mobile, the delete button is always visible. Select it and confirm to tear down the cluster. Reservation billing continues. Use Stop launch while provisioning, or Tear down cluster for an active cluster, from the manage page’s actions menu. Confirm the affected nodes and wait for cleanup to finish. Teardown removes workloads, revokes cluster access, and releases workers back to their reservations. A failed or torn-down cluster can disappear from Orchestration after cleanup. Start a new launch from your available reserved nodes. Do not rely on the old URL or downloaded credentials.Save checkpoints and export local data before teardown. Deleting a test Job is different from
tearing down its cluster. Teardown does not cancel the reserved term or delete separate storage
resources.
Troubleshooting
No nodes available to select
No nodes available to select
Confirm the correct organization, an active reservation, and available hosts. Offline nodes and nodes held by another cluster cannot be selected. If capacity is missing, contact support with the reservation ID.
A VM did not join
A VM did not join
If the VM left the cluster with a message that another machine already uses its network address, choose a different VM or relaunch with Private networking. If its host needs a management update, contact support with the VM ID.
API connection times out
API connection times out
Confirm
KUBECONFIG points to this cluster’s file. For Private access, activate the matching WireGuard tunnel first. Check your local firewall and VPN routes. A small ping succeeding does not prove the API works; keep the generated MTU of 1200.Pod stays Pending or a Job cannot create pods
Pod stays Pending or a Job cannot create pods
Run
kubectl describe pod <pod-name>, kubectl describe job <job-name>, and kubectl describe resourcequota. Check GPU vendor, per-worker capacity, quota, CPU and memory, and volume placement. Use the supplied namespace so its scheduling defaults apply.ImagePullBackOff or ErrImagePull
ImagePullBackOff or ErrImagePull
Read pod events. Check the image name and tag, registry access, and your
imagePullSecrets. A registry can reject a pull because of authentication, permissions, rate limits, or an unavailable image; the error alone does not establish which cause applies.PVC stays Pending or data is missing
PVC stays Pending or data is missing
For local-path, create the consumer pod and inspect its scheduling events. Local volumes cannot move between workers. For
/workspace, check that the cluster is Private, the filesystem is ready, and the attachment is active before testing from a pod.Launch stalls or fails
Launch stalls or fails
Open the progress details and record the failed stage and customer error. Avoid repeated launches while cleanup is in progress. Contact support with the reservation or cluster ID, approximate failure time, and sanitized error text.
Monitor and get help
Use the cluster’s Observability tab for host metrics and kernel console logs. Usekubectl logs, describe, and events for application failures. Host metrics do not prove a training job completed.
Open Support in the console or email support@ornn.com. Include the cluster and reservation IDs, workload name, failed stage, and time. Never include kubeconfig contents, private keys, registry secrets, or tokens.
What’s next

Kubernetes API automation
Provision, scale, and tear down clusters from your own automation with an API key.

Slurm access
Prefer batch scheduling? Run a managed Slurm cluster on your reserved GPUs instead.

Access overview
Compare the ways to access your reserved Ornn compute.