forked from PowerCLIGoodies/DRSRule
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathAbout_DRSRule.help.txt
171 lines (125 loc) · 7.69 KB
/
About_DRSRule.help.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
TOPIC
about_DRSRule
SHORT DESCRIPTION
The DRSRule module allows you to work with all types of vSphere DRS rules.
The module works with affinity/anti-affinity VM rules and VM to VMHost rules.
The module provides support for VM and VMHost groups.
LONG DESCRIPTION
The DRSRule module was written to provide PowerShell support for all types
of DRS rules that are available. The module leverages some of the VMware PowerCLI
cmdlets, and requires that PowerCLI is installed on the Windows machine on which the
DRSRule module shall be used.
DRSRule CMDLETS
The DRSRule module contains the following cmdlets.
New-DrsVMGroup Create a DRS VM group
New-DrsVMHostGroup Create a DRS VMHost group
New-DrsVMToVMHostRule Create a DRS VM to VMHost rule
New-DrsVMToVMRule Create a DRS VM to VM rule
Get-DrsVMGroup Retrieve DRS VM groups
Get-DrsVMHostGroup Retrieve DRS VMHost groups
Get-DrsVMToVMHostRule Retrieve DRS VM to VMHost rules
Get-DrsVMToVMRule Retrieve DRS VM to VM rules
Set-DrsVMGroup Change a DRS VM group
Set-DrsVMHostGroup Change a DRS VMHost group
Set-DrsVMToVMHostRule Change a DRS VM to VMHost rule
Set-DrsVMToVMRule Change a DRS VM to VM rule
Remove-DrsVMGroup Remove a DRS VM group
Remove-DrsVMHostGroup Remove a DRS VMHost group
Remove-DrsVMToVMHostRule Remove a DRS VM to VMHost rule
Remove-DrsVMToVMRule Remove a DRS VM to VM rule
Export-DrsRule Save all DRS groups and rules to a JSON file
Import-DrsRule Import DRS groups and rules from a JSON file
DRS Group and Rule Concept
In vSphere DRS you can define "rules" that control the placement of virtual machines
on hosts within a cluster.
There are 2 types of rules:
- affinity/anti-affinity rules between individual virtual machines
- affinity/anti-affinity rules between groups of virtual machines and groups of hosts in a cluster
The rules that define affinity/anti-affinity between a group of virtual machines and a group of hosts,
can be a requirement ("shall") or a preference ("should")
QUICK START
To execute any of the following cmdlets from the DRSRule module, you need
- to have loaded the PowerCLI module
- to be connected to a vCenter
The following command create a DRS VM affinity rule, on a cluster called MyCluster, between two virtual machines, called vm1 and vm2.
The rule will be enabled.
New-DrsVMToVMRule -Name 'Affinity Rule' -Cluster MyCluster -VM vm1,vm2 -KeepTogether -Enabled
To create a VM anti-affinity rule, the KeepTogether switch needs to be set to $False.
New-DrsVMToVMRule -Name 'Anti-affinity Rule' -Cluster MyCluster -VM vm1,vm2 -KeepTogether:$false -Enabled
If you want to change a DRS VM to VM rule, for example to replace virtual machine vm2 by another virtual machine called vm3,
you can do the following
Get-DrsVMToVMRule -Name 'Affinity Rule' | Set-DrsVMToVMRule -VM vm1,vm3
First you retrieve the rule, then you pass the DrsRule object over the pipeline to the Set-DrsVMToVMRule cmdlet.
When a DRS VM to VM rule is not needed anymore, you can easily remove it.
Get-DrsVMToVMRule -Name 'Affinity Rule' | Remove-DrsVMToVMRule -Confirm:$false
Note that you will be prompted for a confirmation, if you leave out the Confirm switch.
Another type of DRS rules handles connecting a group of virtual machines to a group of ESXi hosts.
To use such a DRS VM to VMHost rule, you will first need to create the groups.
A DRS VM group can contain one or more virtual machines.
New-DrsVMGroup -Name 'VM Group' -VM vm1,vm2 -Cluster cluster1
As with all cmdlets in the DRSRule that have a New verb, the newly created group will be displayed.
Name Cluster UserCreated VM
---- ------- ----------- --
VM Group Cluster1 True {VM1, VM2}
You can change these groups with the following cmdlet
Get-DrsVMGroup -Name 'VM Group' | Set-DrsVMGroup -VM vm3 -Append
The use of the Append switch determines if the virtual machines that you specify on the VM parameter will be added to
the virtual machines that are already defined in the group, or if they will replace the virtual machines.
The ouput for the previous line will be
Name Cluster UserCreated VM
---- ------- ----------- --
VM Group Cluster1 True {VM1, VM2, VM3}
In a similar way you can create a DRS VMHost group
New-DrsVMHostGroup -Name 'VMHost Group' -VMHost esx1*,esx2* -Cluster cluster1
Notice how the values we pass on the VMHost parameter contain a masking character. This avoids having the type the full
vmhost name. On the console you will see
Name Cluster UserCreated VMHost
---- ------- ----------- --
VMHost Group Cluster1 True {esx1.local.test, esx2.local.test}
Now that we have a VM and a VMHost group, we can create a DRS VM to VMHost rule.
If we want these virtual machines to always run on these ESXi nodes, we can define a DRS rule as follows.
$ruleSplat = @{
Name = 'Required Affinity'
AffineHostGroupName = 'VMHost Group'
VMGroupName = 'VM Group'
Cluster = 'cluster1'
Mandatory = $True
}
New-DrsVMToVMHostRule @ruleSplat
Notice how we used 'splatting' to specify the parameters for the cmdlet.
This example creates a required VM to VMHost rule, that is accomplished by the Mandatory switch.
If we want to change the rule we created in the previous example, we have a couple of options.
We can retrieve the rule, remove it and then create the new DRS VM to VMHost rule.
Get-DrsVMToVMHostRule -Name 'Required Affinity' | Remove-DrsVMToVMHostRule -Confirm:$False
$ruleSplat = @{
Name = 'Required Affinity'
AffineHostGroupName = 'VMHost Group'
VMGroupName = 'VM Group'
Cluster = 'cluster1'
Mandatory = $True
Enabled = $False
}
New-DrsVMToVMHostRule @ruleSplat
Or we can use the Set cmdlet.
Set-DrsVMToVMHostRule -Name 'Required Affinity' -Enabled:$False
But there is a third option, where the Force switch allows you to replace an existing DRS rule directly with the New cmdlet.
$ruleSplat = @{
Name = 'Preferred AntiAffinity'
AntiAffineHostGroupName = 'VMHost Group'
VMGroupName = 'VM Group'
Cluster = 'cluster1'
Mandatory = $False
Force = $True
}
New-DrsVMToVMHostRule @ruleSplat
There are many occasions where you want to be able to export and import your DRS groups and rules.
The DRSRule module provides this functionality with two cmdlets. These cmdlets use a JSON file to store and
retrieve your DRS rules and groups.
To export your DRS rules and groups, you can do
Export-DrsRule -Cluster cluster1 -Path drs.json
This will export all DRS rules and groups that are defined on Cluster1, to a JSON file in your current directory.
To import these DRS rules and groups, you can do
Import-DrsRule -Path drs.json -Cluster cluster1
SEE ALSO
https://pubs.vmware.com/vsphere-55/topic/com.vmware.vsphere.resmgmt.doc/GUID-FF28F29C-8B67-4EFF-A2EF-63B3537E6934.html
http://blog.pluralsight.com/vmware-storage-drs-rules