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 on the VM for processing power (CPU and memory (RAM). For example, guaranteed-large with 4 CPU and 16 GB RAM.

There are two class reservation types: guaranteed and best effort. Guaranteed class fully reserves its configured resources. This means that for a given cluster the spec.policies.resources.requests matches the spec.hardware settings. Best effort class allows resources to be overcommitted. Typically the guaranteed class type is used for production workloads. See Attributes of VM Classes.
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.

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.
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.

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.