Arresto corretto dell'hypervisor VMWare ESXi quando il livello di carica della batteria dell'UPS APC è critico

Sono disponibili molti articoli su come configurare PowerChute Business Edition e su come connettersi a VMWare da PowerShell, ma per qualche motivo non sono riuscito a trovare tutto in un unico posto, con una descrizione dei punti più delicati. Ma esistono.

1. ingresso

Nonostante abbiamo qualche legame con l'energia, a volte sorgono problemi con l'elettricità. È qui che entra in gioco l'UPS, ma le sue batterie, ahimè, durano poco. Cosa fare? Spegnere!

Anche se tutti i server erano fisici, le cose andavano bene e PowerChute Business Edition ci ha aiutato. Gratuito, per 5 server, il che era più che sufficiente. Su una macchina sono stati installati un agente, un server e una console. Quando la fine si avvicinava, l'agente eseguiva semplicemente un file di comando che inviava shutdown.exe /s /m ai server vicini, quindi spegneva il sistema operativo. Tutti sono vivi.
Poi è arrivato il momento delle macchine virtuali.

2. Contesto e riflessioni

Allora, cosa abbiamo? Niente di niente: un server fisico con Windows Server 2008 R2 e un hypervisor con diverse macchine virtuali, tra cui Windows Server 2019, Windows Server 2003 e CentOS. E un altro UPS: APC Smart-UPS.

Abbiamo sentito parlare di NUT, ma non siamo ancora riusciti a studiarlo; abbiamo utilizzato solo ciò che avevamo a portata di mano, ovvero PowerChute Business Edition.

L’hypervisor può spegnere da solo le sue macchine virtuali; non resta che dirgli che è ora. C'è una cosa così utile VMWare.PowerCLI, questa è un'estensione per Windows Powershell che ti consente di connetterti all'hypervisor e dirgli tutto ciò di cui hai bisogno. Sono disponibili anche molti articoli sulle impostazioni PowerCLI.

3. Il processo

L'UPS era fisicamente collegato alla porta com del server del 2008, fortunatamente era lì. Anche se questo non è importante, era possibile connettersi tramite un convertitore di interfaccia (MOXA) a qualsiasi server Windows virtuale. Inoltre, tutte le azioni vengono eseguite sulla macchina a cui è collegato l'UPS: Windows Server 2008, se non diversamente specificato. Su di esso è stato installato l'agente PowerChute Business Edition. Ecco il primo punto sottile: il servizio dell'agente deve essere avviato non dal sistema, ma dall'utente, altrimenti l'agente non sarà in grado di eseguire il file cmd.

Successivamente abbiamo installato .Net Framework 4.7. Qui è necessario un riavvio, anche se il framework non lo richiede esplicitamente dopo l'installazione, altrimenti non va oltre. Successivamente potrebbero arrivare ancora degli aggiornamenti, che dovranno essere anch'essi installati.

Successivamente abbiamo installato PowerShell 5.1. Richiede anche un riavvio, anche se non lo chiede.
Successivamente, installa PowerCLI 11.5. Una versione abbastanza recente, da qui i requisiti precedenti. Puoi farlo via Internet, ci sono molti articoli a riguardo, ma noi lo abbiamo già scaricato, quindi abbiamo semplicemente copiato tutti i file nella cartella Modules.

Controllato:

Get-Module -ListAvailable

Ok, vediamo che abbiamo installato:

Import-Module VMWare.PowerCLI

Sì, la console Powershell viene ovviamente avviata come amministratore.

Impostazioni di PowerShell.

  • Consenti l'esecuzione di qualsiasi script:

Set-ExecutionPolicy Unrestricted

  • Oppure puoi solo consentire che i certificati script vengano ignorati:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned 

  • Consenti a PowerCLI di connettersi ai server con certificati non validi (scaduti):

Set-PowerCLIConfiguration -InvalidCertificateAction ignore -confirm:$false

  • Sopprimi l'output del messaggio PowerCLI relativo all'adesione al programma di scambio di esperienze, altrimenti nel registro saranno presenti molte informazioni non necessarie:

Set-PowerCLIConfiguration -Scope User -ParticipateInCEIP $false

  • Salvare le credenziali dell'utente per l'accesso all'host VMWare in modo da non mostrarle esplicitamente nello script:

New-VICredentialStoreItem -Host address -User user -Password 'password'

Il controllo mostrerà chi abbiamo salvato:

Get-VICredentialStoreItem

Puoi anche controllare la connessione: indirizzo Connect-VIServer.

Lo script stesso, ad esempio: connesso, spento, disconnesso per ogni evenienza, sono possibili le seguenti opzioni:


    Connect-VIserver -Server $vmhost 
    Stop-VMHost $vmhost -force -Confirm:$false 
    Disconnect-VIserver $vmhost -Confirm:$false

4. Default.cmd

Lo stesso file batch avviato dall'agente APC. Si trova in "C:Programmi[ (x86)]APCPowerChute Business Editionagentcmdfiles" e all'interno:

"C:Windowssystem32WindowsPowerShellv1.0powershell.exe" -File "C:...shutdown_hosts.ps1"
Sembra che tutto sia stato configurato e controllato, abbiamo persino lanciato cmd: funziona correttamente, si spegne.

Eseguiamo un test del file di comandi dalla console APC (c'è un pulsante Test) - non funziona.

Eccolo, quel momento imbarazzante in cui tutto il lavoro svolto non ha portato a nulla.

5. Catarsi

Guardiamo il task manager, vediamo cmd lampeggia, powershell lampeggia. Diamo un'occhiata più da vicino: cmd *32 e, di conseguenza, PowerShell *32. Lo capiamo Il servizio dell'agente APC è a 32 bit, il che significa che esegue la console corrispondente.

Avviamo PowerShell x86 come amministratore e installiamo e configuriamo nuovamente PowerCLI dal passaggio 3.

Bene, cambiamo la linea di chiamata di PowerShell:

"C:Windows<b>SysWOW64</b>WindowsPowerShellv1.0powershell.exe…

6. Lieto fine!

Fonte: habr.com

Aggiungi un commento