1. A method for allocating resources to virtual machines, the method comprising: provisioning one or more capped virtual machines and one or more uncapped virtual machines, wherein the one or more capped virtual machines are allocated with predetermined maximum amount of resources, and wherein the one or more uncapped virtual machines are allocated with amount of resources that can scale indefinitely; monitoring resource usage for a selected resource for the one or more capped virtual machines and the one or more uncapped virtual machines, wherein the resource is selected from the group consisting of a processing resource, a memory resource, and a storage resource, and wherein each of the one or more capped virtual machines and uncapped virtual machines is assigned a priority level; monitoring resource usage for the selected resource for a high-priority uncapped virtual machine, wherein the high-priority uncapped virtual machine is assigned a higher priority level than each of the one or more capped virtual machines; responsive to detecting a first resource violation, the first resource violation corresponding to resource usage for the one or more capped virtual machines, and a second resource violation simultaneously, the second resource violation corresponding to resource usage for the one or more uncapped virtual machines, adjusting allocation of the selected resource for each of the one or more capped virtual machines in violation previous to adjusting allocation of the selected resource for any of the uncapped virtual machines in violation, wherein adjusting allocation of the selected resource comprises increasing the selected resource when a virtual machine overutilizes the selected resource, and decreasing the selected resource when a virtual machine underutilizes the selected resource, wherein adjusting allocation of the selected resource comprises adjusting allocation of the one or more capped virtual machines in violation in order of an assigned priority level of each capped virtual machine, and wherein adjusting allocation of the selected resource comprises adjusting allocation of the one or more uncapped virtual machines in violation in order of an assigned priority level of each uncapped virtual machine; and responsive to detecting a third resource violation, the third resource violation corresponding to resource usage for the high-priority uncapped virtual machine among the one or more uncapped virtual machines, adjusting allocation of the selected resource for the high-priority uncapped virtual machine previous to adjusting allocation of the selected resource for any of the capped virtual machines and the uncapped virtual machines in violation.