Cloud GPUs for your cluster, capped at your price. Still just kubectl.

Conduit adds a virtual node to your Kubernetes cluster. Schedule a pod to it and it runs on RunPod (Vast.ai next) on a GPU that matches your spec, never above the max price you set. No new API, no new YAML dialect.

Source-available kubelet · No inbound ports · 10 free GPU-hours a month

A GPU pod as you would write it anyway. Highlighted: the two lines Conduit reads.
$ kubectl apply -f - <<EOF
apiVersion: v1
kind: Pod
metadata:
  name: hello-gpu
  annotations:
    runpod.io/required-gpu-memory: "24"  # ← new    runpod.io/max-price: "0.60"             # ← newspec:
  nodeSelector: {conduit.io/provider: "true"}
  tolerations:
  - key: virtual-kubelet.io/provider
    operator: Exists
  containers:
  - name: main
    image: nvidia/cuda:12.4.0-base-ubuntu22.04
    command: ["nvidia-smi"]
    resources: {limits: {nvidia.com/gpu: 1}}
EOF
pod/hello-gpu created

Price control

Set a ceiling per pod with one annotation. Conduit places the pod on a matching GPU within it.

No lock-in

It is standard Pod YAML plus two annotations. Remove them and the pod is still a valid pod.

Safe by design

Outbound-only connection, and your provider key can stay in your cluster.

How it works

Three steps from an empty cluster to a running GPU pod.

YOUR CLUSTER conduit-node virtual kubelet · auditable hello-gpu 1 GPU · max $0.60/h CONDUIT PLATFORM placement & price routing quotas & plan limits billing RunPod A100 · H100 · 4090 Vast.ai next up events ↔ commands one outbound WSS start pod with your key
Your pod spec goes to Conduit; the decision comes back; the kubelet starts the pod at the provider with a key that never leaves your cluster.
1

Install the kubelet

One Helm install adds a virtual node called conduit-node to your cluster. It dials out to Conduit over WebSocket; nothing listens inbound.

helm install conduit-kubelet \
  oci://ghcr.io/gpuconduit/helm/conduit-kubelet \
  -n conduit-system --create-namespace \
  --set conduit.apiToken=<TOKEN>
2

Apply a pod

Target the virtual node with a nodeSelector and toleration. Ask for GPU memory and a max price with annotations. Everything else is normal Kubernetes.

kubectl apply -f hello-gpu.yaml
kubectl get pod hello-gpu -w
3

It runs on a cloud GPU

Conduit picks a matching instance at the provider, starts your container, and streams status and logs back through the kubelet. Delete the pod and the instance is gone.

kubectl logs hello-gpu
kubectl delete pod hello-gpu

Why it's safe to run in your cluster

The kubelet is a thin client. Provider selection, quotas and billing live on the Conduit platform, where they cannot touch your cluster.

Source-available thin client

The kubelet is a small Go program you can read end to end. It translates pod specs into requests to Conduit and reports status back. No hidden agent, no cluster-wide privileges beyond what a virtual kubelet needs.

Your provider key can stay in your cluster

Pass runpod.apiKey at install time and the kubelet talks to RunPod directly. Conduit only sees the pod spec and the placement decision, never your key.

No inbound ports

The kubelet opens one outbound WebSocket to wss://gpuconduit.io. There is nothing to expose, no ingress to configure, and it works behind NAT and strict egress rules.

Audit the code

Read the source, pin the image digest, build it yourself. The image is ghcr.io/gpuconduit/conduit-kubelet, the chart is published as an OCI artifact alongside it.

Open source client, managed platform

Run the part that touches your cluster yourself. Let us run the part that needs to stay current.

Free and source-available

The kubelet, the Helm chart and the container image. Read it, pin it, build it.

Managed by Conduit

Placement and price routing, quotas and plan limits, billing, and the provider list, which grows without a kubelet upgrade in your cluster.

Read the source on GitHub

Pricing

Start free. Upgrade when you need more kubelets, more GPU-hours or more concurrency.

Free

Try it on a real cluster. No card required.

$0
forever
  • 1 kubelet
  • 10 GPU-hours / month included
  • 2 concurrent pods
  • Community support
Start free

Scale

Many clusters, many jobs, one bill.

$499/mo
billed monthly
  • Unlimited kubelets
  • 5,000 GPU-hours / month included
  • 100 concurrent pods
  • $0.08 / GPU-hour overage
  • Priority support
Start free

Enterprise

Custom limits and deployment options.

Custom
annual invoicing
  • SSO
  • Self-hosted option
  • Annual invoicing
  • SLA
Contact us

GPU-hours are metered on the pods Conduit schedules. Cloud GPU costs are billed by your provider on your own key, or through Conduit if you let us manage provider keys.

Questions

What happens when I exceed my quota?

New pods are rejected at scheduling time, not mid-run. The pod shows Failed and kubectl describe pod tells you which limit you hit (GPU-hours, concurrent pods or kubelets). Running pods keep running. On Pro and Scale, GPU-hours beyond the included amount are billed at the overage rate instead of being rejected.

Can I keep my RunPod key private?

Yes. Set runpod.apiKey in the Helm install and the key stays in a Secret in your cluster; the kubelet uses it to talk to RunPod directly. If you would rather not manage keys per cluster, add them once on the Providers page of the dashboard and omit the value.

Which providers are supported?

RunPod today. Vast.ai is next. The kubelet is provider-agnostic; provider selection happens on the platform, so adding a provider does not require a new kubelet release in your cluster.

Can I cancel?

Any time, from the Billing page. Your plan drops to Free at the end of the billing period and the kubelet keeps working within the Free limits. Uninstalling is helm uninstall conduit-kubelet -n conduit-system.

Do I need an existing Kubernetes cluster?

Yes, any Kubernetes 1.20+ cluster with outbound HTTPS works, including kind or k3s on a laptop. The GPUs come from the provider, so the cluster itself does not need any.

Your first GPU pod in ten minutes

Create an account, install the kubelet, apply a pod. 10 GPU-hours a month are on us.

helm install conduit-kubelet \
  oci://ghcr.io/gpuconduit/helm/conduit-kubelet \
  -n conduit-system --create-namespace \
  --set conduit.apiToken=<TOKEN>