Aim: to create 320 VMs on Nutanix NFS datastore and power on 320 VMs .
Guest VM size - Windows 7, 20G HDD on NFS, 2G mem with VmwareTools.
Number of ESX hosts - 4 ESX hosts ( 80 VMs per node)
Storage - Same ESX servers ( no additional hardware, other than Arista switch interconnecting these
ESX servers) - Compute and Storage convergence.
Script help and source: http://www.vmdev.info/?p=202, Tabrez and Steve Poitras
Vcenter before running the script:( except for the clone in local datastore, there are no VMs other than Nutanix controller VMs)
On Nutanix: - Create storage pool, container and NFS datastore - from a clean cluster.
a. Create Storage Pool
b. Create container
c. Create NFS datastore
ESXi :now sees the datastore
esxcfg-nas -l
NTNX-ctr1 is /ctr1 from 192.168.5.2 mounted available
Script to create the full clone of thick vdisk from 1Win7-Clone on NFS datastore :(1Win7-clone - has vmware tools and power budget disabled in Windows 7 so that it does not go into standby mode)
Connect-VIServer 10.2.8.59 -User administrator -Password ntnx
1. $vm = Get-VM 1Win7-clone |Get-View
2. $cloneFolder = $vm.parent
$cloneSpec = new-object Vmware.Vim.VirtualMachineCloneSpec
$cloneSpec.Location = new-object Vmware.Vim.VirtualMachineRelocateSpec
3. $cloneSpec.Location.DiskMoveType = [Vmware.Vim.VirtualMachineRelocateDiskMoveOptions]::moveAllDiskBackingsAndAllowSharing
4. $cloneSpec.Location.Transform = [Vmware.Vim.VirtualMachineRelocateTransformation]::flat
5.$global:testIterations = 320
for($i=1; $i -le $global:testIterations; $i++){
$cloneName = "Windows7-$i"
$vm.CloneVM( $cloneFolder, $cloneName, $cloneSpec ) }
The following Vcenter snapshot shows that clone creation with NFS VAAI in progress and 320 VMs being created
Maintenance:
#To Remove VM
Remove-VM Windows7-*
# To Power on
Start-VM Windows7-*
#To start VMs on specific ESX server:
Get VM-Host ip| Get-VM Windows7-*| where {$_.'PowerState' -eq "PoweredOff"} | Start-VM -RunAsync -Confirm:$false
Get VM-Host ip| Get-VM Windows7-*| where {$_.'PowerState' -eq "Suspended"} | Start-VM
#Migrate VM: (DRS should do it when powering on)
Guest VM size - Windows 7, 20G HDD on NFS, 2G mem with VmwareTools.
Number of ESX hosts - 4 ESX hosts ( 80 VMs per node)
Storage - Same ESX servers ( no additional hardware, other than Arista switch interconnecting these
ESX servers) - Compute and Storage convergence.
Script help and source: http://www.vmdev.info/?p=202, Tabrez and Steve Poitras
Vcenter before running the script:( except for the clone in local datastore, there are no VMs other than Nutanix controller VMs)
On Nutanix: - Create storage pool, container and NFS datastore - from a clean cluster.
a. Create Storage Pool
b. Create container
c. Create NFS datastore
ESXi :now sees the datastore
esxcfg-nas -l
NTNX-ctr1 is /ctr1 from 192.168.5.2 mounted available
Script to create the full clone of thick vdisk from 1Win7-Clone on NFS datastore :(1Win7-clone - has vmware tools and power budget disabled in Windows 7 so that it does not go into standby mode)
Connect-VIServer 10.2.8.59 -User administrator -Password ntnx
1. $vm = Get-VM 1Win7-clone |Get-View
2. $cloneFolder = $vm.parent
$cloneSpec = new-object Vmware.Vim.VirtualMachineCloneSpec
$cloneSpec.Location = new-object Vmware.Vim.VirtualMachineRelocateSpec
3. $cloneSpec.Location.DiskMoveType = [Vmware.Vim.VirtualMachineRelocateDiskMoveOptions]::moveAllDiskBackingsAndAllowSharing
4. $cloneSpec.Location.Transform = [Vmware.Vim.VirtualMachineRelocateTransformation]::flat
5.$global:testIterations = 320
for($i=1; $i -le $global:testIterations; $i++){
$cloneName = "Windows7-$i"
$vm.CloneVM( $cloneFolder, $cloneName, $cloneSpec ) }
Explanation:
1. Get-View of our clone master
2. use same datastore as clone
3. allow sharing - To create full clone by copying all disks (but not snapshot metadata),
from the root to the child-most disk, except for non-child-most disks
previously copied to the target
4.flat -causes it to be created as a thick disk
5. from 1 to 320 creates Windows7-$num with clone spec defined.
The following Vcenter snapshot shows that clone creation with NFS VAAI in progress and 320 VMs being created
Maintenance:
#To Remove VM
Remove-VM Windows7-*
# To Power on
Start-VM Windows7-*
#To start VMs on specific ESX server:
Get VM-Host ip| Get-VM Windows7-*| where {$_.'PowerState' -eq "PoweredOff"} | Start-VM -RunAsync -Confirm:$false
Get VM-Host ip| Get-VM Windows7-*| where {$_.'PowerState' -eq "Suspended"} | Start-VM
#Migrate VM: (DRS should do it when powering on)
$global:testIterations = 80
for($i=1; $i -le $global:testIterations; $i++){
Get-VM -Name Windows7-$i | Move-VM -Destination (Get-VMHost 10.2.8.51) -RunAsync
}$global:testIterations = 240
for($i=161; $i -le $global:testIterations; $i++){Get-VM -Name Windows7-$i | Move-VM -Destination (Get-VMHost 10.2.8.53) -RunAsync
}
for($i=1; $i -le $global:testIterations; $i++){
Get-VM -Name Windows7-$i | Move-VM -Destination (Get-VMHost 10.2.8.51) -RunAsync
}$global:testIterations = 240
for($i=161; $i -le $global:testIterations; $i++){Get-VM -Name Windows7-$i | Move-VM -Destination (Get-VMHost 10.2.8.53) -RunAsync
}
$global:testIterations = 320
for($i=241; $i -le $global:testIterations; $i++){Get-VM -Name Windows7-$i | Move-VM -Destination (Get-VMHost 10.2.8.54) -RunAsync
}
# Get IP from VM to see if it is booted (vmware tools need to be installed ) -
Get-VM NTNX* |where {$_.'PowerState' -eq "PoweredOn"}| %{
write-host $_.Guest.IPAddress[0]}
10.2.8.59
10.2.8.60
10.2.8.55
10.2.8.56
10.2.8.57
10.2.8.58
$global:count = 0
Get-VM Windows7-* |where {$_.'PowerState' -eq "PoweredOn"}| %{
$ip = $_.Guest.IPAddress[0]
if ($ip -ne " ") { write-host $ip
$global:count +=1
}}
write-host "Count of IPs is " $global:count
169.254.165.80
169.254.104.109
169.254.11.254
169.254.248.101
169.254.239.204
169.254.186.164
169.254.127.112
169.254.24.136
169.254.123.158
169.254.129.15
169.254.212.87
169.254.47.86
Count of VMs with ip is 320 ( monitor upto 320 is up)
for($i=241; $i -le $global:testIterations; $i++){Get-VM -Name Windows7-$i | Move-VM -Destination (Get-VMHost 10.2.8.54) -RunAsync
}
# Get IP from VM to see if it is booted (vmware tools need to be installed ) -
Get-VM NTNX* |where {$_.'PowerState' -eq "PoweredOn"}| %{
write-host $_.Guest.IPAddress[0]}
10.2.8.59
10.2.8.60
10.2.8.55
10.2.8.56
10.2.8.57
10.2.8.58
to get count:
$global:count = 0
Get-VM Windows7-* |where {$_.'PowerState' -eq "PoweredOn"}| %{
$ip = $_.Guest.IPAddress[0]
if ($ip -ne " ") { write-host $ip
$global:count +=1
}}
write-host "Count of IPs is " $global:count
<snippet>
169.254.127.112169.254.165.80
169.254.104.109
169.254.11.254
169.254.248.101
169.254.239.204
169.254.186.164
169.254.127.112
169.254.24.136
169.254.123.158
169.254.129.15
169.254.212.87
169.254.47.86
Count of VMs with ip is 320 ( monitor upto 320 is up)