SkyPilot Support for AI workloads on Crusoe Managed Kubernetes

June 13, 2025

Crusoe x SkyPilot

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!


Liked what you just read? Share it

Ready To Build Something Amazing?