Abstract:
A device receives a virtual machine (VM) to be deployed, and identifies multiple network device clusters for possible VM deployment. The device applies a weighting parameter to at least one of the multiple network device clusters to favor selection of the at least one of the multiple network device clusters over other network device clusters. The device receives user selection of one or more network device clusters from the multiple network device clusters to generate a disabled group of network device clusters and an enabled group of network device clusters, wherein the disabled group of network device clusters excludes at least one of the multiple network device clusters. The device selects a network device cluster, from the enabled group of network device clusters, for deployment of the VM based on the weighting parameter applied to the at least one of the multiple network device clusters.

Description:
BACKGROUND 
       [0001]    A virtual machine includes a software-based emulation of a physical computer where the virtual machine executes programs like a physical machine. A characteristic of a virtual machine is that its software is limited to the resources and abstractions provided by the virtual machine, meaning that a virtual machine cannot escape the boundaries of its virtual environment. Virtual machines are classified into two different classifications: 1) a system virtual machine; or 2) a process virtual machine. A system virtual machine provides a complete system platform that supports the execution of an entire operating system and emulates an existing architecture. With a system virtual machine, multiple operating system environments can co-exist on a same computer in isolation from each other. A system virtual machine can provide an instruction set architecture that is different from that of the real machine. A process virtual machine supports a single process and is typically portable and flexible. A process virtual machine runs as a normal application inside a host operating system and provides a platform-independent programming environment that allows a program to execute in a same manner on any platform. 
     
    
     
       BRIEF DESCRIPTION OF THE DRAWINGS 
         [0002]      FIG. 1  is a diagram that depicts an overview of an automated server cluster selection process for deploying a virtual machine (VM); 
           [0003]      FIG. 2  is a diagram that depicts an exemplary network environment in which the automated server cluster selection process of  FIG. 1  may be implemented; 
           [0004]      FIG. 3  is a diagram that depicts an exemplary one of the server clusters of  FIG. 2 ; 
           [0005]      FIG. 4  is a diagram that depicts exemplary components of a device that may correspond to a server of the server clusters, or the virtual machine deployment manager, of FIG.  2 ; 
           [0006]      FIG. 5  is a flow diagram that illustrates an exemplary process for receiving parameters used in the automated server cluster selection process for deploying a virtual machine (VM) of  FIG. 7 ; 
           [0007]      FIG. 6  is a flow diagram that illustrates an exemplary process for calculating additional parameters, based on other parameters received in the exemplary process of  FIG. 5 , for use in the automated server cluster selection process of  FIG. 7 ; 
           [0008]      FIG. 7  is a flow diagram that illustrates an exemplary automated selection process for deploying a virtual machine in a selected server cluster of multiple server clusters; and 
           [0009]      FIGS. 8-10  are diagrams that graphically depict examples associated with the process of  FIG. 7 . 
       
    
    
     DETAILED DESCRIPTION OF THE PREFERRED EMBODIMENTS 
       [0010]    The following detailed description refers to the accompanying drawings. The same reference numbers in different drawings may identify the same or similar elements. The following detailed description does not limit the invention. 
         [0011]    In a virtualized environment, there may be multiple clusters of servers (i.e., physical servers) servicing multiple different virtual machines (VMs). In embodiments described herein, a goal of automated deployment/self-provisioning is to automate the selection of a cluster when a new VM will best fit. The resources that need to be considered during such a process include the available capacity of the physical central processing unit(s) (CPU(s)), memory, disk storage, and network bandwidth. In a virtualized environment, the disk storage and network bandwidth are considered external to the physical servers running the VMs. Technologies such as a Storage Area Network (SAN), Network-Attached Storage (NAS), and network load balancing may be used to effectively address disk storage and network bandwidth resource limitations. 
         [0012]    CPU and memory on physical servers (hereinafter referred to as “servers,” “server clusters,” or “network device clusters”) are considered finite resources and are limited with respect to over-provisioning. During VM deployment, care must be taken so as not to exceed these finite resources. Exceeding the limits of these resources can impact the performance of all of the VMs currently residing on a cluster, leading to undesired consequences. In a large virtualization environment, as the environment grows, multiple clusters may be implemented to service the environment. Each cluster can have a varying quantity of physical resources (e.g., physical CPU and physical memory). In a self-serviced, automated provisioning and dynamic environment, where VMs are continuously provisioned, resized and decommissioned, care must be taken to efficiently utilize the resources. The automated process, described herein, for selecting a server cluster for VM deployment efficiently utilizes physical CPU and memory resources while taking into account current CPU allocation, currently available memory, high availability options within each of the server clusters, and administrator-supplied manual overrides. 
         [0013]      FIG. 1  is a diagram that depicts an overview of an automated server cluster selection process for deploying a virtual machine (VM). As shown in  FIG. 1 , a VM  100  may be received for deployment within a server cluster. VM  100  may include a VM configuration  105  that further includes a virtual central processing unit (vCPU) parameter and an amount of virtual memory (vMEM) parameter. The vCPU parameter indicates a number of CPUs required by VM  100 , where the number may include any rational number. The vMEM parameter indicates an amount of memory (in GB) required by VM  100 . An automated server cluster selection process, implemented by a VM deployment manager (not shown in  FIG. 1 ) may automatically select a specific server cluster, from multiple different identified server clusters  110 - 1  through  110 - z  (where z is an integer greater than or equal to two), into which to deploy VM  100 . The automated server cluster selection process may include, for example, the process of  FIG. 7  described in further detail below. Upon selection of a server cluster, process  120  may deploy  130  VM  100  in the selected server cluster (e.g., cluster  110 - 2  depicted as an example in  FIG. 1 ). 
         [0014]      FIG. 2  is a diagram that depicts an exemplary network environment  200  in which the automated server cluster selection process of  FIG. 1  may be implemented. As shown, network environment  200  may include a network  210 , a virtual machine (VM) deployment manager  220 , and server clusters  110 - 1  through  110 - z  (individually and generically referred to herein as “server cluster  110 ” or “cluster  110 ”). VM deployment manager  220  and server clusters  110 - 1  through  110 - z  may each connect, either directly or indirectly, to network  210 . In some embodiments, each server of server clusters  110 - 1  through  110 - z  may connect directly to network  210 , or may connect indirectly to network  210  via another network (e.g., via a local area network (LAN) (not shown)). 
         [0015]    Network  210  may include one or more networks of various types including, for example, a Public Switched Telephone Network (PSTN), a wireless network, a LAN, a wide area network (WAN), a metropolitan area network (MAN), an intranet, or the Internet. The wireless network may include a satellite network, a Public Land Mobile Network (PLMN), or a wireless LAN or WAN (e.g., Wi-Fi). 
         [0016]    VM deployment manager  220  may include a network device that performs the automated server cluster selection process  120  for VM deployment, as described herein. VM deployment manager  220  may receive VMs for deployment, may automatically select a server cluster for each of the VMs, and may deploy and provision each of the VMs at the selected cluster. 
         [0017]    Each of server clusters  110 - 1  through  110 - z  may include a cluster of multiple servers, such as, for example, multiple network devices, as described in further detail with respect to  FIG. 3 . Each one of the servers may include a network device, such as a network connected computer, into which one or more VMs may be deployed and provisioned for subsequent execution. 
         [0018]    The configuration of components of network environment  200  illustrated in  FIG. 2  is for illustrative purposes. Other configurations may be implemented. Therefore, network environment  200  may include additional, fewer and/or different components that may be configured in a different arrangement from that depicted in  FIG. 2 . 
         [0019]      FIG. 3  is a diagram that depicts an exemplary server cluster  110 . As shown in  FIG. 3 , server cluster  110  may include one or more servers  300 - 1  through  300 - x  (where x is an integer greater than or equal to 1; each server is generically and individually referred to herein as a “server  300 ” or a “network device  300 ”). In one embodiment, each server of servers  300 - 1  through  300 - x  may include a network device having an identical configuration, including a same number of physical CPUs (pCPU), and a same amount, in GB, of physical memory (pMEM). 
         [0020]    Servers  300 - 1  through  300 - x  may interconnect with one another, and with network  210  via, for example, a LAN (not shown). Other types of networks may be used, however, for interconnecting servers  300 - 1  through  300 - x  with one another, and with network  210 . In other embodiments, each of servers  300 - 1  through  300 - x  may connect directly to network  210 , instead of via an intervening network. 
         [0021]      FIG. 4  is a diagram that depicts exemplary components of a device  400 . Server  300  and VM deployment manager  220  may each have the same or similar components, in a same or similar configuration, to that of device  400  shown in  FIG. 4 . Device  400  may include a bus  410 , a processing unit(s)  420 , a main memory  430 , a read only memory (ROM)  440 , a storage device  450 , an input device(s)  460 , an output device(s)  470 , and a communication interface(s)  480 . Bus  410  may include a path that permits communication among the elements of device  400 . 
         [0022]    Processing unit(s)  420  may include one or more processors or microprocessors, or processing logic, which may interpret and execute instructions. In an implementation in which device  400  corresponds to server  300 , processing unit(s)  420  may include a number, i.e., pCPU, of central processing units (CPUs), where pCPU is an integer number of physical CPUs greater than or equal to one. Memory  330  may include a random access memory (RAM) or another type of dynamic storage device that may store information and instructions for execution by processing unit(s)  420 . In an implementation in which device  400  corresponds to server  300 , memory  430  may include pMEM Gigabytes (GB) of memory, where pMEM comprises an integer quantity, in GB, of physical memory. Read Only Memory (ROM)  440  may include a ROM device or another type of static storage device that may store static information and instructions for use by processing unit(s)  420 . Storage device  450  may include a magnetic and/or optical recording medium. Main memory  430 , ROM  440  and storage device  450  may each be referred to herein as a “tangible non-transitory computer-readable medium.” 
         [0023]    Input device  460  may include one or more mechanisms that permit an operator (or user) to input information to device  400 , such as, for example, a keypad or a keyboard, a display with a touch sensitive panel, voice recognition and/or biometric mechanisms, etc. Output device  470  may include one or more mechanisms that output information to the operator, including a display, a speaker, etc. Communication interface(s)  480  may include a transceiver that enables device  400  to communicate with other devices and/or systems. For example, communication interface(s)  480  may include a wired or wireless transceiver for communicating with other servers  300 , with network  210 , or with another network, such as a LAN. 
         [0024]    The configuration of components of device  400  illustrated in  FIG. 4  is for illustrative purposes only. Other configurations may be implemented. Therefore, device  400  may include additional, fewer and/or different components, or differently arranged components, from those depicted in  FIG. 4 . 
         [0025]      FIG. 5  is a flow diagram that illustrates an exemplary process for receiving parameters used in the automated server cluster selection process  120  for deploying a virtual machine (VM). The exemplary process of  FIG. 5  may be implemented by VM deployment manager  220  to receive parameters for a given cluster q having x servers. 
         [0026]    The exemplary process may include receiving a value (n) for the maximum number of physical host failures (e.g., server failures) allowed in a server cluster q (block  500 ). The server cluster q may correspond to server cluster  110  depicted in  FIG. 3 , where cluster  110  includes x servers  300 - 1  through  300 - x . A server cluster q may be configured to tolerate a certain number of physical host failures before the cluster fails to provide the required service level agreements. When that number of physical host failures is actually exceeded, catastrophic events, like service outages, can occur. For example, an administrator or operator of server cluster q or VM deployment manager  220  may, based on a knowledge of the capabilities of the servers of the server cluster and the required service level agreements, specify the value n for the maximum number of physical host failures allowed in the server cluster. 
         [0027]    VM deployment manager  220  may receive a percent of over-allocation of memory parameter (ofactor) for cluster q (block  505 ). In a VM environment, physical memory (pMEM) may be over-allocated to virtual memory (vMEM) such that the virtual memory exceeds the physical memory. The decision to over allocate physical memory may be based on service level agreements and a nature of load within a given server cluster. Additionally, a certain amount of physical memory (e.g., 5 percent or 0.05) must be dedicated for the proper working of certain critical functions of a cluster such, as for example, the proper working of a hypervisor (i.e., a virtual machine monitor) of the server cluster. The global variable ofactor can be used to specify the percent of over-allocation memory within a server cluster. If an over allocation of physical memory of 10 percent in a server cluster is desired, then ofactor can be set to 1.10−0.05=1.05 (where 0.05 is subtracted for the proper working of critical functions like the hypervisor). 
         [0028]    VM deployment manager  220  may receive a value for the maximum number of virtual CPUs (vCPU) allowed per virtual machine (max_vCPU_allowed_per_VM) within cluster q (block  510 ). The max_vCPU_allowed_per_VM value may be defined by an administrator to provide an optimal performance of VMs within the server cluster q, and should be based on the type of hardware of the corresponding physical host (i.e., server). VM deployment manager  220  may receive a value for the maximum virtual CPU to physical CPU ratio (max_vCPU_to_pCPU_ratio) for cluster q (block  515 ). The value for the max_vCPU_to_pCPU_ratio includes an administrator defined maximum value for a number of virtual CPUs divided by the actual number of physical CPUs. The max_vCPU_to_pCPU_ratio for cluster q may be defined based on the type of hardware, including the specifically deployed processor family of the servers of cluster q. Newer and faster processors may have a higher max_vCPU_to_pCPU_ratio value as compared to older processors. 
         [0029]    VM deployment manager  220  may receive a value for a selection preference parameter (weightage) for cluster q (block  520 ). The selection preference parameter provides bias in the automated server cluster selection process. All other parameters being equal, the selection preference parameter weightage favors selection of a certain cluster and may be used by the administrator, for example, to give a higher preference to newer hardware. VM deployment manager  220  may receive an enablement or disablement selection for cluster q (block  525 ). The administrator of the server cluster or VM deployment manager  220  may manually disable or enable a cluster q to exclude, or include, the server cluster q in the automated server cluster selection process. For example, if a given server cluster is undergoing maintenance, or is otherwise unavailable, the administrator may disable that server cluster from inclusion in the server cluster selection process. 
         [0030]    The exemplary process of  FIG. 5  may be repeated, for example, upon manual initiation by an administrator of server clusters  110 - 1  through  110 - z  or VM deployment manager  220  to change one or more values of x, n, ofactor, max_vCPU_allowed_per_VM, max_vCPU_to_pCPU, weightage or to change the enablement/disablement selection for a cluster q. The blocks of the process of  FIG. 5  may be repeated in sequence to change any of the received values, or only a single block of the process of  FIG. 5  may be repeated to change a single received value (e.g., the administrator may only change the selection preference parameter weightage). The exemplary process of  FIG. 5  may be repeated, or performed in parallel, for each cluster  110  of the server clusters. 
         [0031]      FIG. 6  is a flow diagram that illustrates an exemplary process for calculating additional parameters, based on other parameters received in the exemplary process of  FIG. 5 , for use in the automated server cluster selection process  120  for VM deployment of  FIG. 7 . The exemplary process of  FIG. 6  may be implemented by VM deployment manager  220 . The exemplary process of  FIG. 6  may be executed for each cluster q of server clusters  110 - 1  through  110 - z , with each cluster having x servers (hosts) and running y VMs, where x and y may be different for each cluster. Execution of the exemplary process of  FIG. 6  may utilize current values of x, n, ofactor, max_vCPU_allowed_per_VM, max_vCPU_to_pCPU, weightage and the enablement/disablement selection for cluster q received from the exemplary process of  FIG. 5 . 
         [0032]    The exemplary process may include VM deployment manager  220  calculating a host failure value (HA factor) for cluster q having x servers (block  600 ) using: 
         [0000]    
       
         
           
             
               
                 
                   
                     HA 
                      
                     
                         
                     
                      
                     factor 
                   
                   = 
                   
                     
                       x 
                       - 
                       n 
                     
                     x 
                   
                 
               
               
                 
                   Eqn 
                   . 
                   
                       
                   
                    
                   
                     ( 
                     1 
                     ) 
                   
                 
               
             
           
         
       
     
         [0000]    where n is the maximum number of physical host failures in a cluster of x servers (received at block  500  of  FIG. 5 ). 
         [0033]    VM deployment manager  220  may calculate a value for the allocation of physical CPUs to virtual CPUs (vCPU_allocation ratio) within cluster q (block  605 ) using: 
         [0000]    
       
         
           
             
               
                 
                   
                     vCPU_allocation 
                      
                     _ratio 
                   
                   = 
                   
                     
                       
                         ∑ 
                         
                           i 
                           = 
                           1 
                         
                         y 
                       
                        
                       
                         vCPU 
                         i 
                       
                     
                     
                       HA 
                        
                       
                           
                       
                        
                       factor 
                       * 
                       
                         
                           ∑ 
                           
                             j 
                             = 
                             1 
                           
                           x 
                         
                          
                         
                           pCPU 
                           j 
                         
                       
                     
                   
                 
               
               
                 
                   Eqn 
                   . 
                   
                       
                   
                    
                   
                     ( 
                     2 
                     ) 
                   
                 
               
             
           
         
       
     
         [0000]    where a server cluster has x identical physical hosts (i.e., servers) (HOST 1 , HOST 2 , . . . , HOST x ), with each HOST j  configured with a number pCPU j  of physical CPUs and pMEM j  GB of physical memory, where the cluster q is currently running y VMs (VM 1 , VM 2 , . . . , VM y ), and where vCPU i  is the number of virtual CPUs currently being used by a virtual machine VM i  running in a respective server cluster being denoted by vCPU i  and the virtual memory being used by virtual machine VM i  denoted by vMEM i . 
         [0034]    VM deployment manager  220  may calculate a value of total physical memory available for virtual machine allocation (total_pMEM_for_VM_allocation) (block  610 ) for cluster q using: 
         [0000]    
       
         
           
             
               
                 
                   deployed_vMEM 
                   = 
                   
                     
                       ∑ 
                       
                         i 
                         = 
                         1 
                       
                       y 
                     
                      
                     
                       vMEM 
                       i 
                     
                   
                 
               
               
                 
                   Eqn 
                   . 
                   
                       
                   
                    
                   
                     ( 
                     4 
                     ) 
                   
                 
               
             
           
         
       
     
         [0000]    with HA factor being the value calculated in block  600 , and ofactor being the memory over-allocation parameter received in block  505  of  FIG. 5 . 
         [0035]    VM deployment manager  220  may calculate a deployed virtual memory value (deployed_vMEM) (block  615 ) for cluster q using: 
         [0000]    
       
         
           
             
               
                 
                   
                     total_pMEM 
                      
                     _for 
                      
                     _VM 
                      
                     _allocation 
                   
                   = 
                   
                     HA 
                      
                     
                         
                     
                      
                     factor 
                     * 
                     ofactor 
                     * 
                     
                       
                         ∑ 
                         
                           j 
                           = 
                           1 
                         
                         x 
                       
                        
                       
                         pMEM 
                         j 
                       
                     
                   
                 
               
               
                 
                   Eqn 
                   . 
                   
                       
                   
                    
                   
                     ( 
                     3 
                     ) 
                   
                 
               
             
           
         
       
     
         [0000]    where the deployed vMEM value for cluster q includes a sum of the amount of virtual memory for all of the currently running VMs VM 1  through VM y  for cluster q. 
         [0036]    VM deployment manager  220  may calculate the available physical memory value (available_pMEM) (block  620 ) for cluster q using: 
         [0000]      available —   pMEM =total —   pMEM _for —   VM _allocation−deployed —   vMEM   Eqn. (5)
 
         [0000]    where the value total_pMEM_for_VM_allocation is calculated in block  610  and the value deployed_vMEM is calculated in block  615 . 
         [0037]    The exemplary process of  FIG. 6  may, for example, be repeated periodically for each cluster q of server clusters  110 - 1  through  110 - z , or may be repeated when any of values of x, n, ofactor, max_vCPU_allowed_per_VM, max_vCPU_to_pCPU, weightage or enablement/disablement selection for a cluster q change. 
         [0038]      FIG. 7  is a flow diagram that illustrates an exemplary automated server cluster selection process  120  for deploying a virtual machine in a selected server cluster of multiple server clusters. The exemplary process of  FIG. 7  may be implemented by VM deployment manager  220 . The description of  FIG. 7  below refers to the examples depicted in  FIGS. 8-10 . 
         [0039]    The exemplary process may include VM deployment manager  220  identifying a configuration of the new VM to be deployed, including the new VM&#39;s vCPU and vMEM (block  700 ). Each new VM to be deployed has inherent configuration parameters, including a number of virtual CPUs vCPU required by the VM, and an amount of virtual memory vMEM (in GB) required by the VM. The configuration parameters for the new VM may be used in the server cluster selection process  120 , as described further herein. 
         [0040]    VM deployment manager  220  may identify any enabled server clusters that have a value for max_vCPU_allowed_per_VM that is greater than or equal to the vCPU of the new VM (block  705 ). As shown in the example of  FIG. 8 , server clusters  110 - 1  through  110 - z  may all have been enabled, except for server cluster  4   110 - 4  that has been disabled for maintenance by the administrator. Additionally, as shown in  FIG. 8 , new VM  100  received for deployment has a configuration that includes a vCPU of 15, and a vMEM of 50 GB. Server cluster  110 - 1  has a value for max_vCPU_allowed_per_VM of 10, server cluster  110 - 2  has a value for max_vCPU_allowed_per_VM of 15, server cluster  110 - 3  has a value for max_vCPU_allowed_per_VM of 30, and server cluster  110 - z  has a value for max_vCPU_allowed_per_VM of 20. As shown by the dashed circular lines, server clusters  110 - 2 ,  110 - 3  and  110 - z  are each identified as having a value for max_vCPU_allowed_per_VM greater than or equal to the vCPU of 15 of new VM  100 . VM deployment manager  220  may determine if any cluster(s) has/have been identified in block  705  (block  710 ). If no cluster(s) has/have been identified (NO—block  710 ), then VM deployment manager  220  may not deploy the new VM in a server cluster (block  715 ) and the exemplary process for the new VM may end. 
         [0041]    If one or more clusters have been identified in block  705  (YES—block  710 ), then VM deployment manager  220  may, for all of the identified server clusters, obtain a current value for vCPU_allocation_ratio and may return a cluster(s) of the identified cluster(s) having vCPU_allocation_ratio less than max_vCPU_to_pCPU_ratio (block  720 ). The current value of vCPU_allocation_ratio for each identified server cluster may be calculated as described with respect to block  605  of  FIG. 6 , and compared to the value for max_vCPU_to_pCPU_ratio for a respective server cluster received in block  515  of  FIG. 5 . Returning to the example, among the identified server clusters of  FIG. 8 , cluster  110 - 2  has, as shown in  FIG. 9 , a vCPU_allocation_ratio of 0.25 and a value for max_vCPU_to_pCPU_ratio of 0.20, cluster  3  has a vCPU_allocation_ratio of 0.30 and a value for max_vCPU_to_pCPU_ratio of 0.50, and cluster  110 - z  has a value for vCPU_allocation_ratio of 0.15 and a value for max_vCPU_to_pCPU_ratio of 0.30. As shown by the dashed circular lines in  FIG. 9 , cluster  110 - 3 , having a vCPU_allocation_ratio of 0.30 that is less than the max_vCPU_to_pCPU_ratio of 0.50, and cluster  110 - z , having a vCPU_allocation_ratio of 0.15 that is less than the max_vCPU_to_pCPU_ratio of 0.30, are returned. VM deployment manager  220  may determine if any cluster(s) has/have been returned in block  720  (block  725 ). If no clusters are returned (NO—block  725 ), then VM deployment manager  220  may not deploy the new VM in a server cluster (block  730 ) and the exemplary server cluster selection process for the new VM may end. 
         [0042]    If one or more clusters have been returned in block  720  (YES—block  725 ), then VM deployment manager  220  may, for each returned server cluster, determine available_pMEM*weightage and select the server cluster of the returned cluster(s) having a maximum value (block  735 ). The value for available_pMEM may have been calculated in block  620  of  FIG. 6  for each of the returned server clusters. The selection preference parameter weightage may have been received in block  520  of  FIG. 5  for each of the returned server clusters. Returning to the example, among the returned server clusters of  FIG. 9 , cluster  110 - 3  has, as shown in  FIG. 10 , a value for available_pMEM*weightage equal to Val 1 , and cluster  110 - z  has a value for available_pMEM*weightage equal to Val 2 , where Val 1  is greater than Val 2 . Therefore, Val 1  is the maximum value among the returned server clusters, and cluster  110 - 3  is selected. 
         [0043]    VM deployment manager  220  may deploy and provision the new VM in the server cluster selected in block  735  (block  740 ). In the example of  FIG. 10 , since the value for available_pMEM*weightage of cluster  110 - 3  is greater than equal to the value for available_pMEM*weightage of cluster  110 - z , cluster  110 - 3  is selected, as shown with the dashed circular line in  FIG. 10 , for VM deployment. VM deployment manager  220  (not shown in this figure) deploys and provisions new VM  100  in selected server cluster  110 - 3 , in the example depicted in  FIG. 10 . 
         [0044]    The blocks  700 - 740  of  FIG. 7  may be repeated for each new VM identified at VM deployment manager  220  for deployment in a selected server cluster. 
         [0045]    The foregoing description of implementations provides illustration and description, but is not intended to be exhaustive or to limit the invention to the precise form disclosed. Modifications and variations are possible in light of the above teachings or may be acquired from practice of the invention. For example, while series of blocks have been described with respect to  FIGS. 5-7 , the order of the blocks may be varied in other implementations. Moreover, non-dependent blocks may be performed in parallel. 
         [0046]    Certain features described above may be implemented as “logic” or a “unit” that performs one or more functions. This logic or unit may include hardware, such as one or more processors, microprocessors, application specific integrated circuits, or field programmable gate arrays, software, or a combination of hardware and software. 
         [0047]    No element, act, or instruction used in the description of the present application should be construed as critical or essential to the invention unless explicitly described as such. Also, as used herein, the article “a” is intended to include one or more items. Further, the phrase “based on” is intended to mean “based, at least in part, on” unless explicitly stated otherwise. 
         [0048]    In the preceding specification, various preferred embodiments have been described with reference to the accompanying drawings. It will, however, be evident that various modifications and changes may be made thereto, and additional embodiments may be implemented, without departing from the broader scope of the invention as set forth in the claims that follow. The specification and drawings are accordingly to be regarded in an illustrative rather than restrictive sense.