Introduction
If you created a CMK (Crusoe Managed Kubernetes) cluster without the Cluster Autoscaler add-on and want to enable it afterward, you can do so by applying the autoscaler manifest directly with kubectl. No cluster recreation is required.
The Cluster Autoscaler watches for pending pods that cannot be scheduled due to insufficient resources and automatically scales Crusoe node pools up or down within the configured minimum and maximum range. It runs as a deployment in the crusoe-system namespace and communicates with the Crusoe API to provision and deprovision compute instances on demand.
ℹ️ Note: Installing the autoscaler this way will not reflect in the Crusoe Cloud Portal UI — the add-on toggle will remain off even though the autoscaler is fully functional. This is a known limitation.
Prerequisites
-
kubectlConfigured and Connected to Your Cluster - Your Cluster's Kubernetes Version — Run
kubectl versionto Check - The Node Pool Name(s) You Want to Autoscale
- Your Desired Minimum and Maximum Node Counts per Pool
Instructions
-
Download the manifest
Download the example manifest from the Crusoe autoscaler GitHub repository:
$ curl -o cluster-autoscaler.yaml https://raw.githubusercontent.com/crusoecloud/k8s-autoscaler/crusoe-cluster-autoscaler-release-1.30.3/cluster-autoscaler/cloudprovider/crusoecloud/examples/cluster-autoscaler.yaml
Save it locally as
cluster-autoscaler.yaml. -
Set the image tag
The autoscaler image must match your cluster's Kubernetes minor version. Use the latest patch release for your minor version — for example, K8s 1.33.x maps to a tag like
1.33.2-crusoe.7.Browse all available tags to find the latest for your version: GitHub Container Registry — cluster-autoscaler-crusoecloud.
If you're unsure which tag to use, contact Crusoe Support with your cluster ID and Kubernetes version, and they'll confirm the right one.
In the manifest, replace the image placeholder with your tag:
# Before image: ghcr.io/crusoecloud/cluster-autoscaler-crusoecloud:{{ ca_version e.g. 1.33.2-crusoe.7 }} # After (example for K8s 1.33.x) image: ghcr.io/crusoecloud/cluster-autoscaler-crusoecloud:1.33.2-crusoe.7 -
Configure your node pool(s)
In the manifest, update the
--nodesflag in the containercommandwith your node pool details:- --nodes=<min>:<max>:<nodepool-name>
Replace
<min>,<max>, and<nodepool-name>with your values. For example:- --nodes=1:10:my-cpu-pool
To autoscale multiple node pools, add one
--nodesline per pool:- --nodes=1:10:my-cpu-pool - --nodes=0:5:my-gpu-pool
💡 Tip: Set
<max>to reflect the capacity available in your Crusoe project for that instance type. If you're unsure, Crusoe Support can help you determine a safe upper bound. -
Apply the manifest
$ kubectl apply -f cluster-autoscaler.yaml
-
Verify it's running
Check that the autoscaler pod is up:
$ kubectl get pods -n crusoe-system | grep autoscaler
Confirm the deployment is ready:
$ kubectl get deployment cluster-autoscaler -n crusoe-system
You should see
1/1underREADY. The pod may spend a minute or two inContainerCreatingon first deploy while the image pulls — this is normal.
Known Limitations
Excluding a node pool from autoscaling
Currently, if you have a node pool you do not want the Cluster Autoscaler to manage, you must still include it in the manifest with --nodes set to equal min and max values:
- --nodes=3:3:my-unmanaged-pool
Set min=max equal to the node pool's desired size — this prevents the autoscaler from scaling the pool up or down. Support for fully excluding node pools from autoscaler management is on the roadmap.
Troubleshooting
Contact Crusoe Support and include your cluster ID and Kubernetes version. We can confirm the correct image tag and help troubleshoot any issues.