1. A computer implemented method, comprising: monitoring the utilization of resources available to a compute node, wherein the resources comprise an input/output capacity, a processor capacity, and a memory capacity; allocating virtual machines to the compute node to maximize use of a first one of the resources; and then allocating an additional virtual machine to the compute node to increase the utilization of the resources other than the first one of the resources without over-allocating the first one of the resources.