Alors que les upgrades AHV sont habituellement beaucoup plus calmes que les upgrades ESXi sur la plateforme Nutanix, je me retrouve ce matin avec une mise à jour figée vers 5.5.2. Les détails de tâches indiquent que l’opération est en cours, mais elle traîne vraiment depuis un long moment.

Le détail de la tâche en cours correspond à la mise en maintenance de l’hôte afin de déplacer les VMs qu’il héberge pour le redémarrer sans impact :

En vérifiant l’état des hôtes sur le cluster, je m’aperçois qu’il y a bien un nœud en maintenance (schedulable à False), mais ce n’est pas celui dont la mise à jour est en cours. Je le sort de maintenance, puis je rajoute celui qui est censé y être.

acli
host.list
host.exit_maintenance_mode fqdn.server
host.list #verifier l'etat de l'hôte
host.enter_maintenance_mode fqdn.server

Après cette opération, les VMs ont été déplacés automatiquement à chaud et le nœud AHV est passé en maintenance, ce qui a débloqué le reste du processus de patching.

Une des rares opérations pas vraiment transparente lorsque l’on administre des noeuds Nutanix avec ESXi comme hyperviseur concerne la mise en maintenance.

Comme vous le savez la CVM est liée au stockage local de l’hôte et ne sera pas déplacé par un vMotion pour la mise en maintenance, il faut donc l’eteindre.

Oui mais comment ? Pendant longtemps je pensais à tort qu’un “Shut Down Guest OS” était suffisant, qu’un hook avait été mis en place dans la CVM pour intercepter ce type d’ordre et proceder proprement à l’extinction. (Et en discutant autour de moi, je n’étais pas le seul à penser ça)

Sur les conseils d’un contact Nutan, j’ai ouvert un ticket au support pour en avoir le coeur net et il n’en ai rien, la seule méthode supportée consiste à se connecter à la CVM et executer la commande :

cvm_shutdown -P now

qui permet de réellement prévenir les autres noeuds du cluster que la CVM n’est plus disponible et ce point n’est pas présent via VMware.

Je vous met en lien les références Nutanix :

Shutting Down a Node in a Cluster (vSphere Web Client)

et aussi

Shutting down all nodes in a cluster for maintenance or relocation

 

Voici le script que j’utilise en ce moment pour les mises en maintenance des hôtes AHV des clusters Nutanix avec un menu à choix multiples :

Disconnect-NTNXCluster *

#Choisir le cluster 
$ClusterNut = Read-Host "Entrer the Ip or DNS name of your Nutanix Cluster to manage"

Connect-NTNXCluster $ClusterNut -AcceptInvalidSSLCerts -ForcedConnection
$Clusterlist = $null


for () {

# récupère la liste des noms d'hôtes du cluster
$Clusterlist = Get-NTNXHost

    #défini integer à 0
    $i=0

    $ClusterName = (Get-NTNXCluster).name

    Write-Host "Vous avez selectionné le cluster $($(Get-NTNXCluster).name)
    "

    # Créer un menu : Pour chaque hôte du cluster ajouter 1 à i et afficher le nom d'hôte associé
    write-host "0 : Sortir du script"
    foreach ($ht in $Clusterlist) {
        $i++
        Write-Host "$i : $($ht.Name) : état  $($ht.hypervisorState) : Hyperviseur $($ht.hypervisorAddress) : IPMI $($ht.ipmiAddress) " 
        }

    do {
    $Menu = Read-Host "Choisir le numéro d'hôte"
    #juste affichage : tant que le chiffre indiqué n'est pas un nombre d'un hôte possible on boucle ici
    if (0..$Clusterlist.Count -notcontains $Menu) {Write-Host "Merci d'indiquer le numéro correspond au noeud à mettre en maintenance" -ForegroundColor Red}
    }

    #tant que le chiffre indiqué n'est pas un nombre d'un hôte possible on boucle ici
    while (0..$Clusterlist.Count -notcontains $Menu)

    #Conserve le nom de l'hôte dans la variable ChoiceMenu le -1 sert car le count debute à 0.
    if ($menu -eq 0) {
                        #Déco
                        Disconnect-NTNXCluster *
                        exit
                      } 
    $ChoiceMenu = ($Clusterlist).name[$menu-1]
    write-host "Vous avez choisi le $ChoiceMenu"

    Write-Host -ForegroundColor Green "Choisir l'option 1 pour Mettre en Maintenance et l'option 2 pour remettre en ligne" 
    $Menu1 = Read-Host 

    if ($Menu1 -eq 1) {
        $uuid = (Get-NTNXHost | where {$_.name -like $ChoiceMenu}).uuid
        
        write-host "La tache de mise en maintenance de l'hôte $ChoiceMenu est en cours"
        Start-NTNXMaintenanceMode -Hostid $uuid -EvacuationOption LIVE_MIGRATE
        sleep 3 
        
    }

    if ($Menu1 -eq 2) {
    write-host "La tache remise en prod de l'hôte $ChoiceMenu est en cours"
    Stop-NTNXMaintenanceMode -Hostid $uuid
    sleep 3
    }
    
}