GET STARTED

Deploy vCluster in minutes

1
Start with any Kubernetes cluster

Works with any Kubernetes distro — cloud, on-prem, or private.

EKS
GKE
AKS
Rancher
Bare Metal
KubeVirt
Tanzu
OpenShift
Private Cloud
Standalone
EKS
GKE
AKS
Rancher
Bare Metal
KubeVirt
Tanzu
OpenShift
Private Cloud
Standalone
2
Choose Your Tenancy Model

Choose how you want to isolate workloads within your cluster.

Pick a tenancy mode and drop it into a vcluster.yaml file.

The virtual cluster uses the nodes owned by the underlying host cluster. Pods from different virtual clusters might be scheduled on the same nodes. Pods use the CNI, CSI, etc. are from the host cluster.

# vcluster.yaml (optional for shared nodes)
sync:
  fromHost:
    nodes:
      # set to true for real node specs
      enabled: false

For stricter isolation, you can configure Virtual Nodes, Dedicated Nodes or Private Nodes

The virtual cluster uses a dedicated set of nodes owned by the underlying host cluster. Pods use the CNI, CSI, etc. are from the host cluster.

# vcluster.yaml
sync:
  fromHost:
    nodes:
      # set to false to show pseudo nodes
      enabled: true
      selector:
        labels:
          tenant: tenant-1

Make sure the set of nodes you want to dedicate to this virtual cluster, have the label you specified in your vcluster.yaml. To label a node, run this command in your host cluster:

# Get node name
kubectl get nodes

# Add label to node 
kubectl label nodes <node-name> tenant=tenant-1

For stricter isolation, you can configure Private Nodes instead.

Nodes are directly joined into the virtual cluster’s control plane and are not part of any other cluster. CNI, CSI, and nodes are not shared and are entirely separate for this virtual cluster.

# vcluster.yaml
privateNodes:
  enabled: true
controlPlane:
  service:
    spec:
      # could also be LoadBalancer if available
      type: NodePort
3
Deploy vCluster

Install the CLI and launch your virtual cluster in seconds.

3.1
Install vCluster CLI
brew install loft-sh/tap/vcluster
3.2
Deploy vCluster
vcluster create vc-tenant-1 # -f vcluster.yaml

The -f vcluster.yaml flag is optional — use it only when you need a custom setup. Without it, vCluster will create a cluster with defaults.

3.3
Make Changes
vcluster create --upgrade vc-tenant-1 -f vcluster.yaml

If you make any changes to your vcluster.yaml, you can use the --upgrade flag to upgrade the running virtual cluster and apply your changes.

3.1
Install
curl -L -o vcluster "https://github.com/loft-sh/vcluster/releases/latest/download/vcluster-linux-amd64" && sudo install -c -m 0755 vcluster /usr/local/bin && rm -f vcluster
3.2
Deploy
vcluster create my-vcluster --namespace team-x
3.1
Install
md -Force "$Env:APPDATA\vcluster"; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]'Tls,Tls11,Tls12';
Invoke-WebRequest -URI "https://github.com/loft-sh/vcluster/releases/latest/download/vcluster-windows-amd64.exe" -o $Env:APPDATA\vcluster\vcluster.exe;
$env:Path += ";" + $Env:APPDATA + "\vcluster";
3.2
Deploy
vcluster create my-vcluster --namespace team-x
3.1
Deploy
helm upgrade --install my-vcluster vcluster \
  --repo https://charts.loft.sh \
  --namespace team-x \
  --create-namespace \
  --repository-config=''
3.1
Create a Terraform file
provider "helm" {
  kubernetes = {
    config_path = "~/.kube/config"
  }
}

resource "helm_release" "my_vcluster" {
  name             = "my-vcluster"
  namespace        = "team-x"
  create_namespace = true
  repository       = "https://charts.loft.sh"
  chart            = "vcluster"


}
3.2
Deploy
terraform init

terraform plan

terraform apply
3.1
Create file application.yaml
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: my-vcluster
  namespace: argocd
spec:
  project: default
  source:
    chart: vcluster
    repoURL: https://charts.loft.sh
    targetRevision: *
    helm:
      releaseName: my-vcluster  
  destination:
    server: https://kubernetes.default.svc
    namespace: team-x
3.2
Deploy
kubectl apply -f application.yaml
3
Deploy vCluster

Install the CLI and launch your virtual cluster in seconds.

3.1
Install vCluster CLI
brew install loft-sh/tap/vcluster
3.2
Deploy vCluster
vcluster create vc-tenant-1 -f vcluster.yaml
3.3
Make Changes
vcluster create --upgrade vc-tenant-1 -f vcluster.yaml

If you make any changes to your vcluster.yaml, you can use the --upgrade flag to upgrade the running virtual cluster and apply your changes.

3.1
Install
curl -L -o vcluster "https://github.com/loft-sh/vcluster/releases/latest/download/vcluster-linux-amd64" && sudo install -c -m 0755 vcluster /usr/local/bin && rm -f vcluster
3.2
Deploy
vcluster create my-vcluster --namespace team-x
3.1
Install
md -Force "$Env:APPDATA\vcluster"; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]'Tls,Tls11,Tls12';
Invoke-WebRequest -URI "https://github.com/loft-sh/vcluster/releases/latest/download/vcluster-windows-amd64.exe" -o $Env:APPDATA\vcluster\vcluster.exe;
$env:Path += ";" + $Env:APPDATA + "\vcluster";
3.2
Deploy
vcluster create my-vcluster --namespace team-x
3.1
Deploy
helm upgrade --install my-vcluster vcluster \
  --repo https://charts.loft.sh \
  --namespace team-x \
  --create-namespace \
  --repository-config=''
3.1
Create a Terraform file
provider "helm" {
  kubernetes {
    config_path = "~/.kube/config"
  }
}

resource "helm_release" "my_vcluster" {
  name             = "my-vcluster"
  namespace        = "team-x"
  create_namespace = true
  repository       = "https://charts.loft.sh"
  chart            = "vcluster"


}
3.2
Deploy
terraform init

terraform plan

terraform apply
3.1
Create file application.yaml
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: my-vcluster
  namespace: argocd
spec:
  project: default
  source:
    chart: vcluster
    repoURL: https://charts.loft.sh
    targetRevision: *
    helm:
      releaseName: my-vcluster  
  destination:
    server: https://kubernetes.default.svc
    namespace: team-x
3.2
Deploy
kubectl apply -f application.yaml
3
Deploy vCluster

Install the CLI and launch your virtual cluster in seconds.

3.1
Install vCluster CLI
brew install loft-sh/tap/vcluster
3.2
Install vCluster Platform
vcluster platform start
3.3
Deploy vCluster
vcluster create vc-tenant-1 -f vcluster.yaml
3.4
Make Changes
vcluster create --upgrade vc-tenant-1 -f vcluster.yaml

If you make any changes to your vcluster.yaml, you can use the --upgrade flag to upgrade the running virtual cluster and apply your changes.

3.1
Install vCluster CLI
curl -L -o vcluster "https://github.com/loft-sh/vcluster/releases/latest/download/vcluster-linux-amd64" && sudo install -c -m 0755 vcluster /usr/local/bin && rm -f vcluster
3.2
Install vCluster Platform
vcluster platform start
3.3
Deploy vCluster
vcluster create my-vcluster --namespace team-x
3.1
Install vCluster CLI
md -Force "$Env:APPDATA\vcluster"; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]'Tls,Tls11,Tls12';
Invoke-WebRequest -URI "https://github.com/loft-sh/vcluster/releases/latest/download/vcluster-windows-amd64.exe" -o $Env:APPDATA\vcluster\vcluster.exe;
$env:Path += ";" + $Env:APPDATA + "\vcluster";
3.2
Install vCluster Platform
vcluster platform start
3.3
Deploy vCluster
vcluster create my-vcluster --namespace team-x
3.1
Deploy
helm upgrade --install my-vcluster vcluster \
  --repo https://charts.loft.sh \
  --namespace team-x \
  --create-namespace \
  --repository-config=''
3.1
Create a Terraform file
provider "helm" {
  kubernetes {
    config_path = "~/.kube/config"
  }
}

resource "helm_release" "my_vcluster" {
  name             = "my-vcluster"
  namespace        = "team-x"
  create_namespace = true
  repository       = "https://charts.loft.sh"
  chart            = "vcluster"


}
3.2
Deploy
terraform init

terraform plan

terraform apply
3.1
Create file application.yaml
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: my-vcluster
  namespace: argocd
spec:
  project: default
  source:
    chart: vcluster
    repoURL: https://charts.loft.sh
    targetRevision: *
    helm:
      releaseName: my-vcluster  
  destination:
    server: https://kubernetes.default.svc
    namespace: team-x
3.2
Deploy
kubectl apply -f application.yaml
4
Join Nodes

Add worker nodes to your virtual cluster.

4.1
Get a node join command with an auth token from your virtual cluster:
vcluster token create
4.2
Run the command on the node you want to join
curl -sfLk "<URL with join token >" | sh -