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.
$ 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.
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>
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
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.
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.
- 1 kubelet
- 10 GPU-hours / month included
- 2 concurrent pods
- Community support
Pro
For teams running GPU jobs every day.
- 5 kubelets
- 500 GPU-hours / month included
- 20 concurrent pods
- $0.10 / GPU-hour overage
- Email support
Scale
Many clusters, many jobs, one bill.
- Unlimited kubelets
- 5,000 GPU-hours / month included
- 100 concurrent pods
- $0.08 / GPU-hour overage
- Priority support
Enterprise
Custom limits and deployment options.
- SSO
- Self-hosted option
- Annual invoicing
- SLA
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>