Back to Vcluster

README

README.md

0.35.0-next.117.3 KB
Original Source
<div align="center"> <a href="https://www.vcluster.com"> <picture> <source media="(prefers-color-scheme: dark)" srcset="docs/static/media/vcluster_horizontal_orange_white.svg"> <source media="(prefers-color-scheme: light)" srcset="docs/static/media/vcluster_horizontal_orange_black.svg">
</picture>
</a> <p><strong>Flexible Tenancy For Kubernetes and AI Infra</strong></p>

Website โ€ข Quickstart โ€ข Documentation โ€ข Blog โ€ข Slack

</div>

What is vCluster?

vCluster creates fully functional virtual Kubernetes clusters that run inside namespaces of a host cluster. Each virtual cluster has its own API server, runs on shared or dedicated infrastructure, and gives you flexible tenancy optionsโ€”from simple namespaces to fully dedicated clusters.

40M+ virtual clusters deployed by companies like Adobe, CoreWeave, Atlan, and NVIDIA.

<div align="center">

</div>

๐Ÿš€ Quick Start

bash
# Install vCluster CLI
brew install loft-sh/tap/vcluster

# Create a virtual cluster
vcluster create my-vcluster --namespace team-x

# Use kubectl as usual - you're now in your virtual cluster!
kubectl get namespaces

Prerequisites: A running Kubernetes cluster and kubectl configured.

๐Ÿ‘‰ Full Quickstart Guide

๐ŸŽฎ Try Without Installing

No Kubernetes cluster? Try vCluster instantly in your browser:


๐Ÿ†• What's New

VersionFeatureDescription
v0.30vCluster VPN & Netris IntegrationTailscale-powered overlay network and automated network isolation for hybrid infrastructures
v0.29Standalone ModeRun vCluster without a host clusterโ€”directly on bare metal or VMs
v0.28Auto NodesKarpenter-powered dynamic autoscaling for private nodes
v0.27Private NodesExternal nodes with full CNI/CSI isolation
v0.26Hybrid Scheduling & Namespace SyncingMultiple scheduler support for AI/ML workloads and fine-grained namespace synchronization

๐Ÿ‘‰ Full Changelog


๐ŸŽฏ Use Cases

Use CaseDescriptionLearn More
GPU Cloud ProvidersLaunch managed K8s for GPUs. Give customers isolated, production-grade Kubernetes fast.View โ†’
Internal GPU PlatformMaximize GPU utilization without sacrificing isolation. Self-service access for AI/ML teams.View โ†’
AI FactoryRun AI on-prem where your data lives. Multi-tenant K8s for training, fine-tuning, inference.View โ†’
Bare Metal K8sRun Kubernetes on bare metal with zero VMs. Isolation without expensive overhead.View โ†’
Software VendorsShip Kubernetes-native software. Each customer gets their own isolated virtual cluster.View โ†’
Cost SavingsCut Kubernetes costs by consolidating clusters. Sleep mode pauses inactive clusters.View โ†’

๐Ÿ—๏ธ Architectures

vCluster offers multiple deployment architectures. Each builds on the previous, offering progressively more isolation.

Architecture Comparison

Shared NodesDedicated NodesPrivate NodesStandalone
Host ClusterRequiredRequiredRequiredNot Required
Node IsolationโŒโœ…โœ…โœ…
CNI/CSI IsolationโŒโŒโœ…โœ…
Best ForDev/test, costProductionCompliance, GPUBare metal, edge

๐Ÿ‘‰ Full Architecture Guide

Minimal Configuration

<details> <summary>๐Ÿ”น Shared Nodes โ€” Maximum density, minimum cost</summary> Virtual clusters share the host cluster's nodes. Workloads run as regular pods in a namespace. <div align="center"> </div>
yaml
sync:
  fromHost:
    nodes:
      enabled: false  # Uses pseudo nodes
</details> <details> <summary>๐Ÿ”น Dedicated Nodes โ€” Isolated compute on labeled node pools</summary> Virtual clusters get their own set of labeled host nodes. Workloads are isolated but still managed by the host. <div align="center"> </div>
yaml
sync:
  fromHost:
    nodes:
      enabled: true
      selector:
        labels:
          tenant: my-tenant
</details> <details> <summary>๐Ÿ”น Private Nodes <sup>v0.27+</sup> โ€” Full CNI/CSI isolation</summary> External nodes join the virtual cluster directly with their own CNI, CSI, and networking stack. Complete workload isolation from the host cluster. <div align="center"> </div>
yaml
privateNodes:
  enabled: true
controlPlane:
  service:
    spec:
      type: NodePort
</details> <details> <summary>๐Ÿ”น vCluster Standalone <sup>v0.29+</sup> โ€” No host cluster required</summary> Run vCluster without any host cluster. Deploy the control plane directly on bare metal or VMs. The highest level of isolationโ€”vCluster becomes the cluster. <div align="center"> </div>
yaml
controlPlane:
  standalone:
    enabled: true
    joinNode:
      enabled: true
privateNodes:
  enabled: true
</details> <details> <summary>โšก Auto Nodes <sup>v0.28+</sup> โ€” Karpenter-powered dynamic autoscaling</summary> Automatically provision and deprovision private nodes based on workload demand. Works across public cloud, private cloud, hybrid, and bare metal environments. <div align="center"> </div>
yaml
autoNodes:
  enabled: true
  nodeProvider: <provider>
privateNodes:
  enabled: true
</details>

โœจ Key Features

FeatureDescription
๐ŸŽ›๏ธ Isolated Control PlaneEach vCluster gets its own API server, controller manager, and data storeโ€”complete Kubernetes API isolation
๐Ÿ”— Shared Platform StackLeverage the host cluster's CNI, CSI, ingress, and other infrastructureโ€”no duplicate platform components
๐Ÿ”’ Security & Multi-TenancyTenants get admin access inside their vCluster while having minimal permissions on the host cluster
๐Ÿ”„ Resource SyncingBidirectional sync of any Kubernetes resource. Pods, services, secrets, configmaps, CRDs, and more
๐Ÿ’ค Sleep ModePause inactive virtual clusters to save resources. Instant wake when needed
๐Ÿ”Œ IntegrationsNative support for cert-manager, external-secrets, KubeVirt, Istio, and metrics-server
๐Ÿ“Š High AvailabilityMultiple replicas with leader election. Embedded etcd or external databases (PostgreSQL, MySQL, RDS)

๐Ÿข Trusted By

<table> <tr> <td align="center"><a href="https://www.vcluster.com/case-studies/atlan"><strong>Atlan</strong></a> 100 โ†’ 1 clusters</td> <td align="center"><a href="https://www.vcluster.com/case-studies/aussie-broadband"><strong>Aussie Broadband</strong></a> 99% faster provisioning</td> <td align="center"><a href="https://www.vcluster.com/case-studies/coreweave"><strong>CoreWeave</strong></a> GPU cloud at scale</td> </tr> <tr> <td align="center"><a href="https://www.vcluster.com/case-studies/lintasarta"><strong>Lintasarta</strong></a> 170+ virtual clusters in prod</td> <td align="center"><a href="https://www.vcluster.com/case-studies/fortune-500-insurance-company"><strong>Fortune 500 Insurance Company</strong></a> 70% reduction in Kubernetes cost</td> <td align="center"><a href="https://www.vcluster.com/case-studies/scanmetrix"><strong>Scanmetrix</strong></a> 99% faster deployments</td> </tr> <tr> <td align="center"><a href="https://www.vcluster.com/case-studies/deloitte"><strong>Deloitte</strong></a> Enterprise K8s platform</td> <td align="center"><a href="https://www.vcluster.com/case-studies/ada-cx"><strong>Ada</strong></a> 10x Developer Productivity</td> <td align="center"><a href="https://www.vcluster.com/case-studies/trade-connectors"><strong>Trade Connectors</strong></a> 50% reduction in K8s ops cost</td> </tr> </table>

Also used by: NVIDIA, ABBYY, Lintasarta, Precisely, Shipwire, Trade Connectors, and many more.

๐Ÿ‘‰ View All Case Studies


๐Ÿ“š Learn More

<details> <summary><strong>๐ŸŽค Conference Talks</strong></summary>
EventSpeakerTitleLink
KubeCon NA 2025 (Keynote)Lukas GenteleAutoscaling GPU Clusters Anywhere โ€” Hyperscalers, Neoclouds & BaremetalWatch
Platform Engineering Day NA 2025 (Keynote)Saiyam PathakAI-Ready Platforms: Scaling Teams Without Scaling CostsWatch
Rejekts NA 2025Hrittik Roy, Saiyam PathakBeyond the Default Scheduler: Navigating GPU MultiTenancy in AI EraWatch
KubeCon EU 2025Paco Xu, Saiyam PathakA Huge Cluster or Multi-Clusters? Identifying the BottleneckWatch
HashiConf 2025Scott McAllisterGPU sharing done right: Secrets, security, and scaling with Vault and vClusterWatch
FOSDEM 2025Hrittik Roy, Saiyam PathakAccelerating CI Pipelines: Rapid Kubernetes Testing with vClusterWatch
KubeCon India 2024 (Keynote)Saiyam PathakFrom Outage To Observability: Lessons From a Kubernetes MeltdownWatch
CNCF Book Club 2024Marc BoorshteinKubernetes - An Enterprise Guide (vCluster)Watch
KCD NYC 2024Lukas GenteleTenant Autonomy & Isolation In Multi-Tenant Kubernetes ClustersWatch
KubeCon EU 2023Ilia Medvedev, Kostis KapelonisHow We Securely Scaled Multi-Tenancy with VCluster, Crossplane, and Argo CDWatch
KubeCon NA 2022Joseph Sandoval, Dan GarfieldHow Adobe Planned For Scale With Argo CD, Cluster API, And VClusterWatch
KubeCon NA 2022Whitney Lee, Mauricio SalatinoWhat a RUSH! Let's Deploy Straight to Production!Watch
TGI Kubernetes 2022TGITGI Kubernetes 188: vClusterWatch
Mirantis Tech Talks 2022MirantisMulti-tenancy & Isolation using Virtual Clusters (vCluster) in K8sWatch
Solo Webinar 2022Rich Burroughs, Fabian KellerSpeed your Istio development environment with vClusterWatch
KubeCon NA 2021Lukas GenteleBeyond Namespaces: Virtual Clusters are the Future of Multi-TenancyWatch
</details> <details> <summary><strong>๐ŸŽฌ Community Voice</strong></summary>
ChannelSpeakerTitleLink
TeKanAid 2024TeKanAidGetting Started with vCluster: Build Your IDP with Backstage, Crossplane, and ArgoCDWatch
Rawkode 2021David McKay, Lukas GenteleHands on Introduction to vClusterWatch
Kubesimplify 2021Saiyam Pathak, Lukas GenteleLet's Learn vClusterWatch
TechWorld with Nana 2021NanaBuild your Self-Service Kubernetes Platform with Virtual ClustersWatch
DevOps Toolkit 2021Viktor FarcicHow To Create Virtual Kubernetes ClustersWatch
</details>

๐Ÿ‘‰ YouTube Channel โ€ข Blog


Custom e2e-next Linters

The project uses custom golangci-lint plugins from e2e-framework that enforce correctness patterns in Ginkgo test code:

LinterWhat it checks
defercleanupclusterEvery cluster.Create() call must have a matching DeferCleanup(cluster.Destroy(...)) in the same scope
defercleanupctxDeferCleanup must not be called with a setup.Func - use e2e.DeferCleanupCtx(ctx, fn) instead
ginkgoreturnctxGinkgo node functions (BeforeEach, It, etc.) that reassign their context.Context parameter must also return context.Context
describefuncPackage-level var _ = Describe(...) with cluster.Use() must use an exported function pattern instead of auto-registration

These linters run automatically as part of just lint and just lint-e2e. The custom binary is auto-rebuilt when .custom-gcl.yml changes.

Quick commands

bash
# Run custom linters against e2e-next (with autofix)
just lint-e2e

# Rebuild custom golangci-lint binary explicitly
just build-linters

Suppressing a finding

Use //nolint:<linter-name> with a reason:

go
ctx, err = cluster.Create(...)(...) //nolint:defercleanupcluster // destroyed in SynchronizedAfterSuite

GoLand / IntelliJ setup

GoLand (2025.1+) has built-in golangci-lint support, but it must be pointed at the custom-built binary - the system golangci-lint doesn't know about our plugins.

  1. Build the custom binary once: just build-linters
  2. In GoLand: Settings > Go > Linters
  3. In the Executable dropdown, click + > Browse and select the absolute path to <project-root>/tools/golangci-lint
  4. Leave "Use config" unchecked - GoLand will auto-discover .golangci.yml

Findings from the custom linters will appear inline in the editor and in the Problems tool window.

Troubleshooting: If you see "unknown linter" errors, you're probably running the system binary instead of the custom one. Verify the executable path in Settings > Go > Linters.

After updating linter versions in .custom-gcl.yml, re-run just build-linters and restart the GoLand inspection (or reopen the file).


๐Ÿค Contributing

We welcome contributions! Check out our Contributing Guide to get started.


ResourceLink
๐Ÿ“– Documentationvcluster.com/docs
๐Ÿ’ฌ Slack Communityslack.loft.sh
๐ŸŒ Websitevcluster.com
๐Ÿฆ X (Twitter)@vcluster
๐Ÿ’ผ LinkedInvCluster
๐Ÿ’ฌ Chat with ExpertStart Chat

๐Ÿ“œ License

vCluster is licensed under the Apache 2.0 License.


<div align="center">

ยฉ 2026 Loft Labs. All rights reserved.

Made with โค๏ธ by the vCluster community.

โญ Star us on GitHub โ€” it helps!

</div>