Comprobar sincronización horaria en nuestros ESXi

Desde luego, un tema muy a tener en cuenta cuando empezamos a desplegar nuestro entorno vSphere, es cómo vamos a sincronizar la hora de nuestra infraestructura virtual. En caso de sufrir un apagón, las VMs de nuestra infraestructura cogerían la hora de los hosts, por lo que convierte en algo crítico tener nuestros hosts ESXi sincronizados.

VMware recomienda sincronizar los hosts mediante un servidor NTP, y las VMs podemos mantenerlas sincronizadas contra los hosts a través de las VMTools. Si no disponemos en nuestra organización de un servidor NTP, podemos apuntar los hosts contra un servicio NTP externo. Hay una gran variedad de servidores NTP gratuitos en internet. VMware nos aporta tres pools que podemos usar:

0.vmware.pool.ntp.org
1.vmware.pool.ntp.org
2.vmware.pool.ntp.org

Una vez configurado el servidor NTP en nuestra infraestructura, habría que comprobar que los servidores están sincronizados. Esto puede volverse algo costoso cuando el número de ESXi empieza a ser considerable. Os dejo un script en powercli que comprueba la sincronización de todos los hosts inventariados en un vCenter. Espero que os sea de utilidad.

Add-PSSnapin VMware.VimAutomation.Core
$VCENTER = "1.1.1.1" # Dirección IP o hostname de nuestro vCenter
$USER = 'usuario' 
$PASS = 'password'
## Conexion a vCenter #########################################################
Connect-VIServer -server $VCENTER -user $USER -password $PASS |out-null

## Comprobamos que la hora de todos los ESXi no se desvía más de 5 segundos ###
$COUNT = 0
$diferencia_seg = 5
get-view -ViewType HostSystem -Property Name, ConfigManager.DateTimeSystem | %{
$dts = get-view $_.ConfigManager.DateTimeSystem
$t = $dts.QueryDateTime()
$s = ( $t - [DateTime]::UtcNow).TotalSeconds
if( $s -gt $diferencia_seg){
    $row = "" | select HostName, Seconds
    $row.HostName = $_.Name
    $row.Seconds = $s
    $row
    $COUNT++
    }
}
if(!$COUNT){
    write-host "Todos los host están por debajo de $diferencia_seg segundos"
    Disconnect-VIServer -server $VCENTER -confirm:$false
    }
else{
    write-host "ERROR: Hay hosts desincronizados más de $diferencia_seg segundos"
    Disconnect-VIServer -server $VCENTER -confirm:$false
    }