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

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.

Lors d’une session de formation partenaire chez Nutanix, un problème a fréquemment été soulevé par de nombreux consultants présents : le non-fonctionnement de l’option de déploiement automatique en masse des Nutanix Guest Tools (NGT) via Prism Central. Ce sujet est crucial car le déploiement des NGT est souvent une étape essentielle dans l’optimisation des environnements Nutanix.

La nécessité d’utiliser le port 2074 pour la communication réseau est bien connue, car avant la version AOS 6.6, les machines virtuelles (VMs) avaient besoin de communiquer avec les Controller VMs (CVMs) via ce port, ce qui pouvait représenter une contrainte significative dans certains environnements.

Cependant, il existe également des prérequis spécifiques liés au système d’exploitation invité (Guest OS) qui ne sont pas toujours clairement indiqués. Bonne nouvelle : ces contraintes sont allégées avec la sortie de la version AOS 6.6.

Pour ceux qui déploient des serveurs Windows, il y a une autre considération technique à prendre en compte : Windows Remote Manager Service (WinRM). Selon la documentation officielle de Nutanix :

Note: Windows Remote Manager Service (winrm) is required to install NGT from Prism Central only. It is not required when you upgrade NGT or install NGT manually by logging in to the guest VM.

Cependant, ce qui n’est pas forcément évident, c’est le détail du protocole de communication que WinRM utilise. Comme indiqué dans la base de connaissances de Nutanix sur “How To Configure WinRM for Remote Management“, Windows est configuré par défaut pour utiliser le protocole HTTP, qui opère sur le port 5985. Or, Prism Central s’attend à une communication sur le port 5986, qui utilise le protocole HTTPS, plus sécurisé.

Ce petit détail peut être source de complications lors de tentatives de déploiement automatique de NGT depuis Prism Central. Il est donc essentiel de configurer WinRM pour utiliser HTTPS afin d’assurer une communication fluide et sécurisée.

Mais comme indiqué dans la KB How To Configure WinRM for Remote Management, par défaut Windows est configuré en HTTP qui correspond au port 5985, mais comme vous pouvez le voir sur le tableau du dessus, Prism s’attend à communiquer sur le port 5986 donc en HTTPS.

Toutes les commandes de cet article sont exécutées depuis une invite PowerShell élevée.

Solution : Configurer le transport HTTPS

  1. Lancez PowerShell en tant qu’administrateur.
  2. Listez la configuration WinRM actuelle. Par défaut (nouvelle installation), seul le listener HTTP doit être configuré PS C:\> winrm e winrm/config/listener
  3. Liste des sockets ouverts. Par défaut (nouvelle installation), vous devriez voir le port 5985 en écoute : PS C:\> netstat -na | findstr 598 Vous devriez avoir un listener HTTP configuré avec les paramètres par défaut et le port 5985 en écoute.
  4. Autoconfigurez WinRM. Cela réinitialise le listener HTTP existant aux paramètres par défaut et effectue d’autres opérations de configuration nécessaires. PS C:\> winrm quickconfig
  5. Activez l’authentification de base pour WinRM PS C:\> winrm set winrm/config/service/auth "@{Basic=""true""}"
  6. Créez un certificat SSL auto-signé et configurez le transport HTTPS de WinRM. Les trois commandes ci-dessous se basent les unes sur les autres.
    • PS C:\> $my_hostname = [system.net.dns]::gethostname()
    • PS C:\> $my_certificate = new-selfsignedcertificate -dnsname $my_hostname -certstorelocation cert:\localmachine\my
    • PS C:\> winrm create winrm/config/listener?address=*+transport=https "@{hostname=""$my_hostname"";certificatethumbprint=""$($my_certificate.thumbprint)""}"
  7. Validez à nouveau avec PS C:\> winrm e winrm/config/listener PS C:\> netstat -na | findstr 598 Vous devriez maintenant avoir des listeners HTTP et HTTPS configurés avec les paramètres par défaut et les ports 5985 et 5986 en écoute.
  8. Validez et/ou configurez le pare-feu Windows pour autoriser les connexions entrantes.
    • Expérimentez et déterminez pour quel(s) profil(s) vous souhaitez autoriser l’accès. Pour cet article, les commandes ci-dessus ajoutent les règles aux trois profils.
    • Liste des règles de pare-feu existantes. Recherchez les règles répertoriées pour les ports 5985 et 5986 et vérifiez qu’elles sont activées pour tous les profils
    • PS C:\> Get-NetFirewallPortFilter -Protocol TCP | Where { $_.localport -match '598' } | Get-NetFirewallRule
    • Si les ports de l’étape précédente sont absents, ajoutez l’une ou l’autre des nouvelles règles de pare-feu ci-dessous (en fonction de ce qui manque ci-dessus)
      • PS C:\> New-NetFirewallRule -name "Windows Remote Management (HTTP-In)" -displayname "Windows Remote Management (HTTP-In)" -description "Règle entrante pour la gestion à distance de Windows via WS-Management. [TCP 5985]" -group "Gestion à distance de Windows" -Program "System" -protocol TCP -localport "5985" -action Allow -profile Domaine,Privé,Public
      • PS C:\> New-NetFirewallRule -name "Windows Remote Management (HTTPS-In)" -displayname "Windows Remote Management (HTTPS-In)" -description "Règle entrante pour la gestion à distance de Windows via WS-Management. [TCP 5986]" -group "Gestion à distance de Windows" -Program "System" -protocol TCP -localport "5986" -action Allow -profile Domaine,Privé,Public
    • Vous devriez maintenant avoir des listeners HTTP et HTTPS configurés avec les paramètres par défaut et les ports 5985 et 5986 en écoute. Utilisez l’étape 1 ci-dessus pour valider l’ajout de ces règles après avoir exécuté ces éléments.

Une fois WinRM correctement configuré pour accepter les demandes HTTPS, les obstacles au déploiement de NGT via Prism Central devraient être significativement réduits. Assurez-vous simplement de respecter les autres prérequis systèmes et réseau, même si WinRM est souvent le point bloquant dans ce processus.

Astuce : Le port 5986 doit être ouvert pour permettre la communication HTTPS entre Prism Central et les serveurs Windows.

Pour les administrateurs qui déploient NGT sur des serveurs Linux, la tâche est généralement plus simple. Le seul prérequis clé est l’ouverture du port 22, ce qui facilite grandement le processus de déploiement.

Toujours dans ma série Nutanix CE 2.0, voici la suite de Nutanix CE 2.0, Part II – VM AT WORK.

Avant tout, il convient de finaliser quelques configurations pour le cluster.

Je vais ajouter un nom à mon cluster ainsi qu’une adresse VIP. Cette adresse IP, en plus de toutes les adresses des CVM, permettra de joindre le cluster.

J’ajoute également une adresse pour la distribution du service iSCSI. Bien que cela ne soit pas indispensable pour l’instant, cela me sera utile ultérieurement.

Je vais maintenant déployer mon Prism Central.

Il est à noter qu’un “Small PC” est déjà considérable, il faudrait un PC “tiny” pour les environnements de lab.

Je choisis donc de créer un nouveau réseau avec une configuration minimale, sans activation du VLAN tagging ni gestion avancée des adresses IP.
Je rajoute le masque de sous-réseau, la passerelle et mes DNS, et je laisse le conteneur par défaut.

Enfin, j’attribue un nom original “PrismCentral” à la VM et lui ajoute une adresse IP.

Grâce à ces quelques clics, une appliance va se déployer sur mon environnement.

Après une bonne demi-heure, le déploiement est terminé.

Je me connecte à l’adresse IP https://192.168.0.200:9440 afin de modifier le mot de passe par défaut.

Je peux maintenant interconnecter Prism Element avec Prism Central que je viens d’installer.

Lors de la première connexion, il faudra entrer les informations demandées et accepter le contrat EULA.

Je conserve bien entendu Pulse activé.

Enfin, j’arrive sur le tableau de bord principal de Prism Central. Comme indiqué, j’ai accès à une version d’essai de 90 jours de Prism Ultimate. Nous explorerons cela plus en détail dans les prochains articles pour en optimiser l’utilisation.

Depuis Prism Element :

ncli multicluster remove-from-multicluster external-ip-address-or-svm-ips=pc-name-or-ip username=pc-username password=pc-password force=true
nutanix@cvm$ ncli multicluster get-cluster-state

Récupérer l’uuid.

nutanix@cvm$ ncli cluster info

Depuis PC :

nutanix@pcvm$ python /home/nutanix/bin/unregistration_cleanup.py uuid

Récupérer l’uuid.

nutanix@pcvm$ ncli cluster info

Depuis PE:

nutanix@cvm$ python /home/nutanix/bin/unregistration_cleanup.py uuid