exalsius-operator

module
v0.12.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 21, 2026 License: Apache-2.0

README

exalsius banner

exalsius-operator

License CI Docker Image Artifact Hub

The exalsius-operator is a Kubernetes operator that lets infrastructure teams describe managed Kubernetes clusters and the application workspaces running on them as Kubernetes resources. A Colony groups the clusters you want provisioned; a single cluster can span nodes in several datacenters or providers, with pod traffic between them encrypted by Cilium's WireGuard integration. A WorkspaceClass is a catalog entry for a workspace type such as a Jupyter notebook or an inference server, and a WorkspaceDeployment asks for one instance of a class on one of those clusters. The operator provisions the clusters through k0rdent and installs the workspaces through k0rdent's Sveltos integration. Everything works with plain kubectl; the exalsius CLI and API build on the same resources but are not required.

New to exalsius? Follow the quick start: two SSH-reachable Linux nodes become a management cluster, a Colony-provisioned child cluster, and a running Jupyter workspace in about 20 minutes.

Already running k0rdent? Install the operator with the Helm chart and follow its "After installing" section.

Resource model

Three custom resources map onto k0rdent objects, which in turn drive the provisioning and deployment machinery:

 Colony ──────────────► ClusterDeployment (k0rdent) ──► Cluster API + k0smotron ──► child cluster
   one entry per cluster                                                            (Cilium CNI)

 WorkspaceClass ──────► ServiceTemplate (k0rdent) = the workspace's Helm chart

 WorkspaceDeployment ─► ServiceSet (k0rdent) ──► Sveltos Profile ──► Helm release on the child,
   pins one class,                                                    in namespace ws-<name>
   targets one ClusterDeployment

All three resources, and everything the operator creates from them, live on the management cluster: the cluster where k0rdent and the operator are installed. Colonies and WorkspaceDeployments are namespaced; WorkspaceClasses are cluster-scoped, like a StorageClass. The workspace itself, a Helm release in its own ws-<name> namespace, is the only thing that lands on the child cluster. The operator reaches the child through the kubeconfig Secret k0rdent stores next to each ClusterDeployment.

Concepts walks through the full model with diagrams: how a Colony becomes clusters, how a deployment becomes a running workspace, the phases and the GPU gate, and how workspace URLs are published through a per-tenant regional cluster.

What the operator does

  • Provisions and groups clusters. Each Colony entry becomes a k0rdent ClusterDeployment built from an exalsius cluster template: a hosted control plane with Cilium as the pod network and WireGuard encryption between all nodes, so one cluster can spread across datacenters and cloud providers. The operator aggregates the child kubeconfigs into one Secret per Colony and publishes each child's GPU inventory on the Colony status.
  • Publishes a workspace catalog. WorkspaceClass pins a k0rdent ServiceTemplate, declares default resources, prerequisites the target cluster needs first, access endpoints, and the configuration prompts users see.
  • Deploys workspaces. For each WorkspaceDeployment the operator resolves the class, installs the prerequisites the class declares if the target cluster lacks them, gates on GPU capacity, creates one k0rdent ServiceSet per workspace, and reports phase, conditions and access URLs on the resource's status.
  • Tears down. Deleting a WorkspaceDeployment uninstalls the release; deleting a Colony removes its clusters.

What the wider exalsius stack adds

The operator is one component of the exalsius stack. On top of it, the exalsius-api turns requests from the exalsius CLI and the hosted platform into these resources and adds multi-cloud node acquisition, cost-aware placement and tenant management. The CLI and platform journey is documented at https://docs.exalsius.ai; this repository documents the operator and its resources.

Workspaces

A workspace is a ready-to-use application environment, such as a Jupyter notebook server, a training stack or an inference server, installed as a Helm release onto one of the clusters the operator manages. Two CRDs in the workspaces.exalsius.ai/v1 API group split the responsibility between platform admins and end users:

  • WorkspaceClass (cluster-scoped, wsc) is an admin-authored catalog entry describing a workspace type. It pins the k0rdent ServiceTemplate to deploy, declares the default resource shape (replicas × CPU/memory/GPU per replica), lists prerequisites that must be healthy on the target cluster first, and defines the access endpoints the workspace exposes and the config options users may set. Classes are versioned and immutable: the name carries the version, so a running workspace's definition never changes underneath it. Ready-made classes and their charts live in the exalsius-workspace-hub.

  • WorkspaceDeployment (namespaced, wsd) captures a user's intent to run one instance of a class on a specific target cluster. It references a WorkspaceClass and a k0rdent ClusterDeployment, optionally overriding resources and Helm values.

A deployment moves through Pending → InstallingPrerequisites → Deploying → Running, with Waiting when the requested GPU capacity is temporarily exhausted, Failed on errors, and Deleting on teardown. Each workspace is deployed and tracked through its own k0rdent ServiceSet, so independent workspaces never write to shared fields of the ClusterDeployment.

The WorkspaceDeployment from the quick start, which targets the child cluster quickstart-child-1 provisioned there:

apiVersion: workspaces.exalsius.ai/v1
kind: WorkspaceDeployment
metadata:
  name: my-notebook
  namespace: kcm-system
spec:
  workspaceClassRef: jupyter-notebook-0-3-0
  clusterDeploymentRef:
    name: quickstart-child-1
    namespace: kcm-system
  resources:
    perReplica:
      cpu: "2"
      memory: "4Gi"
      storage: "10Gi"
  values:
    notebookPassword: "change-me-please"

The runnable copy lives in examples/quickstart/workspacedeployment.yaml.

Documentation

  • Quick start: two SSH nodes to a running workspace.
  • Concepts: the resource model, the reconcilers and the cluster topology, with diagrams.
  • Helm chart: install, upgrade, values and RBAC for an existing k0rdent cluster.
  • Provisioning benchmark: scripted, reproducible GPU inference scenarios on your own nodes, with committed evidence.
  • docs.exalsius.ai: the CLI and hosted platform.

Community

License

Copyright 2026.

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

Directories

Path Synopsis
api
infra/v1
Package v1 contains API Schema definitions for the infra v1 API group.
Package v1 contains API Schema definitions for the infra v1 API group.
workspaces/v1
Package v1 contains API types for the workspaces.exalsius.ai API group.
Package v1 contains API types for the workspaces.exalsius.ai API group.
internal
controller/infra/common
Package common provides shared utilities for infrastructure controllers.
Package common provides shared utilities for infrastructure controllers.
controller/workspaces/routing
Package routing defines the seam between the workspace lifecycle and how workspace access routes are materialized (ADR-0001).
Package routing defines the seam between the workspace lifecycle and how workspace access routes are materialized (ADR-0001).
controller/workspaces/routing/gatewayapi
Package gatewayapi implements routing.RouteProvider on top of Gateway API resources on the tenant's regional cluster (ADR-0001).
Package gatewayapi implements routing.RouteProvider on top of Gateway API resources on the tenant's regional cluster (ADR-0001).
gpu
Package gpu derives the GPU Offerings present on a cluster from its node labels and advertised extended resources (ADR-0002).
Package gpu derives the GPU Offerings present on a cluster from its node labels and advertised extended resources (ADR-0002).
test

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL