When provisioning a new VMware vSphere Kubernetes Service (VKS) workload cluster or expanding an existing worker node pool, the operation fails or stalls indefinitely.
kubectl describe cluster <cluster-name> -n <namespace> or kubectl get events -n <namespace> reveals placement faults on worker machine objects similar to:VirtualMachineProvisioned: PlaceVmsXCluster failed: faults: [ResourcePool <resource-pool-id> faults: The host does not have sufficient CPU resources to satisfy the reservation.]
MachineDeployment <cluster-name>-worker-pool: X available replicas, at least Y required
VMware vSphere Kubernetes Service (VKS)
VMware Cloud Foundation (VCF) / VMware vSphere Foundation (VVF)
Local Consumption Interface (LCI)
This issue occurs when the backing vSphere Resource Pool assigned to the Workload Namespace lacks sufficient unreserved physical CPU capacity to fulfill the strict reservation requirements of the selected Virtual Machine Class.
Mechanism
IMPORTANT: If your VKS workload cluster was provisioned using the Local Consumption Interface (LCI) or vSphere Client UI, all topology modifications (VM Class updates or replica counts) must be performed directly through the vSphere Client UI. Executing changes via kubectl on LCI-managed clusters can cause spec drift and lifecycle reconciliation failures.
Select one of the following two resolution paths based on your workload requirements:
Option 1: Reconfigure Worker Node VM Class to best-effort-* (Recommended)
If 100% dedicated hardware CPU reservations are not strictly required for your workload, switch the worker node pool to a best-effort-* VM Class. best-effort classes do not mandate 100% CPU reservations at placement, allowing nodes to boot under shared resource pool conditions.
The Cluster API reconciler will sequentially re-provision the worker nodes. Once completed, the cluster status will transition to AVAILABLE = True.
Option 2: Reduce Worker Node Pool Replica Count
If guaranteed-* class reservations are strictly required but host hardware capacity cannot be immediately expanded, scale down the worker node pool replica count to fit the currently unreserved physical CPU capacity.
The reconciler will adjust the target topology state, complete node allocation, and transition the cluster status to AVAILABLE = True.