EsxiNotes

From Bitbull Wiki
Jump to navigation Jump to search

1 read

1.1 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
}

2 power

2.1 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"
}

2.2 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"
}

2.3 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
}

2.4 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
}

3 snapshot

3.1 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
  }

3.2 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
}

4 copy/clone

4.1 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"
}

5 networking

5.1 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


6 Component Overview

6.1 Andvanced System Settings

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

6.1.1 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

6.2 vSphere HA

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

6.3 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

6.4 CPU ready time

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