To size Tanzu Kubernetes cluster nodes, you specify the virtual machine class. vSphere with Tanzu provides default classes, and you can create your own. To use a class, associate it with the target vSphere Namespace and reference the class in the manifest.

About Virtual Machine Classes

A virtual machine class is a request for resource reservations for processing power on the virtual machine (VM), including CPU and memory (RAM). For example, the VM class type named "guaranteed-large" reserves 4 CPU and 16 GB RAM. See Default Virtual Machine Classes for a list of default VM classes and their corresponding CPU and RAM reservations.
Note: The VM disk size is set by the OVA template, not the VM class definition. For Tanzu Kubernetes releases, the disk size is 16GB. See About Tanzu Kubernetes release Distributions.
There are two reservation types for VM classes: guaranteed and best effort. The guaranteed class fully reserves its configured resources. This means that for a given cluster the spec.policies.resources.requests matches the spec.hardware settings. The best effort class allows resources to be overcommitted. For production workloads it is recommended that you use the guaranteed VM class type.
Warning: Because the best effort VM class type allows resources to be overcommitted, you can run out of resources if you have set limits on the vSphere Namespace where you are provisioning the Tanzu Kubernetes cluster. If contention occurs and the control plane is impacted, the cluster may stop running. For this reason you should always use the guaranteed VM class type for production clusters. If you cannot use the guaranteed VM class type for all production nodes, at a minimum you should use guaranteed for the control plane nodes.

Using Virtual Machine Classes

To use a virtual machine class with a Tanzu Kubernetes cluster, the VM class must be bound to the vSphere Namespace where the cluster is provisioned. To do this, you associate the class with the target namespace. See Configure a vSphere Namespace for Tanzu Kubernetes releases.

To list the VM classes available in the target vSphere Namespace, use the command kubectl get virtualmachineclassbinding. To view all virtual machine classes present on the Supervisor Cluster, run the command kubectl describe virtualmachineclasses. Note, however, that because only bound classes can be used to provision a cluster, the latter command is informational-only. See Workflow for Provisioning Tanzu Kubernetes Clusters Using the TKGS v1alpha2 API.
Note: The requirement to associate VM classes with the vSphere Namespace only applies to new clusters. Existing Tanzu Kubernetes clusters using default VM classes continue to function without requiring namespace association.

Default Virtual Machine Classes

The table Default Virtual Machine Classes lists default virtual machine class types that are used as deployment sizes for Tanzu Kubernetes cluster nodes.

To avoid overcommitting resources, production workloads should use the guaranteed class type. To avoid running out of memory, do not use the small or extra small class size for any worker node where you are deploying workloads in any environment (development, test, or production).

Table 1. Default Virtual Machine Classes
Class CPU Memory (GB) Reserved CPU and Memory
guaranteed-8xlarge 32 128 Yes
best-effort-8xlarge 32 128 No
guaranteed-4xlarge 16 128 Yes
best-effort-4xlarge 16 128 No
guaranteed-2xlarge 8 64 Yes
best-effort-2xlarge 8 64 No
guaranteed-xlarge 4 32 Yes
best-effort-xlarge 4 32 No
guaranteed-large 4 16 Yes
best-effort-large 4 16 No
guaranteed-medium 2 8 Yes
best-effort-medium 2 8 No
guaranteed-small 2 4 Yes
best-effort-small 2 4 No
guaranteed-xsmall 2 2 Yes
best-effort-xsmall 2 2 No

Custom Virtual Machine Classes

vSphere with Tanzu supports custom virtual machine classes for use with Tanzu Kubernetes clusters. Once you have defined a custom VM class, you must associate it with the target vSphere Namespace before you can use it with a cluster. See Create a VM Class in vSphere with Tanzu.

Editing Virtual Machine Classes

VM class definitions are not immutable. Any VM class can be edited, including the default VM class definitions. If a VM class is edited, existing Tanzu Kubernetes cluster nodes remain unaffected. New Tanzu Kubernetes clusters will use the modified class definition.
Caution: If you edit a VM class that is in use by a Tanzu Kubernetes cluster, and then scale out that cluster, the new node(s) will use the edited class definition, but the existing nodes will use the initial class definition, resulting in a mismatch of classes.