EsxiNotes

From Bitbull Wiki
Jump to navigation Jump to search

read

show VMs

vim-cmd vmsvc/getallvms | grep -v Vmid | awk '{print $1":"$2}' | grep '^[0-9]'
getAllVms(){
echo -e "ID \t PowerState \t vmName"
echo "----------------------------------"
  vim-cmd vmsvc/getallvms | grep -v Vmid | awk '{print $1":"$2}' | grep '^[0-9]' | while read vm
  do
    vmId=`echo $vm | cut -d: -f1`
    vmName=`echo $vm | cut -d: -f2`
    vmPower=`vim-cmd vmsvc/power.getstate $vmId | grep Power`
    echo -e "$vmId \t $vmPower\t $vmName"
  done
}

power

start vm

startupvmName (){
 vmName=$1
 echo "INFO: `date '+%Y.%m.%d_%H:%M'`: startup $vmName"
 echo "`vim-cmd vmsvc/getallvms | grep " $vmName " | cut -d\  -f1 | xargs vim-cmd vmsvc/power.on` $vmName"
}

shutdown vm

shutdownvmName (){
 vmName=$1
 echo "INFO: `date '+%Y.%m.%d_%H:%M'`: shutdown $vmName"
 echo "`vim-cmd vmsvc/getallvms | grep " $vmName " | cut -d\  -f1 | xargs vim-cmd vmsvc/power.shutdown` $vmName"
}

shutdown vm and wait for powerdown

shutdownWaitvmName (){
 vmName=$1
 vmId=`vim-cmd vmsvc/getallvms | grep " $vmName " | cut -d\  -f1`
 echo $vmId | grep -q '[0-9]' 
 if [ $? -ne 0 ]
 then
   echo "vm $vmName not found" 
   return 1
   exit 1
   kill -9 $$
 fi
 echo "INFO: `date '+%Y.%m.%d_%H:%M'`: shutdown and wait: $vmName"
 vim-cmd vmsvc/power.shutdown $vmId
 for i in `seq 300`
 do
   if (vim-cmd vmsvc/power.getstate $vmId | grep -q ' off')
   then
     echo
     break
   fi
   sleep 1
   echo -n .
 done
 if (vim-cmd vmsvc/power.getstate $vmId | grep -q ' on')
 then
   echo "WARNING: `date '+%Y.%m.%d_%H:%M'`: VM $vmName is still on, do poweroff now"
   vim-cmd vmsvc/power.off $vmId
 fi
}

list snapshots

listAllSnapshots(){
  vim-cmd vmsvc/getallvms | grep -v Vmid | awk '{print $1":"$2}' | grep '^[0-9]' | while read VM
  do 
    VMID=$(echo $VM | cut -d: -f1)
    vmName=$(echo $VM | cut -d: -f2)
    echo
    echo "INFO: `date '+%Y.%m.%d_%H:%M'`: snapshots of VM: $vmName ---"
    vim-cmd vmsvc/get.snapshot $VMID | egrep 'name = |createTime = ' | sed 's/createTime = /      createTime = /'
  done
}

snapshot

remove all snapshots

removeAllSnapshots(){
  vim-cmd vmsvc/getallvms | grep -v Vmid | awk '{print $1":"$2}' | grep '^[0-9]' | while read VM
  do 
    VMID=$(echo $VM | cut -d: -f1)
    vmName=$(echo $VM | cut -d: -f2)
    echo "INFO: `date '+%Y.%m.%d_%H:%M'`: search Snapshots of VM: $vmName ---"
    vim-cmd vmsvc/get.snapshot $VMID | grep -A5 'snapshot = ' | sed '/id =/!d;s/.*id = //g;s/,//g' | while read SNAPID
    do 
      echo exec: vim-cmd vmsvc/snapshot.remove $VMID $SNAPID
      vim-cmd vmsvc/snapshot.remove $VMID $SNAPID
    done
  done
  }

create snapshots

createSnapshotOfAllVms(){
  vim-cmd vmsvc/getallvms | grep -v Vmid | awk '{print $1":"$2}' | grep '^[0-9]' | while read VM
  do 
    VMID=$(echo $VM | cut -d: -f1)
    vmName=$(echo $VM | cut -d: -f2)
    echo "INFO: `date '+%Y.%m.%d_%H:%M'`: create Snapshot of VM: $vmName ---"
    echo exec: vim-cmd vmsvc/snapshot.create $VMID backup-`date '+%Y%m%d%H%M%S'` includeMemory 
    vim-cmd vmsvc/snapshot.create $VMID backup-`date '+%Y%m%d%H%M%S'`
  done
}

copy/clone

thin copy vm/folder

thincopyFolder (){
   FROM="$1"
   TO="$2"
   mkdir -p "$TO"
   echo "INFO: `date '+%Y.%m.%d_%H:%M'`: tincopy "$FROM/" "$TO/$F"
   find $FROM -type f -not -iname '*.vmdk' -exec cp -a "{}" "$TO/" \;
   find $FROM -type f -iname '*.vmdk' | while read vmdk
   do
      F=`basename $vmdk`
      vmkfstools -i "$vmdk" -d thin "$TO/$F"
   done
   echo "INFO: `date '+%Y.%m.%d_%H:%M'`: thincopy done ----------"
   ls -als "$TO/$F"
   du -hcs "$FROM" "$TO/$F"
}

networking

custom firewall rule

  • Create custom firewall rule on ESXi Server
vi /etc/vmware/firewall/syslog-1516upd.xml
<configRoot>
  <service>
    <id>syslog_1516udp</id>
    <rule id='0000'>
      <direction>outbound</direction>
      <protocol>udp</protocol>
      <porttype>dst</porttype>
      <port>1516</port>
    </rule>
    <enabled>true</enabled>
    <required>false</required>
  </service>
</configRoot>
esxcli network firewall refresh
esxcli network firewall unload
esxcli network firewall load


Component Overview

Andvanced System Settings

  • Settings are not tracked
  • ESXi Upgrade will keep all the settings

Host Profiles

  • Extract HostProfile from ESXi can export settings
(host specific values will not work for other hosts)
  • For bundling a bunch of values into a host-profile and apply them to needed hosts

vSphere HA

  • vCenter > Cluster > Configure > Services > vSphere Availability
How to handle fault tolerance (Host HW failure)

vNUMA

Numa means that memory is accessed by cpu on shortest way
Crossing NUMA nodes by VM will result in performance loss (unless OS/APP is NUMA aware)

  • less than 8 vCPUs are automatically placed on same (single) NUMA node
  • more CPUs are placed on different NUMA nodes and OS/App must be NUMA aware

CPU ready time

  • How long has a vCPU to wait for compute time within a physical cpu