Dans les architectures Metro Availability Nutanix, la gestion des pannes est un sujet qui est souvent mal abordé dès la conception. Très régulièrement, je retrouve des environnements sans witness où le mode de gestion des défaillances est positionné en Manual, avec l’argument classique : « on n’a pas de witness, donc on préfère tout contrôler ».

Sur le terrain, c’est presque toujours une mauvaise décision.

Le mode Manual n’est pas un mode “sécurisé”. C’est un mode bloquant, qui transfère la responsabilité de la continuité de service de la plateforme vers l’humain, précisément dans les situations où l’humain est le moins efficace : incidents réseau, pannes partielles, dégradations complexes.

Pour bien comprendre pourquoi, il faut regarder ce que fait réellement la plateforme selon le mode choisi.

Dans un scénario de perte complète du site secondaire (Site B), ou de perte réseau totale vers ce site, le comportement est identique en mode Witness et en mode Automatic Resume : après expiration du délai de rupture automatique (10 secondes par défaut), Metro Availability est désactivé et les écritures reprennent sur le conteneur actif du Site A uniquement, permettant la continuité de service des VMs.

En mode Manual, en revanche, les écritures restent bloquées tant que la connectivité inter-sites n’est pas restaurée ou qu’un administrateur ne désactive pas manuellement Metro Availability. Ce blocage des écritures sur le conteneur actif entraîne un arrêt fonctionnel des VMs. Autrement dit, on transforme un incident potentiellement non bloquant en interruption de service volontaire.

Le même constat s’applique à une perte de connectivité entre les deux sites. Sans witness, le mode Automatic Resume permet, après expiration du timeout, la désactivation automatique de Metro Availability et la reprise des écritures sur le site primaire. En mode Manual, les écritures restent à nouveau bloquées indéfiniment, en attente d’une action humaine.

C’est là que l’erreur de conception apparaît : le mode Manual est souvent perçu comme un moyen de se protéger du split-brain en l’absence de witness. En réalité, il n’apporte pas de protection technique supplémentaire ; il se contente de transférer la décision à l’administrateur.

Le mode Manual permet certes d’éviter un split-brain par choix humain explicite, mais ce comportement n’est pas lié à l’absence de witness. C’est une confusion courante que de considérer le mode Manual comme le mode « naturel » ou « recommandé » lorsqu’aucun witness n’est déployé. En pratique, ce choix introduit surtout une dépendance opérationnelle immédiate, avec un impact direct sur la disponibilité.

Même dans des scénarios plus complexes — perte simultanée de la liaison inter-sites et d’un des liens vers le witness — le mode Automatic Resume reste cohérent. Il privilégie la continuité de service tant qu’un site est en mesure de fonctionner et que le stockage local reste accessible. Le mode Manual, lui, adopte une posture systématiquement conservatrice : blocage des écritures et attente d’une action humaine, y compris dans des situations où la plateforme pourrait reprendre automatiquement sans ambiguïté.

Un autre cas très parlant est celui des incidents de stockage affectant un seul site. En mode Automatic Resume, les écritures ne sont bloquées que si nécessaire, et la reprise peut s’appuyer sur une désactivation automatique de Metro Availability dès que les conditions sont réunies. En mode Manual, une intervention manuelle supplémentaire est systématiquement requise, même après résolution de l’incident, ce qui rallonge inutilement le RTO.

Ce que montrent ces scénarios, c’est que le mode Manual ne doit pas être vu comme une alternative “prudente” en l’absence de witness. Il doit être réservé à des cas très spécifiques, généralement temporaires, où l’on accepte explicitement une interruption de service pour éviter toute ambiguïté : par exemple lors d’opérations de maintenance lourdes ou de tests très encadrés.

En exploitation normale, et en particulier dans les environnements sans witness, le mode Automatic Resume est presque toujours le meilleur choix. Il permet à la plateforme de continuer à faire ce qu’elle sait faire : maintenir la disponibilité tant que les conditions le permettent, sans introduire de dépendance inutile à une action humaine immédiate.

Le witness est souvent la meilleure option lorsqu’il est disponible, car il permet une désactivation automatique et sans ambiguïté de Metro Availability, ainsi que la promotion du site secondaire en cas de perte du site primaire. Mais son absence ne justifie pas de basculer en mode Manual par défaut.

Comme souvent avec Nutanix, le problème n’est pas la fonctionnalité mais la manière dont elle est utilisée. Le mode Manual est trop souvent choisi par réflexe, pour se rassurer, pas parce qu’il répond à un besoin réel. En pratique, il n’apporte pas plus de sécurité ; il introduit surtout un point de blocage supplémentaire exactement là où l’on cherche à éviter toute dépendance humaine.

En Metro Availability, l’architecture doit être pensée pour encaisser les incidents, pas pour attendre qu’un humain décide quoi faire sous pression. Tant que la plateforme est capable de continuer à fonctionner sans ambiguïté, il n’y a aucune raison valable de l’en empêcher. Le rôle de l’architecte n’est pas de reprendre la main à chaque panne, mais de concevoir un système qui n’en a pas besoin.

Quand je fais un audit ou que je reprends un environnement Nutanix existant, il y a une situation que je rencontre beaucoup plus souvent que ce que je devrais autour des optimisations de stockage.

Pas parce que Nutanix ne fonctionne pas.
Mais parce que les options ont été activées sans réellement comprendre ce que fait déjà le stockage nativement.

Très souvent, le raisonnement est simple : « on a la licence, donc autant tout activer ». Déduplication, compression inline, parfois post-process, erasure coding, et on empile les options en espérant que la réduction de capacité suive. Dans la réalité, on obtient surtout une configuration difficile à expliquer, exploiter, des gains modestes, et parfois des comportements inattendus.

Remandations Stockage Source Cours Nutanix : Enterprise Cloud Administator

Le premier point qui revient presque systématiquement, c’est la déduplication.

La déduplication est souvent activée par réflexe, notamment sur des containers qui hébergent des serveurs applicatifs, des bases de données, et parfois même des environnements VDI en linked clone. Dans beaucoup de cas, ce choix ne repose pas sur un besoin réel, mais sur une méconnaissance du fonctionnement natif du stockage AOS, en particulier pour les snapshots et les clones.

Sur Nutanix, les snapshots et les clones ne reposent pas sur un mécanisme de déduplication post-process classique. AOS utilise un modèle de redirect-on-write basé sur les métadonnées. Un vDisk est composé de vBlocks, eux-mêmes référencés dans une block map. Lorsqu’un snapshot ou un clone est créé, le vDisk de base est marqué immutable et un nouveau vDisk est créé en lecture/écriture. Les deux partagent exactement la même block map au départ.

Il n’y a aucune copie de données, aucune écriture, aucun calcul de fingerprint. Tout se fait au niveau des métadonnées. Chaque vDisk possède sa propre block map, ce qui évite les traversées de chaînes de snapshots et les pénalités de lecture que l’on connaît sur d’autres architectures. C’est aussi ce qui permet de créer des snapshots en continu ou des clones en cascade sans impact mesurable sur les performances.

Quand un clone écrit de nouvelles données, ces écritures sont simplement ajoutées à sa propre block map. Les blocs existants restent partagés. Autrement dit, la mutualisation est déjà maximale par design.

Dans ce contexte, activer la déduplication sur des environnements de clones, de linked clones ou de VAAI clones n’apporte rien. Le gain est déjà là, sans traitement post-process, sans scan de blocs, sans consommation supplémentaire de métadonnées. On ajoute simplement une couche de complexité inutile.

Exemple Snapshot Block Map source : Nutanix Bible

La déduplication garde évidemment tout son intérêt dans d’autres scénarios : P2V, full clones, postes persistants, ou ensembles de données réellement redondantes dans le temps. Mais sur les snapshots et les clones, AOS n’a tout simplement pas besoin de ce mécanisme.

La compression est un autre sujet récurrent, mais à la différence de la déduplication, la compression inline est généralement un bon choix. Ce n’est pas un hasard si Nutanix l’active par défaut sur les nouveaux containers : elle correspond au plus large éventail de workloads rencontrés en entreprise.

Ce choix par défaut est pertinent dans la majorité des cas. La compression inline permet de réduire la quantité de données écrites et lues, ce qui diminue la pression sur le stockage et le réseau. Sur des environnements limités par l’I/O plutôt que par le CPU, ce gain peut compenser, voire dépasser, le coût de compression et améliorer les performances perçues. Pour la majorité des workloads généralistes, c’est un choix évident.

Les limites apparaissent uniquement sur des cas très spécifiques, comme certaines applications transactionnelles ou bases de données particulièrement sensibles à la latence CPU. Ces situations existent, mais elles restent minoritaires.

Dans ces cas-là, la compression post-process est souvent plus adaptée. Elle est encore trop peu utilisée alors qu’elle fonctionne très bien pour des données peu modifiées dans le temps (file servers, profils utilisateurs, vDisks majoritairement en lecture) grâce à un délai configurable qui évite tout impact sur les écritures.

En pratique, la compression inline est un excellent point de départ et restera le bon choix dans la plupart des environnements. Le problème n’est pas ce choix par défaut, mais le fait de ne plus jamais le remettre en question quand le workload sort du cadre général.

L’erasure coding est sans doute l’option la plus mal comprise. Les gains de capacité sont bien réels, mais son cadre d’utilisation est clairement défini. Nutanix le recommande principalement pour les workloads de type Files et Object Storage, ainsi que dans des environnements configurés en RF3 lorsque la réduction de l’empreinte de stockage devient un objectif réel et justifié.

En fonctionnement nominal, l’erasure coding n’a pas d’impact sur les performances de lecture ou d’écriture. En revanche, il n’est pas adapté aux workloads fortement orientés écriture ou réécriture, et il introduit une complexité supplémentaire, notamment lors des phases de reconstruction après une défaillance. Malgré cela, je l’ai vu activé “pour tester”, ou simplement parce que “ça fait gagner de la place”, sans besoin clairement identifié.

Je l’ai même rencontré sur des clusters disposant de larges marges de capacité. C’est un point essentiel à garder en tête : les optimisations de stockage ne sont jamais gratuites. Si la capacité n’est pas un problème, convertir du CPU, de la RAM et de la complexité opérationnelle en quelques gigaoctets économisés n’apporte pas de valeur.

À force d’empiler ce type de choix, on arrive souvent à une autre dérive : la multiplication des containers. Un container par combinaison de paramètres (compression, RF, chiffrement) jusqu’à obtenir une plateforme fragmentée, difficile à maintenir, et dont les règles ne sont comprises que par ceux qui l’ont initialement conçue.

Aujourd’hui, ce modèle n’est plus nécessaire.

Avec les versions récentes de Prism Central, la logique a clairement évolué vers une gestion par stratégie, et non plus par containers. Les Storage Policies permettent de définir le Replication Factor, le type de compression, le chiffrement ou encore la QoS, et de les appliquer via des catégories directement aux VMs ou aux Volume Groups.

On réduit drastiquement le nombre de containers, on rend les règles explicites, visibles, et surtout cohérentes. On arrête d’adapter l’infrastructure aux workloads, et on adapte les workloads à des stratégie claires.

Après plusieurs projets de redesign ou de remise à plat, mon constat est assez simple. Le problème n’est jamais le manque de fonctionnalités. Le problème, c’est l’idée qu’une option activée est forcément une bonne option.

Les optimisations de stockage doivent être choisies, ciblées et comprises. .Aujourd’hui, une approche basée sur moins de containers et des Storage Policies bien définies est, dans la majorité des cas que j’ai rencontrés, la solution la plus propre, la plus lisible et la plus efficace.

les optimisations applicables selon les types de workloads source : Nutanix Bible

Je profite du retour de plusieurs partenaires après ma présentation au Partner Technology Summit Nutanix (il y a déjà un moment, mais je n’ai pas posté entre temps) pour revenir sur une des recommandations qui a suscité le plus de questions : ne pas mélanger les drivers au sein d’un même bond.

Cette recommandation n’est pas sortie du chapeau ; elle s’inscrit dans nos bonnes pratiques générales pour les bonds réseau :

  • Ne mélangez pas des modèles de cartes réseau provenant de fournisseurs différents au sein d’un même bond.
  • Ne mélangez pas des cartes réseau de débits différents au sein d’un même bond.
  • Ne mélangez pas des cartes réseau utilisant des pilotes différents au sein d’un même bond.

Je la rappelle car, dans la pratique, elle est souvent ignorée.

Techniquement, certains modes de bonding tolèrent des configurations hétérogènes :

En active-backup, un seul lien est actif à un instant donné. On peut même y voir un avantage potentiel : diversifier les pilotes peut réduire l’impact d’un bug critique affectant un driver donné.

En revanche, avec des modes d’agrégation active comme balance-tcp (LACP), les exigences sont plus strictes. Pour garantir une répartition de charge stable et prévisible, les liens doivent avoir des débits identiques et un comportement pilote cohérent.

Même si certaines combinaisons sont techniquement supportées, les recommandations de bonnes pratiques restent intentionnellement prudentes. Le but est de :

  • simplifier l’exploitation quotidienne,
  • rendre les comportements réseau plus prévisibles,
  • réduire les cas difficiles à diagnostiquer en production.

Autrement dit, même si cela peut fonctionner, ce n’est pas forcément souhaitable en exploitation.

Début Octobre, lors du Partner Technology Summit (PTS) Nutanix, un partenaire m’a posé une question pertinente :

«Lors des migrations de VM Windows Server 2025, on a un souci de conservation d’adresse IP, quand est-ce que ce sera supporté ? “

Sur le moment, je n’avais pas la réponse. Après vérification et échanges techniques, voici le résultat de mes recherches et le workaround actuellement fonctionnel.

Nutanix Move est une solution de mobilité inter-hyperviseurs permettant de migrer des VMs et fichiers avec un temps d’arrêt minimal. (les règles NSX vers FSN depuis la version 6.0 !)

Move prend en charge de nombreux scénarios de migration, notamment :

  • VMware ESXi → AHV,
  • Microsoft Hyper-V → AHV,
  • AWS EC2 → AHV,
  • Microsoft Azure Cloud → AHV,
    ainsi que des flux croisés vers NC2 sur AWS ou Azure.

Move automatise l’installation des drivers VirtIO, copie la VM, et peut réaliser une configuration post-migration, dont la restauration de la connectivité réseau.

Cependant, la documentation officielle précise explicitement parmi les limitations connues :

“IP address retention for Windows if WMIC utility is not installed. For IP address retention to work, install WMIC.”

Autrement dit, si WMIC n’est pas présent sur le système source, Move désactive la rétention IP lors de la migration.

L’absence de VMIC déclenche une condition $noWMIC = True, qui désactive la restauration d’adresse IP après migration.

Extrait du script concerné :

#$noWMIC = $null -ne ($Global:NoWMICOSStrings | ? { $Global:OSInfo.Caption -match $_ })

Depuis Windows 10 21H1 et Windows Server 2025, Microsoft a retiré l’outil WMIC.exe du système par défaut.

Cette évolution renforce la sécurité et la compatibilité avec les environnements modernes, mais affecte encore certains outils tiers, comme Nutanix Move, qui s’appuient sur l’ancien exécutable pour collecter les informations réseau avant migration..

Si certaines applications ou scripts avancés utilisent encore WMIC, il est possible d’obtenir les mêmes résultats en interrogeant WMI par d’autres moyens. Microsoft recommande désormais d’utiliser PowerShell et ses cmdlets CIM/WMI (Get-CimInstance, Invoke-CimMethod, etc.), ou d’accéder directement à l’API COM WMI ou aux bibliothèques .NET (comme System.Management en C#) pour exécuter les requêtes dans le code.

Il serait donc logique que les futures versions de Nutanix Move adoptent une implémentation fondée sur PowerShell CIM/WMI, afin de restaurer durablement la fonctionnalité de rétention d’adresse IP sur Windows Server 2025.

Une méthode de contournement permet de restaurer la rétention IP statique en mode préparation manuelle (Manual Preparation Mode).
Cette approche est fonctionnelle à partir de Move 6.0.

Étapes :

  1. Installer temporairement la feature WMIC sur la VM Windows source.
    • Pour plus de détails sur la réactivation ou la réparation de WMIC et du service WMI, consultez la KB-6958 de Nutanix.
    • Vérifie la présence de WMIC : wmic os get caption
  2. Modifier le script de Move sur l’appliance.
    • Connexion SSH à la VM move.
    • srcagent-shell
    • Éditer le fichier correspondant :
      • VMware : /opt/xtract-vm/resources/uvm/win/esx_setup_uvm.ps1
      • Hyper-V : /opt/xtract-vm/resources/uvm/win/hyperv_setup_uvm.ps1
    • Commente ou supprime la ligne 321 : #$noWMIC = $null -ne ($Global:NoWMICOSStrings | ? { $Global:OSInfo.Caption -match $_ })
  3. Créer un plan de migration en Manual Preparation Mode.

Et si le partenaire qui m’a posé la question au PTS passe par ici :
je ne suis vraiment pas physionomiste, donc impossible de remettre un visage sur la discussion…
Mais j’espère que tu tomberas sur cet article, en attendant que la rétention d’adresse IP fasse officiellement son retour dans une prochaine release de Move.

Il y a quelques semaines, j’ai eu l’occasion de réaliser un audit d’infrastructure Nutanix chez un client. À première vue, rien d’inquiétant : l’environnement était bien tenu, les points relevés restaient mineurs. Bref, un contexte assez classique.

Mais en creusant un peu plus, un détail a retenu mon attention : le plan d’adressage interne du Cluster Management Services Platform (CMSP).

Le CMSP, c’est l’infrastructure de microservices déployée avec Prism Central. Il repose sur un plan d’adressage réseau réservé, indispensable au fonctionnement interne des services. Ces sous-réseaux sont invisibles de l’extérieur, mais leur stabilité conditionne toute la plateforme.

Par défaut, Nutanix réserve :

  • 10.100.0.0/16 pour le réseau pod Kubernetes
  • 10.200.32.0/24 pour le réseau services Kubernetes
  • 192.168.5.0/24 pour le réseau infrastructure Kubernetes

Avec l’audit, je me suis aperçu qu’un ces sous-réseaux est déjà utilisé côté client ce qui n’est pas une bonne pratique comme indiqué dans la documentation : https://portal.nutanix.com/page/documents/details?targetId=Prism-Central-Guide-vpc_7_3:mul-cmsp-req-and-limitations-pc-r.html

Do not use the IP addresses in the subnet 10.200.32.0/24 for operational purposes such as DNS or CVM networks. This prevents any negative impact and maintain seamless operations in the networking.

les ennuis arrivent vite : déploiement ou mise à jour qui échoue, microservices qui ne démarrent pas, comportements imprévisibles.

Bonne nouvelle : lors du déploiement, on peut personnaliser ces sous-réseaux. Et même après coup, mais la procédure doit etre réalisé par le support, ou un consultant qualifié. Mieux vaut anticiper, mais il existe donc une porte de sortie en cas de conflit découvert trop tard. https://portal.nutanix.com/kbs/15379

Dans ce cas précis, l’un des réseaux internes du client chevauchait un des sous-réseaux réservés par Nutanix. Le problème n’avait pas encore bloqué l’exploitation, mais il s’annonçait critique pour les prochaines évolutions. Et justement, le client avait déjà un ticket ouvert au support pour un souci de sauvegarde qui pourtant semblait ne pas etre lié.

Cas client : quand un conflit d’IP se déguise en problème d’authentification

Un proxy de sauvegarde voyait ses tâches échouer systématiquement au bout de 15 minutes. Seul moyen de repartir : redémarrer la VM du proxy.
Les logs Prism Central montraient des erreurs HTTP 403 et des tokens OIDC invalides. Tout laissait penser à un bug d’authentification.

La vraie cause était ailleurs : l’IP du proxy appartenait à la plage 10.100.0.0/16, réservée au CMSP. Prism Central traitait donc ses appels API comme internes, ce qui perturbait totalement le mécanisme d’authentification et cassait le renouvellement des tokens.

La résolution a été immédiate : ici on a pu réattribuer une nouvelle IP au proxy, en dehors des plages réservées . Dès ce changement appliqué, les sauvegardes sont redevenues stables.

À retenir : des symptômes applicatifs compliqués (erreurs API, tokens, authentification) peuvent avoir une cause très simple : un conflit d’adressage. Avant de déployer ou d’intégrer un service tiers avec Nutanix, toujours vérifier que les sous-réseaux réservés par la plateforme ne sont pas déjà utilisés. Cette vérification prend cinq minutes et peut éviter des heures d’investigations inutiles.