Client NUT pour ESXi 5 et 6

Dans un précédent article je vous présentait un client NUT natif pour éteindre automatiquement un serveur VMWare ESXi 4 sur une alerte onduleur. La solution présentée n’était pas compatible avec ESXi 5 dont l’architecture logicielle a évoluée. Voici une solution pour intégrer un client NUT natif à vSphere Hypervisor  (ESXi 5.0, 5.1, 5.5, 6.0 et 6.5 testées). Le client NUT est désormais intégré et peut être contrôlé et paramétré depuis vSphere Client.

Mise à jour du 29/01/2017 : La version 2.0 du client NUT a été largement repensé pour mieux s’intégrer dans l’architecture VMware ESXi. Les modifications suivantes ont été apportées :

  • Le client s’appelle désormais NutClient dans la liste des services
  • Les règles de firewall portent le nom de NutServer
  • Le fichier VIB respecte le standard CommunitySupported pour les versions 6.x de ESXi. Pour les versions 5.x il faudra toujours forcer l’installation avec l’option –no-sig-check
  • Le VIB est indépendant, il n’est plus nécessaire d’utiliser les scripts d’installation pour déployer le VIB. Vous pouvez utiliser les outils de déploiement de VMWare. Les scripts servaient à créer les variables UserVars.Nut* c’est désormais intégré dans le VIB.
  • Le client prend en charge les connexions SSL en utilisant la librairie LibreSSL 2.5.0 mais la validité du certificat du serveur NUT n’est pas contrôlé.
  • L’état du service est désormais correctement remonté dans l’interface d’administration vCenter ou le client HTML après un reboot de l’hyperviseur
  • Si les variables de configuration n’apparaissent pas dans l’interface d’administration après l’installation, lancez la commande /etc/init.d/hostd restart sur l’hyperviseur. Attention à ne pas avoir de jobs en cours si vous faites ça (prise de snapshot, VMotion, …).

 

Principe

La procédure consiste à installer dans l’hyperviseur les binaires et scripts nécessaires à la réception des alertes onduleur. Je reprend le schéma des connexions qui ne change pas.

Câblage Onduleur

Câblage Onduleur

Cette solution n’est pas officiellement supportée par VMWare et elle ne s’applique qu’à des hyperviseurs standalone. Elle ne peut pas convenir pour des fermes d’hyperviseurs sous le contrôle d’un VMWare vCenter. Seul le client NUT est ajouté à l’hyperviseur, l’onduleur doit être surveillé par un serveur NUT.

Évolutions par rapport à ESXi 4

Les différences qui font que la solution pour ESXi 4 ne fonctionne pas sous ESXi 5 :

  • La méthode d’installation utilise un fichier VIB (vSphere Installation Bundle). Les binaires qu’il contient correspondent à un client nut 2.7.4 (upsmon et upsc)
  • Dans /etc/passwd, l’utilisateur nobody n’existe plus. Le client tourne désormais avec le compte daemon.
  • Le module VIB ne respecte pas les préconisations de sécurité imposées par VMWare. Vous perdez le support de VMWare en installant ce package. Je bricole pour mes besoins personnels en utilisant une licence gratuite de ESXi sans support, j’ai donc ignoré cette restriction.

Téléchargement du module

L’installation se fait en ligne de commande sur l’hyperviseur : un fichier TAR compressé doit être déposé sur l’hyperviseur.

Téléchargez ici le fichier NutClient-ESXi-2.0.0.tar.gz (6003 téléchargements)

Installation

Activez l’accès ssh à votre host ESXi si ce n’est pas déjà fait. Cela est fait à partir du client vSphere ou de la console. A partir du client : dans l’inventaire choisissez votre hôte ESXi, onglet configuration, dans la liste Logiciel choisir profil de sécurité, dans services cliquez sur propriétés…, choisissez SSH puis options et enfin démarrer. Le service ssh sera actif jusqu’au prochain reboot de l’hyperviseur si vous ne le désactivez pas.

Copiez le fichier NutClient-ESXi-2.0.0.tar.gz dans le répertoire /tmp du host ESXi. Ici je vous  donne l’exemple  depuis une machine linux (remplacez 10.0.0.8 par l’adresse IP du host ESXi ou son nom FQDN). Depuis Windows vous pouvez utiliser l’outil gratuit WinSCP.

[root@linux ~]# scp NutClient-ESXi-2.0.0.tar.gz root@10.0.0.8:/tmp
The authenticity of host '10.0.0.8 (10.0.0.8)' can't be established.
RSA key fingerprint is 89:49:ce:6d:... ...:40:76:7a:4a:fe.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '10.0.0.8' (RSA) to the list of known hosts.
Password: (saisir le mot de passe administrateur ESXi)
NutClient-ESXi-2.0.0.tar.gz          100%  671KB  1.9MB/s   00:00

Passez votre hyperviseur au niveau d’acceptance Communauté si ce n’est pas déjà fait !

Connectez-vous root en ssh à l’hôte ESXi et tapez la suite de commandes suivantes pour installer le VIB (l’opération peu être longue si votre système est installé sur une clé USB lente) :

~ # cd /tmp
/tmp # tar -xzf NutClient-ESXi-2.0.0.tar.gz
/tmp # sh upsmon-install.sh
Installation Result
   Message: Operation finished successfully.
   Reboot Required: false
   VIBs Installed: Margar_bootbank_upsmon_2.7.4-2.0.0
   VIBs Removed:
   VIBs Skipped:

Vous n’avez pas besoin de rebooter pour commencer à utiliser le client NUT sur votre système. Vous devez toutefois le configurer avant son premier lancement.

Vous pouvez supprimer les fichier qui ont été créés dans /tmp et désactiver le service SSH

Configuration

A l’aide de vSphere Client, rendez-vous dans l’onglet configuration de l’hôte ESXi. Sélectionnez les paramètres avancés et sélectionnez les UserVars. Vous avez 6 variables à configurer :

Configuration du client NUT sous ESXi 5

Configuration du client NUT sous ESXi 5

  • UserVars.NutUpsName : Nom de l’onduleur sur le serveur NUT (sous la forme nom_onduleur@nom_ou_ip_serveur). Plusieurs onduleurs peuvent être saisis séparés par un espace. Il n’y aura pas d’arrêt système tant que le dernier onduleur encore debout n’aura pas donné l’ordre d’arrêt.
  • UserVars.NutUser : Nom du compte de connexion au serveur NUT
  • UserVars.NutPassword : Mot de passe du compte de connexion au serveur NUT
  • UserVars.NutFinalDelay : Secondes qu’il faudra attendre après la réception de l’événement batterie faible pour procéder à l’arrêt du système
  • UserVars.NutSendMail : A mettre à 1 pour que le client NUT envoie un e-mail à chaque évènement important de l’onduleur
  • UserVars.NutMailTo   : Adresse e-mail à laquelle envoyer les évènements de l’onduleur

Notez qu’à chaque modification de ces paramètres il sera nécessaire de faire un arrêt/relance du service pour leur prise en compte.

Lancement du service

A l’aide de vSphere Client, rendez-vous dans l’onglet configuration de l’hôte ESXi. Sélectionnez les profils de sécurité et les propriétés des services :

Services-ESXi5

Client NUT dans les services ESXi 5

Dans les options du service Network UPS Tools Client, choisissez le mode de démarrage (Démarrer et arrêter avec l’hôte me semble un bon choix). Vous pouvez également le démarrer immédiatement ou l’arrêter.

NutClientService-ESXi5

Configuration du lancement de NUT Client

Astuces

Utilisez l’onglet de configuration du host ESXi dans vSphere Client pour décider de l’ordre de démarrage et d’arrêt (ou suspension) des machines virtuelles. Cet ordre sera respecté par la procédure d’arrêt sur alerte onduleur.

L’arrêt propre des OS dans les machines virtuelles n’est possible que si les vmware tools sont installées.

Pour désinstaller le client NUT, utilisez le script upsmon-remove qui se trouve dans le fichier que vous avez téléchargé :

/tmp # sh upsmon-remove

Pour estimer le temps nécessaire au serveur pour s’éteindre sur alerte onduleur tapez la commande « /opt/nut/sbin/upsmon -c fsd » sur le host ESXi (par ssh ou sur la console). La procédure d’arrêt est immédiatement lancée.

 

VN:F [1.9.22_1171]
Evaluation: 4.6/5 (26 votes exprimés)
Client NUT pour ESXi 5 et 6, 4.6 out of 5 based on 26 ratings

407 réflexions sur « Client NUT pour ESXi 5 et 6 »

    • DO NOT REBOOT

      You can set them like this:

      esxcli system settings advanced set -o /UserVars/NutUpsName -s « nameofupsinnut@10.3.3.1 »
      esxcli system settings advanced set -o /UserVars/NutUser -s « user »
      esxcli system settings advanced set -o /UserVars/NutPassword -s « pass »
      esxcli system settings advanced set -o /UserVars/NutFinalDelay -i 15

      VA:F [1.9.22_1171]
      Evaluation: 0 (sur 0 votes)
  1. Rene – thank you for this! Is it possible to expand this to include the upssched tool as well? I would like to power off my ESXi hosts as soon as the ONBATTERY event happens vs waiting for the LOWBATTERY trigger. It seems only the upssched tool will allow me to do this by calling it in the NOTIFYCMD line in the upsmon.conf.

    VA:F [1.9.22_1171]
    Evaluation: 0 (sur 0 votes)
    • Forgive me, I forgot to mention the ending detail, which is the requirements of adding the upssched tool – this would allow using the NOTIFYCMD line in the upsmon.conf to specify upssched to call specific actions instead of just logging the event.

      VA:F [1.9.22_1171]
      Evaluation: 0 (sur 0 votes)
      • I understand your need Shawn but running an shutdown on ONBATT event is risky. I have many micro power cuts of less than half a second that UPS can handle with no problem at all. It would make more harm than benefit. Can you consider modifying the LOWBATT threshold (if your UPS allow it to be configured) ? Adding upssched is not really a problem. The problem is to pass upssched a configuration file.

        VN:F [1.9.22_1171]
        Evaluation: 0 (sur 0 votes)
        • Rene – yes I had heard that concern as well. I believe upssched allows the ability to wait a time before taking action: OB Trigger -> Wait 90 seconds -> Trigger Shutdown. But I’m not extremely familiar as I just started playing with this. I am looking into the LB threshold as an option, I want to be sure its not going to shutdown the primary system connected to the UPS.

          VA:F [1.9.22_1171]
          Evaluation: 0 (sur 0 votes)
          • Ok so I had a chance to test out changing the low battery timer – unfortunately it did as I feared and also shutdown the local machine it was attached to. I’m not sure there is a way I’ll be able to achieve my desired result without using the upssched function. Do you have the basis for the code you put together in a repo? Perhaps I can try to dig in, understand, and make some adjustments?

            VA:F [1.9.22_1171]
            Evaluation: 0 (sur 0 votes)
        • my ups is APC BR1000G
          upsc vars:
          battery.charge: 33
          battery.charge.low: 10
          battery.charge.warning: 50
          battery.date: 2001/09/25
          battery.mfr.date: 2017/12/04
          battery.runtime: 168
          battery.runtime.low: 120
          battery.type: PbAc
          battery.voltage: 26.2
          battery.voltage.nominal: 24.0
          10% of the power is not enough to shut down the system. How can I set it up?

          VA:F [1.9.22_1171]
          Evaluation: 0 (sur 0 votes)
          • Well this depends on your UPS. This value is stored in the UPS and, in most cases, is configurable. On your nut server, use command upsrw to get the configurable parameter list and get/set possible values. I own several UPSes, some will have a battery.charge.low parameter and others a battery.runtime.low parameter. The first is a percent of the battery charge (as yours) before sending the LOW BATT event, the second are the remaining seconds estimated by the UPS. This is out of scope of the ESXi NUT client. You need to use a full NUT server installation to configure that.

            VN:F [1.9.22_1171]
            Evaluation: 0 (sur 0 votes)
  2. Bonjour,
    Merci pour ce tutoriel très clair.
    J’utilise le service NUT de FreeNas pour la partie serveur et je viens de mettre en oeuvre le client 2.0.0 sur un hôte ESXi 5.5U3. Y a-t-il un moyen de tester la communication entre le client et le serveur ou l’UPS via le serveur, autre que de faire le test de défaut d’alimentation secteur?
    Par ailleurs, mon hôte de production est sous ESXi 6.7 U1 (avec licence essentials). avez-vous pu tester le NutClient ESXi 2.0.0 dans cet environnement?

    VA:F [1.9.22_1171]
    Evaluation: 0 (sur 0 votes)
    • Le client fonctionne avec ESXi 6.7. Pour tester la communication il est possible de regarder dans les logs de serveur. La connexion devrait apparaître. Sinon il y a aussi la syslog de ESXi où la connexion au serveur NUT devrait apparaître.

      VN:F [1.9.22_1171]
      Evaluation: 0 (sur 0 votes)
  3. Thanks for the tutorial. Is there any way to check if connection to NUT server is ok, or to view notify comands? I see there is NutSendMail option, but I can’t configure smtp on Esxi I think.

    VA:F [1.9.22_1171]
    Evaluation: 0 (sur 0 votes)
    • Check server connection on NUT server log. You should see the incoming ESXi connection. The embedded mail client will use the DNS MX record to send the mail directly to destination address. It’s just a very simple smtp mail client.

      VN:F [1.9.22_1171]
      Evaluation: 0 (sur 0 votes)
      • Thanks for the fast reply. I added -r option in notify.sh to point at my relayed mail server in the network, instead of default domain . Now it’s working perfectly.

        VA:F [1.9.22_1171]
        Evaluation: 0 (sur 0 votes)
  4. Thanks for your article, I followed it to install and configure my ESXi 6.7u1 as NUT client.
    It works.

    VA:F [1.9.22_1171]
    Evaluation: 0 (sur 0 votes)
  5. Hello,
    Thank you very much I have this package installed on an ESXi 6.7U1 server and it shutdown just fine! But there is a problem with notify.sh. smtpblast does not like the $FROM when it is passed to it. I edited notify.sh to have this line which works:
    FROM= »$(hostname -s)@$(hostname -d) »
    Also I wanted to receive an email when communication was lost so I added script into /etc/rc.local.d/local.sh to modify upsmon.conf.template with « NOTIFYFLAG NOCOMM SYSLOG+EXEC » which works. Many thanks.

    VA:F [1.9.22_1171]
    Evaluation: 0 (sur 0 votes)
  6. I tried to install it on two different ESXi 6.7 instances, unfortunately it doesnt seem to work.
    I couldnt test the installation, because there’s no « upsc » binary nor « /etc/ups » folder created during installation.

    VA:F [1.9.22_1171]
    Evaluation: 0 (sur 0 votes)
  7. Thanks for sharing. I’ve installed following the guidelines and can set the 6 parameters in ESXi.
    To check the connection to the NUT server (for me Freenas 11) I’m logged in as root to ESXi (6.0) and trying:
    upsc [ups name]@192.168.2.80
    but the result is:
    -sh: upsc: not found

    Could you give me some pointers about how to troubleshoot?
    Thanks!

    VA:F [1.9.22_1171]
    Evaluation: 0 (sur 0 votes)
    • The upsc command is now located in /opt/nut/bin/upsc just enter the full path. This is for compliance with ESXi 6.x guidelines for third party packages

      VN:F [1.9.22_1171]
      Evaluation: 0 (sur 0 votes)
  8. J’ai suivi ton tuto et il fonctionne parfaitement sur 6.7.
    J’ai tapé la commande et cela donne un paquet d’infos.

    Merci pour le partage.

    VA:F [1.9.22_1171]
    Evaluation: 0 (sur 0 votes)
  9. I have tried installing and uninstalling several times. Runng the upsc command throws the following error:
    upsc: line 1: syntax error: unexpected « ( »

    It looks like some how I’m gretting file corruption?

    VA:F [1.9.22_1171]
    Evaluation: 0 (sur 0 votes)
    • That is very strange. It looks like it tries to start upsc as a shell script but it is a binary executable. Can you compare the checksum of the files executing command:
      md5sum /opt/nut/bin/*
      you should get this exact answer if you are using upsmon-2.7.4-2.0.0
      f61940b4368c933acb1915f6478d941d /opt/nut/bin/smtpblast
      fb9fe030333f32c47dcb2f95a11860c2 /opt/nut/bin/upsc

      VN:F [1.9.22_1171]
      Evaluation: 0 (sur 0 votes)
      • Thanks!
        The checksums are both correct (identical to the post above).
        To clarify I am at /opt/nut/bin and these are the errors I get:
        [root@localhost:/opt/nut/bin] upsc
        -sh: upsc: not found

        [root@localhost:/opt/nut/bin] sh upsc jamesups@192.168.2.80
        upsc: line 1: syntax error: unexpected « ( »

        [root@localhost:/opt/nut/bin] upsc jamesups@192.168.2.80
        -sh: upsc: not found

        VA:F [1.9.22_1171]
        Evaluation: 0 (sur 0 votes)
        • Ah ah, now I understand. Don’t call it with sh, it is not a shell script. /opt/nut/bin is not in the PATH variable you must give the path like this : /opt/nut/bin/ups or ./upsc if you are already in this directory

          VN:F [1.9.22_1171]
          Evaluation: 0 (sur 0 votes)

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *