CloudRift¶
CloudRift cloud provider requires a personal API key - token in the Kubernetes Secret. Optionally, a teamid can be provided to provision VMs under a team account.
Compute example¶
apiVersion: v1
kind: Secret
metadata:
name: cloudrift-secret
data:
token: <base64-encoded-api-token>
teamid: <base64-encoded-team-id> # optional
type: Opaque
Personal API token required
CloudRift SSH key operations require a personal API key. Team API keys will return 401 for SSH key creation. The token field in the Secret must be a personal API key, even if teamid is provided.
No DNS support
CloudRift does not provide DNS resources. If you need load balancer DNS records for CloudRift clusters, use a separate DNS provider (e.g., Cloudflare, AWS Route53, GCP Cloud DNS).
Create CloudRift API credentials¶
You can create a CloudRift API key from the CloudRift console. Navigate to Settings > API Keys and generate a new personal API key.
If you want to provision VMs under a team account, retrieve the Team ID via the API:
curl -s -X POST \
-H "X-API-KEY: <your-api-key>" \
https://api.cloudrift.ai/api/v1/teams/list \
| jq '.data.teams[] | {id, name}'
Available datacenters and instance types¶
Datacenters and instance types change frequently. You can check current availability in the CloudRift console or via the API:
# List instance types with dedicated public IP, their datacenters, and pricing
curl -s -X POST \
-H "X-API-KEY: <your-api-key>" \
-H "Content-Type: application/json" \
-d '{"version":"2025-06-10","data":{}}' \
https://api.cloudrift.ai/api/v1/instance-types/list \
| jq '.data.instance_types[] | .brand_short as $gpu | .variants[] |
(.ip_availability_per_dc // {} | to_entries | map(select(.value.public_ips == true)) | map(.key)) as $dcs |
select($dcs | length > 0) |
{name: .name, gpu: $gpu, cost_per_hour: .cost_per_hour, datacenters: $dcs}'
# List available OS recipes (images)
curl -s -X POST \
-H "X-API-KEY: <your-api-key>" \
-H "Content-Type: application/json" \
-d '{"version":"2025-06-10"}' \
https://api.cloudrift.ai/api/v1/recipes/list \
| jq '.data.groups[].recipes[] | select(.details.VirtualMachine != null) | {name}'
Shared public IP instances not supported
CloudRift offers both dedicated and shared public IP instances. Claudie requires dedicated public IP instances. Shared-IP instances use non-standard port mappings and are not supported. Make sure to choose an instance type that provides a dedicated public IP.
GPU instances¶
CloudRift specializes in GPU compute, offering NVIDIA GPU instances (e.g., RTX 4090, RTX 5090). GPU instances are selected by setting the serverType to a GPU instance type (e.g., rtx49-7-50-500-nr.1). No additional machineSpec configuration is needed — the GPU is included in the instance type.
Input manifest examples¶
Create a secret for CloudRift provider¶
The secret for a CloudRift provider must include the following mandatory field: token. The teamid field is optional.
kubectl create secret generic cloudrift-secret-1 --namespace=<your-namespace> --from-literal=token='<your-api-token>'
To provision under a team account:
kubectl create secret generic cloudrift-secret-1 --namespace=<your-namespace> --from-literal=token='<your-personal-api-token>' --from-literal=teamid='<your-team-id>'
Single-provider, multi-datacenter cluster example¶
apiVersion: claudie.io/v1beta1
kind: InputManifest
metadata:
name: cloudrift-example-manifest
labels:
app.kubernetes.io/part-of: claudie
spec:
providers:
- name: cloudrift-1
providerType: cloudrift
templates:
repository: "https://github.com/berops/claudie-config"
tag: v0.10.0
path: "templates/terraformer/cloudrift"
secretRef:
name: cloudrift-secret-1
namespace: <your-namespace>
nodePools:
dynamic:
- name: control-cr
providerSpec:
# Name of the provider instance.
name: cloudrift-1
# Datacenter of the nodepool.
region: us-east-nc-nr-1
count: 1
# Instance type name.
serverType: rtx49-7-50-500-nr.1
# OS recipe name.
image: "Ubuntu 22.04 Server (NVidia)"
- name: compute-1-cr
providerSpec:
# Name of the provider instance.
name: cloudrift-1
# Datacenter of the nodepool.
region: eu-west-uk-lo-2
count: 2
# Instance type name.
serverType: rtx59-7-50-400-ec.1
# OS recipe name.
image: "Ubuntu 22.04 Server (NVidia)"
kubernetes:
clusters:
- name: cloudrift-cluster
version: "1.34.0"
network: 192.168.2.0/24
pools:
control:
- control-cr
compute:
- compute-1-cr
Autoscaling cluster example¶
apiVersion: claudie.io/v1beta1
kind: InputManifest
metadata:
name: cloudrift-autoscale-manifest
labels:
app.kubernetes.io/part-of: claudie
spec:
providers:
- name: cloudrift-1
providerType: cloudrift
templates:
repository: "https://github.com/berops/claudie-config"
tag: v0.10.0
path: "templates/terraformer/cloudrift"
secretRef:
name: cloudrift-secret-1
namespace: <your-namespace>
nodePools:
dynamic:
- name: control-cr
providerSpec:
name: cloudrift-1
region: us-east-nc-nr-1
count: 1
serverType: rtx49-7-50-500-nr.1
image: "Ubuntu 22.04 Server (NVidia)"
- name: compute-cr
providerSpec:
name: cloudrift-1
region: eu-west-uk-lo-2
# Autoscaler configuration (mutually exclusive with count).
autoscaler:
min: 0
max: 3
serverType: rtx59-7-50-400-ec.1
image: "Ubuntu 22.04 Server (NVidia)"
kubernetes:
clusters:
- name: cloudrift-cluster
version: "1.34.0"
network: 192.168.2.0/24
pools:
control:
- control-cr
compute:
- compute-cr