Skip to content

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

CloudRift offers both dedicated and shared public IP instances. Shared-IP instances place each node behind a shared/NAT public IP and expose SSH and WireGuard on CloudRift-assigned mapped ports instead of the standard 22 / 51820. These are supported since Claudie v0.14.0 together with claudie-config v0.11.3 (Claudie reads each node's mapped ports back from the provider). On earlier versions only dedicated public IP instances work, so there you must 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.11.3
        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.11.3
        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