Nutanix, partie 2 : Community Edition par le menu

Deuxième billet de ma série d’articles sur Nutanix et sa suite logicielle, je vous propose cette fois-ci de rentrer dans le vif du sujet avec l’installation, par le menu, d’un cluster single-node à partir de la distribution « Community Edition », sortie depuis déjà plus de deux ans maintenant (voir mon billet de 2015 ici). J’ai été au plus simple en testant d’abord cette version sur VMware Fusion (le VMware workstation pour Mac, pour ceux du fond qui ne suivent pas ^^) avant d’envisager de l’installer, si j’en ai la possibilité, sur du bare-metal. Ceci étant, on le verra dans l’article, CE est déjà parfaitement utilisable et plutôt performant sur cette première configuration !

Ready ? Set ? Go !

Un peu de lecture, préparation et téléchargement

Contrairement à beaucoup de « démos » aujourd’hui, quel que soit le domaine, Nutanix CE n’est pas au départ destiné à être implanté directement en mode « Nested » sur des environnements virtualisés. Et pour cause, la solution est sensée justement construire un cluster pour héberger des VMs. Du coup, lorsqu’on souhaite s’attaquer à un PoC basé sur CE, il y a deux options : soit on est riche et on a ce qu’il faut en serveurs physiques (1 minimum, 3 si on veut être dans une configuration minimum similaire à un environnement de production), soit on est pauvre (comme moi ^^) et on va devoir un petit peu bidouiller pour contraindre Community Edition à tourner sur un hyperviseur déjà en place.

Il y a encore quelques années, faire de l’encapsulation d’hyperviseur relevait de l’expérimental et ne rendait pas justice au hardware sur lequel on tentait la bidouille. Aujourd’hui, avec nos processeurs récents qui embarquent quasi tous le VT-X (ou AMD-V), même un petit Core i3 ou i5 suffit pour exploiter ce mode (voir chez Intel sur le site « ARK » pour la liste de processeurs supportés ici).

J’ai commencé, avant de me lancer, par RTFM (Rétrospectivement, ça me surprend encore d’avoir fait ça, je dois vieillir ^^) puis parcourir quelques blogs présentant des expériences proches, histoire de ne pas perdre trop de temps. Pour ceux qui sont intéressés, il y a un article du blog de Nutanix qui vous donne un bon point de départ, à lire ici.

Ensuite, il faut s’inscrire sur le portail « .Next » (ici) de Nutanix pour pouvoir télécharger CE et l’utiliser. Rendez-vous ensuite sur cette page pour commencer.

J’ai également trouvé une mine d’informations dans ces deux articles de blog : Le premier est un petit memento des commandes CLI pour la gestion d’un cluster Nutanix, à consulter ici chez « VCDX56 ». Le second reprend exactement mon objectif – installer CE sur VMware Fusion – et présente le processus que l’auteur a employé pour arriver à ses fins, à voir ici sur Virtuallifestyle.

J’ai choisi VMware Fusion pour des raisons de simplicité chez moi, mais les prochaines étape s’appliqueront aussi bien à d’autres hyperviseurs moyennant quelques adaptations mineures (notamment ESXi 6.5 que j’ai testé aussi avec succès).

Nota bene

Sachez d’abord que je m’y suis repris à plusieurs reprises avant d’obtenir un environnement fonctionnel. La première fois, j’ai téléchargé la dernière version en date, à savoir la ce-2018.01.31, mais pour une raison obscure, la CVM (la VM de gestion hébergeant Prism) refusait de se lancer correctement et l’installation globale plantait (visiblement je ne suis pas le seul dans ce cas). Je me suis rabattu, après quelques lectures online, sur une version plus ancienne, la ce-2017.07.20, qui s’est mieux comportée. Pour autant, je n’étais pas sorti d’affaire. Lors de la création de la VM, j’avais pris ESXi 6.5 comme type d’OS, pensant – à tord – qu’un profil d’hyperviseur serait sans doute le meilleur choix, vu le type de produit à installer. Erreur de débutant ! La CVM refusait toujours d’aller au bout. Ce n’est qu’en choisissant finalement « CentOS 7 64 bits » (la distribution de base d’Acropolis, en fait) que j’ai réussi à terminer l’installation.

Création de la VM

La création de la VM n’est pas vraiment compliquée, mais comme vous avez pu le lire plus haut, il faut être précis dans vos choix de configuration. En substance, il s’agit de bien choisir le type d’OS et de respecter globalement les contraintes décrites dans la documentation. Tout d’abord il s’agit de créer une VM classique avec une empreinte que l’on va modifier par la suite :

Voici la configuration mémoire et CPU minimum à appliquer : 16 Go de RAM (trop peu, au final, voir plus bas), 4 VCPUs et bien sûr, l’activation de VT-x/EPT

Coté stockage, j’ai augmenté la taille du disque de base de 40 Go à 200 Go, puis j’en ai ajouté un deuxième de 500 Go, comme préconisé dans la documentation. J’ai également téléchargé l’image de boot/install ce-2017.07.20-stable.img.gz (disponible ici), décompressé l’archive puis renommée celle ci en un VMDK « nutanix-ce-flat.vmdk ». Avant de pouvoir exploiter ce disque spécifique, il faut également créer le ficher descripteur nutanix-ce.vmdk, dont voici un exemple (récupéré sur Virtuallifestyle) :

# Disk DescriptorFile
version=4
encoding="UTF-8"
CID=a63adc2a
parentCID=ffffffff
isNativeSnapshot="no"
createType="vmfs"
 
# Extent description
RW 14540800 VMFS "nutanix-ce-flat.vmdk"
 
# The Disk Data Base
#DDB
 
ddb.adapterType = "lsilogic"
ddb.geometry.cylinders = "905"
ddb.geometry.heads = "255"
ddb.geometry.sectors = "63"
ddb.longContentID = "2e046b033cecaa929776efb0a63adc2a"
ddb.uuid = "60 00 C2 9b 69 2f c9 76-74 c4 07 9e 10 87 3b f9"
ddb.virtualHWVersion = "10"

On obtient un disque VMDK complet constitué de deux fichiers, qu’il faut copier dans le répertoire de la VM (pour plus de cohérence) et attacher à un device « HardDisk » de type S-ATA à la machine. Au final, vous disposez d’une VM avec 3 disques, dont un disque de boot hébergeant l’image d’installation.

Configuration intiale

Lors d’une de mes premières tentatives, j’ai rencontré un petit souci lorsque la machine a demandé l’activation du mode promiscuous sur sa carte réseau. Par défaut, ce mode est interdit à un utilisateur standard et nécessite une élévation de privilège sur Mac. Vous avez deux options face à ça : soit, lorsque macOS vous demande votre mot de passe d’admin, vous le tapez *vite* (en moins de 3/4 secondes) avant le timeout, soit, comme moi, vous désactivez *temporairement* le verrouillage du mode promiscuous en décochant la case correspondante dans les préférences réseau de VMware Fusion :

… et si on bootait pour voir ? Voici quelques copies d’écran de l’assistant :

Contrairement à ce qui est indiqué sur le dernier screenshot, je n’ai finalement pas pris l’option de créer automatiquement le cluster en fin d’install, histoire de pouvoir défricher un peu la partie CLI de Nutanix que j’avais pu découvrir auparavant sur le web. Et, oui, je suis un CLI’maniaque devant l’éternel, j’avoue ^^

La préparation d’Acropolis et l’installation auto de la VCM (vm d’administration et de pilotage) prend environ 5/6 minutes. Je rappelle, la VCM est une machine virtuelle tournant dans Acropolis, tournant dans VMware Fusion, tournant sur macOS … vous suivez ? ça va ?. Une fois terminé, il faut se connecter sur la CVM via SSH (compte nutanix / mot de passe nutanix/4u) et créer le cluster. Pour le coup, il s’agit d’un cluster single-node, donc on va indiquer un facteur de redondance de 1.

nutanix@NTNX-1f868acf-A-CVM::~$ cluster --svm_ips 172.16.16.81 --redundancy_factor 1 create
2018-03-17 15:23:35 INFO cluster:2214 Executing action create on SVMs 172.16.16.81
Atleast 3 nodes are required for cluster creation!. 1 IPs provided. Do you want to proceed? (Y/[N]): y
2018-03-17 15:23:45 INFO cluster:930 Discovered node:
ip: 172.16.16.81
	rackable_unit_serial: 1f868acf
	node_position: A
	node_uuid: cff1a336-141f-4632-87e5-46b445cba872

2018-03-17 15:23:45 INFO cluster:1052 iptables configured on SVM 172.16.16.81
2018-03-17 15:23:45 INFO cluster:1060 Setting the cluster functions on SVM node 172.16.16.81
2018-03-17 15:23:45 INFO cluster:1065 Configuring Zeus mapping ({u'172.16.16.81': 1}) on SVM node 172.16.16.81
2018-03-17 15:23:45 INFO cluster:1081 Creating cluster with SVMs: 172.16.16.81
2018-03-17 15:23:48 INFO cluster:1131 Waiting for services to start

(...)

Waiting on 172.16.16.81 (Up, ZeusLeader) to start:  MinervaCVM ClusterConfig ABAC APLOSEngine APLOS Lazan Orion
Waiting on 172.16.16.81 (Up, ZeusLeader) to start:  APLOS Lazan Orion
Waiting on 172.16.16.81 (Up, ZeusLeader) to start:
The state of the cluster: start
Lockdown mode: Disabled

	CVM: 172.16.16.81 Up, ZeusLeader
		                Zeus   UP	[14907, 14936, 14937, 14938, 14996, 15011]
		           Scavenger   UP	[18182, 18246, 18247, 18250]
		       SSLTerminator   UP	[18929, 18954, 18955, 18956]
		      SecureFileSync   UP	[18958, 19026, 19027, 19029]
		              Medusa   UP	[19260, 19292, 19293, 19542, 20016]
		  DynamicRingChanger   UP	[26955, 27064, 27065, 27092]
		              Pithos   UP	[26976, 27062, 27063, 27085]
		                Hera   UP	[26985, 27078, 27079, 27080]
		            Stargate   UP	[27724, 27754, 27755, 27922, 27925]
		          InsightsDB   UP	[27728, 27821, 27822, 27954]
		InsightsDataTransfer   UP	[27759, 27839, 27840, 27923, 27924]
		               Ergon   UP	[27785, 27861, 27862, 27864]
		             Cerebro   UP	[27820, 27927, 27929, 28175]
		             Chronos   UP	[27849, 28053, 28054, 28139]
		             Curator   UP	[27866, 28056, 28057, 28176]
		               Prism   UP	[27958, 28158, 28159, 28240, 29014, 29044]
		                 CIM   UP	[28075, 28168, 28169, 28216]
		        AlertManager   UP	[28141, 28283, 28284, 28319]
		            Arithmos   UP	[28367, 28401, 28403, 28546]
		           Acropolis   UP	[28406, 28461, 28462, 28464]
		               Uhura   UP	[28419, 28521, 28522, 28524]
		                Snmp   UP	[28459, 28543, 28544, 28550]
		    SysStatCollector   UP	[28483, 28588, 28589, 28592]
		              Tunnel   UP	[28542, 28616, 28617]
		       ClusterHealth   UP	[28578, 28681, 28682, 29072, 29142, 29144, 30374]
		               Janus   UP	[28615, 28694, 28695]
		   NutanixGuestTools   UP	[28705, 28774, 28775, 28826]
		          MinervaCVM   UP	[29229, 29287, 29288, 29294, 30111]
		       ClusterConfig   UP	[29251, 29328, 29329, 29331]
		                ABAC   UP	[29290, 29366, 29367, 29369]
		         APLOSEngine   UP	[29325, 29387, 29388, 29389]
		               APLOS   UP	[29973, 30083, 30084, 30088, 30370, 30372]
		               Lazan   UP	[30025, 30103, 30104, 30105, 30405]
		               Orion   UP	[30060, 30144, 30145, 30160]
2018-03-17 15:25:28 INFO cluster:1146 Running CE cluster post-create script
2018-03-17 15:25:28 INFO cluster:2325 Success!
nutanix@NTNX-1f868acf-A-CVM::~$ ncli cluster add-to-name-servers servers=172.16.16.254

    Name Servers              : 8.8.8.8, 8.8.4.4, 172.16.16.254
nutanix@NTNX-1f868acf-A-CVM::~$

Notre cluster est créé ! Presque trop facile … J’ai ensuite voulu lancer quelques diagnostics (pour suivre l’exemple de Virtuallifestyle), mais j’aivite déchanté :

nutanix@NTNX-1f868acf-A-CVM::~$ diagnostics/diagnostics.py --replication_factor 1 run
Checking if an existing storage pool can be used ...
Using storage pool default-storage-pool-57628458972247 for the tests.
Checking if the diagnostics container exists ... does not exist.
Creating a new container NTNX-NFS-DEFAULT for the runs ... done.
Preparing the UVM on host 172.16.16.80 ...

  Importing diagnostics image ...  done.
  Deploying the UVM on host 172.16.16.80 ... done.
  Adding disks ... There was an error running diagnostics.
For more information look in /home/nutanix/diagnostics/diagnostics.log
nutanix@NTNX-1f868acf-A-CVM::~$ cat /home/nutanix/diagnostics/diagnostics.log
2018-03-17 15:28:55 INFO zookeeper_session.py:102 diagnostics.py is attempting to connect to Zookeeper
2018-03-17 15:28:55 INFO diagnostics.py:2326 SVM_CMD: 'mkdir -p /home/nutanix/diagnostics/results/2018-03-17_15-28-55'
2018-03-17 15:28:55 INFO diagnostics.py:2326 SVM_CMD: 'stargate --version | grep -c release'
2018-03-17 15:28:55 WARNING diagnostics.py:2422 Using an exisiting storage pool storage_pool__name = 'default-storage-pool-57628458972247'. Storage pool configuration can effect performance results.
2018-03-17 15:28:55 INFO diagnostics.py:2326 SVM_CMD: 'ncli ctr list name=NTNX-NFS-DEFAULT'
2018-03-17 15:28:59 INFO diagnostics.py:2326 SVM_CMD: 'ncli ctr add name=NTNX-NFS-DEFAULT sp-name=default-storage-pool-57628458972247 rf=1'
2018-03-17 15:29:06 INFO diagnostics.py:4258 creating first UVM if not already present
2018-03-17 15:29:43 INFO task_poller.py:140 VmSetPowerState: kNoHostResources: Host cff1a336-141f-4632-87e5-46b445cba872 has insufficient available memory. Maximum allowable VM size is approximately 2105 MB
2018-03-17 15:29:43 ERROR diagnostics.py:4667 Traceback (most recent call last):
  File "diagnostics/diagnostics.py", line 4656, in main
    commands[args[1]](config)
  File "diagnostics/diagnostics.py", line 4337, in do_run
    node_list = setup_nodes_and_uvms(config)
  File "diagnostics/diagnostics.py", line 4235, in setup_nodes_and_uvms
    return create_node_list(cluster_name, filtered_node_configs, config_proto)
  File "diagnostics/diagnostics.py", line 4262, in create_node_list
    svm_id_port_map[node_config_head.service_vm_id], hyp_type)
  File "diagnostics/diagnostics.py", line 2761, in prepare_uvm
    hypervisor.power_off_or_on_vm(vm_id, "on")
  File "diagnostics/diagnostics.py", line 1305, in power_off_or_on_vm
    self._acropolis.VmSetPowerStateSync(arg)
  File "/home/afg/src/main/builds/build-ce-2017.07.20-stable-release/python-tree/bdist.linux-x86_64/egg/acropolis/client/client.py", line 92, in method_wrapper
AcropolisClientError: Host cff1a336-141f-4632-87e5-46b445cba872 has insufficient available memory. Maximum allowable VM size is approximately 2105 MB

2018-03-17 15:29:43 CRITICAL diagnostics.py:4670 Error running diagnostics
nutanix@NTNX-1f868acf-A-CVM::~$

Vous noterez ici l’erreur : "AcropolisClientError: Host cff1a336-141f-4632-87e5-46b445cba872 has insufficient available memory. Maximum allowable VM size is approximately 2105 MB"
Forcément, essayer de démarrer une VM de 4 Go sur un hyperviseur où il ne reste qu’à peine 2 Go de libre en mémoire, ça marche pas terrible. Pour pouvoir m’en sortir, j’ai modifié les spécifications de la CVM en réduisant drastiquement son empreinte mémoire afin de passer de 12 Go par défaut à 8 Go. C’est peu, mais suffisant pour un PoC tel que celui que j’était en train de monter. Pour info, j’ai tenté de descendre à 6 Go : cela suffisait à Prism, mais les diagnostics ne passaient pas (Java prend ses aises, comme d’habitude …) ; à 4 Go, même Prism refusait de se lancer. Au final, un bon compromis semble être autour de 8 Go pour du test. J’ai également poussé la mémoire d’Acropolis à 24Go au lieu des 16Go initiaux pour être plus confortable. Dont acte, après connexion directe sur Acropolis (l’hyperviseur hébergeant la CVM) :

[root@NTNX-1f868acf-A ~]# virsh list --all
 ID    Nom                            État
----------------------------------------------------
 2     NTNX-1f868acf-A-CVM            en cours d'exécution
[root@NTNX-1f868acf-A ~]# virsh shutdown NTNX-1f868acf-A-CVM
Le domaine NTNX-1f868acf-A-CVM est en cours d'arrêt
[root@NTNX-1f868acf-A ~]# virsh list --all
 ID    Nom                            État
----------------------------------------------------
 -     NTNX-1f868acf-A-CVM            fermé
[root@NTNX-1f868acf-A ~]# virsh setmaxmem NTNX-1f868acf-A-CVM --config --size "6GiB"
[root@NTNX-1f868acf-A ~]# virsh setmem NTNX-1f868acf-A-CVM --config --size "6GiB"
[root@NTNX-1f868acf-A ~]# virsh start NTNX-1f868acf-A-CVM
Domaine NTNX-1f868acf-A-CVM démarré
[root@NTNX-1f868acf-A ~]#

Et, hop-là ! La CVM redémarre et nous laisse la place nécessaire pour relancer les diags :

nutanix@NTNX-1f868acf-A-CVM::~$ diagnostics/diagnostics.py --replication_factor 1 run
Checking if an existing storage pool can be used ...
Using storage pool default-storage-pool-57628458972247 for the tests.
Checking if the diagnostics container exists ... Container with desired replication factor exists.
Preparing the UVM on host 172.16.16.80 ...

  Deploying the UVM on host 172.16.16.80 ... done.
  Adding disks ... done.
Waiting for VM on host 172.16.16.80 to bootup ...... done. 0 remaining.
Start running test prepare_disks
2018-03-18_04-48-47: Running setup "Prepare disks" ...
done.
Average SVM CPU: 172.16.16.81: 61%

SSD usage for disks:
	 Disk id: 15, SSD used : 36 GB,  SSD Capacity Bytes: 327 GB, 11% used
SSD usage for storage pool:
	 SSD tier usage 36 GB, SSD total capacity 327 GB, SSD Usage 11%

Duration prepare_disks : 141 secs
*******************************************************************************
Start running test fio_seq_write
Waiting for the hot cache to flush ... done.
2018-03-18_04-51-22: Running test "Sequential write bandwidth" ...
270 MBps
(...)
Duration fio_seq_write : 46 secs
*******************************************************************************
Start running test fio_seq_read
Waiting for the hot cache to flush ........... done.
2018-03-18_04-52-38: Running test "Sequential read bandwidth" ...
861 MBps
(...)
Duration fio_seq_read : 15 secs
*******************************************************************************
Start running test fio_rand_read
Waiting for the hot cache to flush ...... done.
2018-03-18_04-53-15: Running test "Random read IOPS" ...
10505 IOPS
(...)
Duration fio_rand_read : 101 secs
*******************************************************************************
Start running test fio_rand_write
Waiting for the hot cache to flush ... done.
2018-03-18_04-55-12: Running test "Random write IOPS" ...
8394 IOPS
(...)
Duration fio_rand_write : 101 secs
*******************************************************************************
Tests done.
Results archived in /home/nutanix/diagnostics/results/2018-03-18_04-48-04
nutanix@NTNX-1f868acf-A-CVM::~$

Il ressort de ces tests que même en Nested, avec une machine assez ancienne mais haut de gamme comme mon MacPro 2013, on obtient des performances plus qu’honorable ! Je résume : 860 Mo/s en lecture séquentielle, 270 Mo/s en écriture, quant au random, on est quand même à plus de 8000/10000 IOps en moyenne.

A suivre !

Histoire de ne pas trop vous fatiguer, je terminerai cet article déjà assez long par quelques screenshots de l’interface Prism, qui intéresseront ceux qui ne connaissent pas du tout l’ergonomie de l’administration Nutanix, que je peux résumer par ces caractéristiques : élégante, rapide et full HTML depuis le début ! (n’est-ce pas VMware, mmmh ?).

La prochaine partie sera consacrée à la mise en oeuvre de Calm.
A bientôt !

Pour référence, les liens vers mes sources d’info et d’expériences :
Download Nutanix CE et documentation : ici
Article Nutanix sur CE et les environnements Nested : ici
Intel ARK répertoriant les processeurs équipés de VT-X/EPT : ici
L’article de Virtuallifestyle qui m’a beaucoup aidé au début : ici
Le memento de la CLI spécifique Nutanix pour la gestion des clusters : ici
Sur le site de Nutanix, la présentation de Calm/Prism : ici
Et on oublie pas non plus le site communautaire Nutanix, très actif : ici