History

vCluster was developed by Loft Labs as part of their mission to improve Kubernetes multi-tenancy and developer productivity. It addresses the overhead and inefficiencies of spinning up separate Kubernetes clusters for each user or environment.

Value Proposition

Traditional Kubernetes environments struggle with true multi-tenancy. Creating individual physical clusters for each user or team can be costly and complex to manage. vCluster provides:

  • Cost-effective isolation without the need to spin up entire clusters.
  • Faster development cycles by provisioning dev/test environments in seconds.
  • Enhanced multi-tenancy with better resource sharing and security boundaries.

Key Features

  • Runs inside a namespace: Each vCluster is created as a namespace within a host cluster.
  • Kubernetes-native API: vClusters offer their own Kubernetes API server, making them feel like real clusters to kubectl and CI/CD tools.
  • Custom sync control: Users can decide which resources are synced to the host cluster.
  • Full Helm support: vClusters can be installed using Helm, making them easy to manage.

How vCluster Works

A vCluster typically runs its own API server and etcd instance (or an alternative like K3s) inside a namespace of a host Kubernetes cluster. From the outside, it behaves like a full Kubernetes cluster, but it shares the underlying infrastructure and kubelet of the host.

vClusters redirect API calls to their virtual control plane, and selected resources (like Pods) are synced back to the host cluster where they are actually scheduled.

Use Cases

  • Isolated dev/test environments: Developers can spin up disposable clusters in seconds.
  • CI/CD pipelines: Run e2e tests in isolated environments without provisioning full clusters.
  • Multi-tenant SaaS: Host multiple customer environments securely in one physical cluster.
  • Education and training: Provide each student or participant with their own vCluster.

How to Use vCluster

1. Install vCluster CLI

You’ll need the vCluster CLI to create and manage virtual clusters:


  curl -s https://api.github.com/repos/loft-sh/vcluster/releases/latest | grep "browser_download_url.*linux.*amd64" | cut -d '"' -f 4 | wget -i -
chmod +x vcluster-linux-amd64
mv vcluster-linux-amd64 /usr/local/bin/vcluster

Mac and Windows binaries are also available.

2. Install a vCluster in Your Host Cluster

Using Helm (assuming Helm is installed):


  vcluster create my-vcluster -n vcluster-namespace

This will:

  • Create a namespace vcluster-namespace.
  • Deploy a virtual Kubernetes control plane inside it.
  • Configure your kubeconfig to point to the new vCluster.

3. Access and Work with the vCluster

After creation, you can interact with the vCluster like any real Kubernetes cluster:


  kubectl config use-context my-vcluster
kubectl get pods -A

You can install apps, create namespaces, and deploy workloads inside the vCluster.

4. Delete the vCluster

When you’re done, clean up with:


  vcluster delete my-vcluster -n vcluster-namespace

Challenges

  • Networking complexity: Some Kubernetes network plugins may need tuning for full isolation.
  • Performance limitations: Though lightweight, heavy workloads still consume real cluster resources.
  • Learning curve: Developers unfamiliar with Kubernetes might need some ramp-up time.

Similar Concepts

  • Namespace-based multi-tenancy: Lighter but lacks true isolation.
  • Kubernetes-in-Kubernetes (KinD, Minikube): Local development environments not optimized for multi-user cloud use.
  • KubeVirt: Runs full VMs inside Kubernetes, suited for legacy workloads.

See Also

References