vCluster
A vCluster control plane runs with fixed resources and does not scale with cluster size. Unlike standard NKE clusters, where control-plane nodes can be scaled to handle higher load, vClusters are not recommended for large clusters or workloads with a high number of Kubernetes objects (such as many Pods, CRDs, or operators) and heavy API server traffic.
A vCluster is a virtual Kubernetes cluster built on vCluster that runs on top of Nine Kubernetes Engine (NKE). It uses the same underlying compute, storage, and networking infrastructure as a standard NKE cluster, with dedicated worker nodes, but runs a virtualized control plane instead of dedicated high-availability control-plane nodes.
Because vClusters have no base cluster fee and provision in under two minutes, they provide a cost-effective alternative to standard NKE clusters for non-production workloads, with trade-offs in availability guarantees (SLA), automatic backups, and managed add-ons.
Use Cases
- CI/CD pipelines: Fast creation and deletion times combined with low cost make vClusters well suited for running end-to-end deployment tests in CI/CD pipelines.
- Testing new Kubernetes API versions: Nine provides the latest Kubernetes releases in vCluster early, so you can test your applications against new API versions before upgrading production clusters.
- Isolated development and staging environments: Run separate vClusters for development and staging to achieve stronger isolation than sharing multiple namespaces on a single NKE cluster, while granted full
cluster-adminpermissions.
Feature Comparison
The following table compares standard NKE clusters and vClusters:
| Feature | NKE | vCluster |
|---|---|---|
Service type LoadBalancer | ✓ | ✓ |
| Persistent storage (RWO/RWX) | ✓ | ✓ |
| Ingress | ✓ | ✓ |
| Autoscaling | ✓ | ✓ |
| Argo CD integration | ✓ | ✓ |
| Static Egress | ✓ | ✓ |
| Service Connections | ✓ | ✓ |
| NKE machine types | ✓ | ✓ |
| Dedicated worker nodes | ✓ | ✓ |
| Dedicated, scalable HA control plane | ✓ | ✗ |
| Managed cluster add-ons | ✓ | ✗ |
| Automatic backups | ✓ | ✗ |
| Uptime guarantees (SLA) | ✓ | ✗ |
| Base cluster fee | ✓ | ✗ |
| Fast creation time (< 2 minutes) | ✗ | ✓ |
Full cluster-admin | ✗ | ✓ |
Getting Started
You can create a vCluster using Cockpit or nctl.
- Cockpit
- nctl
- Log in to Cockpit.
- Select Managed Kubernetes from the product overview.
- Click Add Cluster and select the vcluster option.
-
Ensure that you have
nctlinstalled and authenticated:nctl auth login -
Create a new vCluster:
nctl create vcluster <CLUSTER_NAME>You can customize the cluster using flags such as
--location,--kubernetes-version,--machine-type,--min-nodes, and--max-nodes. Runnctl create vcluster --helpto see all available options.
To configure kubectl access to your cluster, see Cluster Login. For details on available locations, machine types, load balancing, and persistent storage, see the Nine Kubernetes Engine (NKE) overview.
Argo CD
When you deploy applications to a vCluster using Argo CD, annotating a namespace with nine.ch/argo-admin="true" (as described in Argo CD Namespace Creation) does not automatically grant permissions. Because vClusters are not fully managed clusters, you must manually grant permissions to the Argo CD ServiceAccount.
To grant Argo CD cluster-admin permissions on your vCluster, complete the following steps:
-
Find the name of the Argo CD
ServiceAccountin thedefaultnamespace:kubectl get serviceaccounts -n defaultNote the service account name starting with
argocd-(for example,argocd-xyz). -
Create a
ClusterRoleBindingmanifest namedargocd-clusterrolebinding.yamland replace<ARGOCD_SERVICE_ACCOUNT>with the service account name from the previous step:argocd-clusterrolebinding.yamlapiVersion: rbac.authorization.k8s.io/v1kind: ClusterRoleBindingmetadata:name: argocdroleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: cluster-adminsubjects:- kind: ServiceAccountname: <ARGOCD_SERVICE_ACCOUNT>namespace: default -
Apply the manifest to your vCluster:
kubectl apply -f argocd-clusterrolebinding.yaml
Ingress
vCluster reuses the Ingress controller of the underlying host cluster, so you do not need to deploy a separate Ingress controller inside your vCluster.
You can find the predefined IngressClass and Host in the cluster details in Cockpit or in the API status under status.atProvider.vcluster.defaultIngress. Using the host IngressClass also enables automatic Let's Encrypt TLS certificates. For configuration details, see Ingress Usage.
Installing a Custom Ingress Controller
If you do not want to use the predefined host Ingress controller, you can deploy a custom Ingress controller inside your vCluster. Configure your custom controller with a distinct IngressClass name so that it does not conflict with the predefined IngressClass.
Metrics Server
metrics-server is not installed by default in a vCluster. Consequently, commands such as kubectl top and CPU- or memory-based Horizontal Pod Autoscalers (HPA) do not work out of the box (see Autoscaling Your NKE Workload).
Because you have full cluster-admin permissions within your vCluster, you can install and configure metrics-server yourself by following the official Metrics Server installation guide.