Automate Distributed Resource Scheduling (DRS) in VMware Using Ansible

In a VMware environment, Distributed Resource Scheduling (DRS) is a powerful feature that dynamically allocates resources to virtual machines (VMs) based on their current demand. DRS ensures that VMs are balanced across hosts in a cluster, optimizing resource utilization and improving overall performance. By automating the configuration of DRS using Ansible, you can simplify cluster management and ensure your environment runs smoothly.

In this article, we will guide you through an Ansible playbook to enable and configure DRS in VMware. Using the community.vmware.vmware_cluster_drs module, we will automate the process of enabling DRS, distributing VMs evenly across hosts, and setting the default VM behavior.

1. Enable DRS in VMware Cluster

The first step in configuring DRS is enabling it for the VMware cluster. This ensures that DRS will start managing resource allocation between hosts in the cluster.

- name: Enable DRS
  community.vmware.vmware_cluster_drs:
    hostname: '{{ vcenter_hostname }}'
    username: '{{ vcenter_username }}'
    password: '{{ vcenter_password }}'
    datacenter_name: datacenter
    cluster_name: cluster
    enable: true
  delegate_to: localhost

Breakdown:

  • hostname: Specifies the vCenter server’s hostname or IP address.
  • username and password: The login credentials for authenticating to vCenter.
  • datacenter_name: The name of the datacenter where the cluster resides.
  • cluster_name: The name of the cluster where DRS will be enabled.
  • enable: true: This ensures that DRS is enabled on the specified cluster.
  • delegate_to: localhost: Ensures that the task runs locally, on the machine where the Ansible playbook is being executed.

Enabling DRS in this manner ensures that the cluster can automatically distribute and manage VMs based on resource needs.

2. Enable DRS and Balance Virtual Machines Across Hosts

To ensure optimal resource distribution, it’s essential to configure DRS to balance VMs evenly across the hosts in the cluster. This task can be achieved by enabling DRS and setting the TryBalanceVmsPerHost advanced setting. This setting instructs DRS to attempt to distribute a more even number of virtual machines across hosts.

- name: Enable DRS and distribute a more even number of virtual machines across hosts for availability
  community.vmware.vmware_cluster_drs:
    hostname: '{{ vcenter_hostname }}'
    username: '{{ vcenter_username }}'
    password: '{{ vcenter_password }}'
    datacenter_name: datacenter
    cluster_name: cluster
    enable: true
    advanced_settings:
      'TryBalanceVmsPerHost': '1'
  delegate_to: localhost

Breakdown:

  • advanced_settings: This section allows you to define additional configurations for DRS. The TryBalanceVmsPerHost setting helps distribute VMs more evenly across hosts, ensuring better availability and resource utilization.
  • 'TryBalanceVmsPerHost': '1': This setting helps DRS to balance the number of VMs per host, which can improve the performance and stability of the entire cluster.

By distributing the VMs more evenly, you reduce the likelihood of any single host becoming overloaded with VMs, which can impact the performance and stability of your environment.

3. Enable DRS and Set Default VM Behavior to Partially Automated

With DRS enabled, you can also set the default behavior of VMs. The drs_default_vm_behavior setting controls how DRS interacts with VMs. In this task, we will set the default VM behavior to “partially automated,” meaning DRS will recommend VM migrations, but the administrator will have to approve them.

- name: Enable DRS and set default VM behavior to partially automated
  community.vmware.vmware_cluster_drs:
    hostname: "{{ vcenter_hostname }}"
    username: "{{ vcenter_username }}"
    password: "{{ vcenter_password }}"
    datacenter_name: DC0
    cluster_name: "{{ cluster_name }}"
    enable: true
    drs_default_vm_behavior: partiallyAutomated
  delegate_to: localhost

Breakdown:

  • drs_default_vm_behavior: partiallyAutomated: This configuration enables partially automated behavior for VM migrations. DRS will make recommendations, but it’s up to the administrator to approve them, providing a balance between automation and control over VM movements.
  • datacenter_name: DC0: Specifies the datacenter name where the cluster is located.
  • cluster_name: Refers to the name of the cluster where DRS is being configured.

This approach allows you to automate resource management while still having oversight of VM movements, providing flexibility in managing VM resources.

Why Use Ansible for VMware DRS Configuration?

Automating DRS configuration with Ansible brings several key benefits to your VMware environment:

  1. Consistency: By using Ansible playbooks, you ensure that DRS settings are applied consistently across your VMware clusters.
  2. Time Efficiency: Manually configuring DRS for multiple clusters can be time-consuming. Ansible allows you to automate this process, saving valuable time.
  3. Scalability: As your VMware environment grows, Ansible playbooks can be reused and adapted to configure DRS settings for new clusters, making your infrastructure more scalable.
  4. Automation of Complex Tasks: DRS configuration includes advanced settings like VM balancing and migration behaviors. Ansible allows you to automate these complex tasks, ensuring better resource management across your environment.
  5. Version Control: Ansible playbooks are text-based and can be stored in version control systems such as Git. This ensures you have a clear history of changes made to your infrastructure.

Full Example of an Ansible Playbook for DRS Configuration

Here’s a full example of an Ansible playbook that enables DRS, balances VMs, and configures default VM behavior for VMware clusters:

---
- name: Configure DRS on VMware Cluster
  hosts: localhost
  gather_facts: no
  tasks:
    - name: Enable DRS
      community.vmware.vmware_cluster_drs:
        hostname: '{{ vcenter_hostname }}'
        username: '{{ vcenter_username }}'
        password: '{{ vcenter_password }}'
        datacenter_name: '{{ datacenter_name }}'
        cluster_name: '{{ cluster_name }}'
        enable: true
      delegate_to: localhost

    - name: Enable DRS and distribute a more even number of virtual machines across hosts for availability
      community.vmware.vmware_cluster_drs:
        hostname: '{{ vcenter_hostname }}'
        username: '{{ vcenter_username }}'
        password: '{{ vcenter_password }}'
        datacenter_name: '{{ datacenter_name }}'
        cluster_name: '{{ cluster_name }}'
        enable: true
        advanced_settings:
          'TryBalanceVmsPerHost': '1'
      delegate_to: localhost

    - name: Enable DRS and set default VM behavior to partially automated
      community.vmware.vmware_cluster_drs:
        hostname: '{{ vcenter_hostname }}'
        username: '{{ vcenter_username }}'
        password: '{{ vcenter_password }}'
        datacenter_name: '{{ datacenter_name }}'
        cluster_name: '{{ cluster_name }}'
        enable: true
        drs_default_vm_behavior: partiallyAutomated
      delegate_to: localhost

This playbook automates the process of configuring DRS, balancing VMs across hosts, and adjusting the default VM behavior to be partially automated.

Ashutosh Dixit

I am currently working as a Senior Technical Support Engineer with VMware Premier Services for Telco. Before this, I worked as a Technical Lead with Microsoft Enterprise Platform Support for Production and Premier Support. I am an expert in High-Availability, Deployments, and VMware Core technology along with Tanzu and Horizon.

Leave a Reply