
Crusoe x SkyPilot
By Patrick Phelan, Software Engineer at Crusoe
We’re excited to announce Phase 1 of our SkyPilot integration on Crusoe Managed Kubernetes (CMK). If you’re already running a CMK cluster, you can now bring it under the SkyPilot platform — just point SkyPilot at your existing kubeconfig and ready to takeoff. In this short tutorial we’ll walk you through how to:
Install the Crusoe CLI and provision a CMK cluster
Install SkyPilot with Kubernetes support
Onboard your CMK cluster into SkyPilot
Launch your first job on CMK via SkyPilot
This initial phase is all about seamless compatibility and kubeconfig support. Get ready for even tighter integration with ‘Phase 2,’ which will bring native API-driven capabilities.
For now, enjoy the simplicity of bringing your own cluster. Let’s begin.
What is SkyPilot?
SkyPilot is an open-source framework built on Ray that lets you run machine learning and batch jobs across clouds (or on any Kubernetes cluster) without changing your code.
Here are a few highlights::
Automatic cluster detection: SkyPilot will read your local kubeconfig and identifies all compatible contexts.
Unified CLI: A single, powerful tool to launch jobs on AWS, GCP, Azure, or your own Kubernetes environment.
Distributed training made easy: With Ray under the hood, SkyPilot effortlessly handles RPC and task scheduling across all your nodes.
By integrating SkyPilot with CMK, you can now treat your Crusoe cluster as another powerful cloud target in your arsenal.
Prerequisites
Before we jump in, let's make sure you have the following ready to go:
A Crusoe account with a provisioned CMK cluster and Nvidia GPU Operator installed
Crusoe CLI installed (see below)
Python 3.8+ and pip
Access to your cluster’s kubeconfig (typically found in ~/.kube/config)
SkyPilot CLI with Kubernetes support
Step 1: Install the Crusoe CLI & Provision a CMK Cluster
If you don't have a CMK cluster yet, let's get one set up. First, install the Crusoe CLI, and then run the following command to create your cluster:
crusoe kubernetes clusters create --name <cluster-name> --cluster-version <version> --location <location> --project-id <project-id> --add-ons nvidia_gpu_operator
Once your cluster is provisioned and ready, fetch your credentials with this command:
crusoe clusters get-credentials my-cluster --project-id <project-id>
Step 2: Install SkyPilot with Kubernetes Support
Next, install or upgrade SkyPilot’s CLI to include Kubernetes:
pip install --upgrade "skypilot[kubernetes]"
Verify that SkyPilot can see your CMK GPUs:
sky check kubernetes
You should see output listing your k8s cluster.
Step 3: Launch Your First Job
With SkyPilot now configured to communicate with your Crusoe cluster, you're all set to submit any Ray or batch job. Let's start with a simple "hello world" example.
First, create a hello.py script:
# hello.py
print("Hello from SkyPilot on Crusoe Kubernetes!")
Create a hello_k8s.yaml script:
# hello_k8s.yaml # should be located in same directory as hello.py
name: hello-k8s
workdir: . # sync current dir into the pod
resources:
cloud: kubernetes
cpus: 1+ # any free CPU slot is fine
run: |
python hello.py
Submit via SkyPilot:
sky launch -c hello-demo hello_k8s.yaml
This command instructs SkyPilot to:
Use your CMK context (kubernetes auto-detects the current kubeconfig)
Run python hello.py on that pod
Once the job starts, you’ll see logs streamed to your terminal:
Launching a new cluster 'hello-demo'. Proceed? [Y/n]: Y
⚙︎ Launching on Kubernetes.
└── Pod is up.
✓ Cluster launched: hello-demo. View logs: sky api logs -l sky-2025-06-13-11-12-38-962199/provision.log
⚙︎ Syncing files.
Syncing workdir (to 1 node): /Users/pphelan/Desktop/crusoe/hello-k8s -> ~/sky_workdir
✓ Synced workdir. View logs: sky api logs -l sky-2025-06-13-11-12-38-962199/workdir_sync.log
⚙︎ Job submitted, ID: 1
├── Waiting for task resources on 1 node.
└── Job started. Streaming logs... (Ctrl-C to exit log streaming; job will not be killed)
(hello-k8s, pid=1435) Hello from SkyPilot on Kubernetes!
✓ Job finished (status: SUCCEEDED).
And that's it. You've successfully run your first SkyPilot job on Crusoe. Congratulations!
What’s Next?
Phase 2: Native API Integration
We're just getting started. ‘Phase 2’ is already in the works and will feature a deeper, native API integration. This will allow you to manage your CMK clusters directly through the SkyPilot API and SDK — no manual kubeconfig required.
Stay tuned for:
Interact with Crusoe directly through SkyPilot CLI
Spot Instance support for SkyPilot
We're always eager to hear your feedback. Don’t hesitate to reach out to Crusoe Support to get in touch. You can also explore the SkyPilot GitHub repository for more details and examples, and visit our CMK product page to get started with your own cluster. Happy flying!