March 1, 2023
Resource pools in VMware powered clouds are one way to manage all available server resources and divide them among your virtual machines (VMs). They are essentially folders for your VMs that direct the server to allocate a certain amount of resources to a specified group of VMs in a hierarchy.
Resource pools are generally used to prioritize certain VMs over others, for reselling resources outside of your organization, and for isolating groups of VMs within performance standards, like when setting up a pool for Testing and Development vs. Production. Access controls are another reason to use resource pools – administrators can delegate a single pool of resources to a team member based on permissions.
Here are some tips to help you efficiently manage the CPU and memory allocated to your cloud servers.
Each resource pool can be defined by reservation, limit, shares, and expendability. Each pool can also have child pools underneath it that are further subdivided. All pools then contain VMs. Resource pools require Distributed Resource Scheduler (DRS), which is only available with certain license levels.
In the main navigator view of vSphere Web Client, select a host, resource pool, or a DRS cluster, then right click and choose All vCenter Actions > New Resource Pool. Pick a descriptive (or maybe funny, for this test run) name and then specify your shares, reservation, expandable reservation, and limit.
Shares are how you define priority for the resource pool. Typical share values are 2:4:1, where the values correspond to a Normal, High, and Low priority, but you can also set custom share values. When resources are not enough to cover all of your virtual machines, these settings will determine where to allocate them.
Limits are, as you might suspect, the maximum amount of each resource that can be used by the pool. Servers will never allocate more than the limit to a single virtual machine, so if you set the memory limit to 2GB, each VM in that resource pool can only have a maximum of 2GB of memory at a time.
Reservations are the opposite of limits in that they are the baseline resource assigned to each VM. A resource pool with a reservation limit of 8GB of RAM will split that 8 GB among all VMs within that pool, VM1 might have 1GB, VM2 might have 0.5GB, and VM3 might have 3GB, leaving 3.5GB for a fourth virtual machine.
Resource pools should be used to allow greater performance to specific VM groups, not simply to logically separate your virtual machines. A better way is to label and sort them using folders. Right click a parent object and select All vCenter Actions, then either New Host and Cluster Folder, New Network Folder, New Storage Folder, or New VM and Template Folder. You can also place folders within folders. Move objects into your folder by right clicking and selecting Move To.
Going back to our test/dev and production example, if you want to prioritize your production servers using shares, you must take into account the number of virtual machines within the resource pool. If you have more production servers than test servers, even with more resources allocated to the production pool, the test servers might end up with more CPU shares.
That sounds strange, but doing the math reveals why. Let’s say you have 100 VMs in production and 50 VMs in test/dev. You set the shares to 70% of CPU for Production and 40% for test/dev. If you’re splitting 100 CPU cores between them, then each VM in production gets 0.7 cores, while each VM in test/dev gets 0.8 cores.
If you change the number of VMs in your resource pools, you’ll need to adjust the shares to maintain performance levels according to these ratios. To edit resource pool settings, select it, click the Manage tab, and click Settings.