Team Deployment#

SkyPilot implements a client-server architecture. When a user runs a command or invokes a SDK, a SkyPilot client submits asynchronous requests to a SkyPilot API server, which handles all requests.

Local API server (individual users)#

For an individual user, SkyPilot can be used as a normal command line tool. Whenever a SkyPilot command is run and an API server is not detected, SkyPilot will automatically start a SkyPilot API server running locally in the background. No user action is needed.

SkyPilot API server local mode

Remote API server (multi-user teams)#

For multi-user teams, SkyPilot can be deployed as a remote service. Multiple users in an organization can share the same SkyPilot API server. The benefits include:

  • Deploy once and use anywhere: Deploy a SkyPilot API server in Kubernetes or on a cloud VM and access it anywhere.

  • Resource sharing in a team: Team members can share resources with each other.

  • Easy onboarding for new members: Users can run SkyPilot commands without setting up local cloud credentials.

  • Global view and control: Admins obtain a single pane of glass for the entire team’s compute resources—across clusters and regions.

SkyPilot API server remote mode

Getting started with a remote API server#

👋 Connect to API Server

Already deployed the API server? Connect to it with sky api login.

⚙️ Deploy SkyPilot API Server

Follow these instructions to deploy the API server on your infrastructure.

Connecting to an API server#

Once you have deployed the API server, you can configure your local SkyPilot to connect to it. We recommend using a Python 3.9 or 3.10 environment for the SkyPilot client. See uv or conda for creating an environment with different python versions.

Install the SkyPilot client on your local machine:

$ pip install -U skypilot-nightly

Run sky api login to connect to the API server.

$ sky api login
Enter your SkyPilot API server endpoint: http://skypilot:[email protected]:30050

This will save the API server endpoint to your ~/.sky/config.yaml file.

To verify that the API server is working, run sky api info:

$ sky api info
Using SkyPilot API server: http://127.0.0.1:46580
├── Status: healthy, commit: xxxxx, version: 1.0.0-dev0
└── User: skypilot-user (xxxxxx)

Tip

You can also set the API server endpoint using the SKYPILOT_API_SERVER_ENDPOINT environment variable. It will override the value set in ~/.sky/config.yaml:

$ export SKYPILOT_API_SERVER_ENDPOINT=http://skypilot:[email protected]:30050
$ sky api info
Using SkyPilot API server: http://myendpoint.com:30050
├── Status: healthy, commit: xxxxx, version: 1.0.0-dev0
└── User: skypilot-user (xxxxxx)