Provider example
OVH — NodePool, NodeClass & Workload
Full manifests and kubectl commands for OVH Cloud.
Replace placeholders
<HOST_TAILSCALE_IP>→ Kind control-plane Tailscale IPyour-ovh-project-id→ OVH Cloud project ID
Ensure secrets exist: tailscale-auth, ovh-api-credentials.
1. Create secrets
# Tailscale auth key (required by NodeClass)
kubectl create secret generic tailscale-auth --from-literal=authkey="<YOUR_TAILSCALE_AUTHKEY>" -n default
# OVH API credentials (application key, application secret, consumer key)
kubectl create secret generic ovh-api-credentials \
--from-literal=OVH_APPLICATION_KEY="<YOUR_APPLICATION_KEY>" \
--from-literal=OVH_APPLICATION_SECRET="<YOUR_APPLICATION_SECRET>" \
--from-literal=OVH_CONSUMER_KEY="<YOUR_CONSUMER_KEY>" \
-n default
2. NodePool
apiVersion: cloudburst.io/v1alpha1
kind: NodePool
metadata:
name: ovh-nodepool
namespace: default
spec:
requirements:
regionConstraint: "EU"
arch: ["x86_64"]
maxPriceEurPerHour: 0.15
allowedProviders: ["ovh"]
limits:
maxNodes: 3
minNodes: 0
template:
labels:
cloudburst.io/nodepool: "ovh-nodepool"
cloudburst.io/provider: "ovh"
disruption:
ttlSecondsAfterEmpty: 60
ttlSecondsUntilExpired: 3600
weight: 1
3. NodeClass
apiVersion: cloudburst.io/v1alpha1
kind: NodeClass
metadata:
name: ovh-nodeclass
namespace: default
spec:
ovh:
projectID: "your-ovh-project-id"
region: "GRA9"
applicationKeySecretRef:
name: ovh-api-credentials
key: OVH_APPLICATION_KEY
applicationSecretSecretRef:
name: ovh-api-credentials
key: OVH_APPLICATION_SECRET
consumerKeySecretRef:
name: ovh-api-credentials
key: OVH_CONSUMER_KEY
join:
hostApiServer: "https://<HOST_TAILSCALE_IP>:6443"
kindClusterName: "cloudburst"
tokenTtlMinutes: 60
tailscale:
authKeySecretRef:
name: tailscale-auth
key: authkey
bootstrap:
kubernetesVersion: "1.34.3"
4. Workload (triggers burst; targets OVH nodes)
apiVersion: v1
kind: Pod
metadata:
name: ovh-workload
namespace: default
spec:
containers:
- name: workload
image: busybox:1.36
command: ["sleep", "infinity"]
resources:
requests:
cpu: "1500m"
memory: "2Gi"
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: cloudburst.io/provider
operator: In
values: ["ovh"]
5. Apply and verify
# Save the manifests above to ovh-example.yaml, then:
kubectl apply -f ovh-example.yaml
# Watch NodeClaim creation
kubectl get nodeclaims -w
# Once node is Ready, verify pod
kubectl get pods -o wide
kubectl get nodes -l cloudburst.io/provider=ovh