NSX Intelligence sur Tanzu

NSX Intelligence sur Tanzu

Introduction

Bienvenue pour ce premier article, qui a pour objectif de détailler, pas à pas, le déploiement de NSX Intelligence en version 3.2+.

Cette mise à jour change radicalement le déploiement et l’activation de certaines fonctionnalités NSX T dont NSX Intelligence.

Dorénavant NSX Intelligence est une solution conteneurisée à déployer sur la nouvelle brique technologie NSX Application Plateform (i.e NAPP).

NAPP se déploie sur un cluster K8s pré existant. L’administrateur VMware n’a plus d’autre choix que de monter en compétence sur Kubernetes… NSX ne déploiera pas le cluster pour vous.

Si K8s est déjà déployé (distribution Tanzu ou autre) le déploiement de NAPP sera (presque) une formalité. Mais quid d’un environnement sans licence Tanzu et sans environnement K8s?

La bonne nouvelle est l’arrivée il y a quelques mois de Tanzu Community Edition (i.e TCE). TCE a l’avantage pour un profil VMware de permettre de garder certains repères tout en profitant des apports de Tanzu (mises à jour, « simplicité » de déploiement…).

Mon but est de détailler toutes les étapes nécessaires pour un déploiement NSX Intelligence from scratch mais il y aura forcément des adaptations à effectuer de votre côté.

Architecture Lab / prés requis

Afficher les prérequis

Réseau/ DNS :

Les services suivants requièrent un accès internet :

  • NSX T
  • Accès au repository Helm & Chart de VMware
  • Alternative – monter des dépôts Helm et Charts locaux
  • VMs Tanzu
  • Téléchargement de paquet/conteneur
  • Compatible proxy
  • Déploiement sans internet actuellement non supporté
  • VM Bootstrap
  • Pour le gain de temps

Un service DHCP pour les VMs TCE (je conseille de dédier un réseau/segment pour TCE/NAPP)

  • 5 IPs pour le Management Cluster (1 worker node + 3 Control plane nodes + IP MAJ)
  • 5 IPs pour le Workload Cluster (i.e le cluster où sera déployé NAPP)
  • 2 IPs pour le Form Factor Evaluation
  • 10 IPs réservées pour Tanzu pour un usage ultérieur (nouveau cluster, scaling…)

DHCP NAPP :

  • 5 IPs pour l’application
  • 15 IPs réservées supplémentaires

Également 4 IPs fixes sont requises (à enregistrer dans votre DNS) :

  • 1 VIP Tanzu cluster de management
  • 1 VIP Tanzu Workload Cluster
  • 1 VIP NAPP
  • 1 IP VM Bootstrap

Compute :

  • Environ 60 vCPU (Form Factor production)
  • 230 Go RAM
  • 1,5 To stockage (thin)

Architecture LAB

L’environnement utilisé pour cet article est un cluster physique vSAN 2 nœuds 7U3.

Si vous avez déployé l’appliance NSX Intelligence auparavant vous connaissez ses importants prés requis en CPU et RAM.

La version conteneurisée a les mêmes prés requis mais va demander le triple de ressources afin d’avoir un cluster NSX Intelligence résilient. A ces pres requis s’ajoute la consommation des VMs Tanzu.

Pour le stockage lors de mon premier déploiement l’ensemble Tanzu/NAPP consommait env 400Go.

Form Factor Advanced requis pour NSX Intelligence

⚠️
Prévoyez de la ressource !!

Pour cet article je ferai un déploiement avec un unique control et worker node, ce qui correspond au form factor « Evaluation » de NAPP. Bien sur ce déploiement n’apporte pas de résilience et empêche les mises à jour des services déployés.

Malgré le form factor minimum la consommation en ressource est élevée (surtout en environnement lab) et vous constaterez une augmentation non négligeable des opérations I/O sur votre stockage.

Un segment overlay NSX T est configuré pour les VMs déployés par Tanzu. Sur ce segment le service DHCP a été activé avec un range dédié. La configuration NSX est « standard » avec un routage externe STATIC.

Un service DHCP est obligatoire pour le déploiement de TCE et des clusters.

Tip : Garder les premières IPs du réseau pour le service DHCP de NSX T si vous comptez l’utiliser.

Comme dit précédemment je conseil de dédier un segment à Tanzu. Une partie des IPs réservées pour le DHCP et le reste pour les IPs fixes que nous devrons enregistrer sur le serveur DNS.

Si vous avez des règles de pare feu il faudra identifier les flux à ouvrir selon votre environnement. Également si vous faites du DPI il faudra exclure les VMs Tanzu de l’inspection. Les VMs Tanzu sur ce réseau seront

Segment Tanzu dédié

Range DHCP pour les clusters Tanzu Community Edition

Outillage

En plus de notre cluster vSphere nous allons configurer une VM Linux dites « Boostrap » ainsi qu’une VM Template qui sera utilisé par Tanzu pour ses déploiements.

La VM Boostrap contiendra tous les outils Tanzu nécessaire à son déploiement et son administration.

J’ai choisi la distribution Ubuntu 22.04 principalement pour sa communauté qui propose un large choix de guide plus de ressources qui peuvent aider pour non spécialiste linux.

Il est également possible d’utiliser un environnement Windows pour gérer Tanzu mais je conseil une VM Linux dédiée car c’est ce qu’on retrouve le plus sur le terrain et permet de centraliser les opérations.

Je conseil de faire le premier déploiement en graphique. Le déploiement en CLI est possible.

A la fin du Wizard GUI il est possible d'exporter le fichier yaml de configuration du cluster ainsi que son emplacement "local".

Une fois le cluster de management déployé, le reste des opérations à la VM Boostrap en SSH.

Déploiement Template Tanzu

Les ova des template Tanzu se téléchargent depuis le site de VMware : Lien téléchargement Appliance Tanzu v0.12 

Une fois dans menu de téléchargement il faut choisir la distribution (Photon ou Ubuntu) et la version de K8s installé de sa VM template.

Pour ma part j’ai choisi la distribution Ubuntu en 1.22.x. La distribution ne change en rien les étapes de déploiement. La distribution Photon est plus légère, Ubuntu est plus connu.

⚠️
Important : Nous devons également télécharger une version K8s 1.21.x pour le Workload Cluster qui sera utilisé par NAPP
Important : La version K8s 1.22.x est actuellement non supporté par la version de NAPP déployé dans ce guide. Il faudra spécifier la version 1.21.x lors du déploiement du Workload Cluster NAPP. C’est très facile à oublier d’après un ami…

Sans allumer les VMs déployées, les convertir directement en template.

Résumé des étapes de déploiement

Faites comme à votre habitude

Laissez le nom par défaut !!

Le template Ubuntu consomme env 22Go

⚠️
Une fois déployé on convertit tout de suite les VMs en template.
🖐🏼
N’ allumez pas la VM avant de la convertir !

Configuration VM Bootstrap

Choisissez la distribution qui vous convient le mieux. J’ai choisis la dernière LTS Ubuntu pour sa large communauté.

Pour télécharger Ubuntu : https://ubuntu.com/download/desktop

☝🏼
Je recommande 2vCPU, 6Go de ram et > 60Go de stockage.

Une fois déployé, mettez à jours la VM, donnez-lui une IP fixe / réservation DHCP avec un enregistrement DNS.

Configuration IP fixe sur la VM Ubuntu

Désactiver le DNS « Automatic » avant d’appliquer la configuration:

La passerelle correspond à l'Uplink de l'Edge dans mon lab.u

L’installation minimale est adaptée. Je coche les maj pendant l’installation ainsi que l’installation des drivers Tiers. Ce n’est pas un prérequis mais on évite un potentiel problème avec VMware.

☝🏼
Je recommande l’installation des Open VM Tools une fois l’installation terminé
apt update 
apt-upgrade  
apt install open-vm-tools-desktop open-vm-tools 
reboot

Installation de OpenSSH pour l'accès... SSH.

#Mise à jour de la bdd apt 
apt update  

#Installation du binaire 
apt install openssh-server 

#Démarrage du service et lancement auto au démarrage 
systemctl start ssh 
systemctl enable ssh
systemctl status ssh 

A partir de là vous pouvez vous connecter en SSH depuis votre environnement de travail et ne revenir sur le KVM VMware que pour le Wizard de déploiement.

Configuration du client NTP

# Edition de la configuration du service 
nano /etc/systemd/timesyncd.conf

# On redémarre le service
systemctl restart systemd-timesyncd

# Vérification de la configuration
timedatectl timesync-status  

Il est très important de configurer le service NTP pour TCE

Exemple de configuration - Séparez deux IPs par un espace

Installation du package Tanzu Community Edition

Lien vers la documentation Tanzu pour référence.

Afin de simplifier son déploiement, VMware recommande d’utiliser Homebrew pour l’installation de TCE.

Note : Changez le nom du répertoire home par celui de votre utilisateur $USER

# Installation de Brew 
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"Post #Conf Brew 
echo 'eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"' >> /home/$USER/.profile# eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)" 

# Brew recommande d’installer les dépendances communes et GCC (requis pour TCE) 
sudo apt-get install build-essential 

brew install gcc 

#Installation de TCE 
brew install vmware-tanzu/tanzu/tanzu-community-edition  

A la fin de l’installation de TCE, Brew vous avertira qu’il faut exécuter un script afin de finaliser l’installation (obligatoire sinon vous aurez des commandes manquantes)

La commande à exécuter se trouve ici :

Cette commande déploie les plugins de base à Tanzu

Création d’une clé SSH pour TCE

ssh-keygen -t rsa -b 4096 -C email@example.com 

Le Wizard de déploiement TCE demande une clé SSH (de la VM Booststrap) qui sera utilisée pour se connecter sur les VMs Tanzu.

Notez le chemin de la clé SSH

Entrez un mot de passe

# On démarre l’agent SSH 
eval $(ssh-agent) 

# On ajoute la clé 
ssh-add /home/$USER/.ssh/id_rsa.pub 

# Pour vérifier l’ajout de votre clé 
ssh-add -l 

On ajoute la clé à la liste du service SSH

Enfin on copie la clé public SSH id_rsa.pub dans un fichier texte facilement accessible. On l’utilisera lors de déploiement de TCE.

La clé copiée sur le bureau

Le début du fun ... le tout, mais vraiment, le tout début …

Notre Ubuntu est installé avec sa configuration de base. On va pouvoir déployer Tanzu !

Pas si vite !

Le Wizard de déploiement à ses propres prés requis… à commencer par nécessiter Kubectl.

Installation de Kubectl

# Téléchargement du binaire kubectl  
curl -LO https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl 

# Installation de Kubectl 
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl 

# Vérification de l'installation 
kubectl version 

Sans Kubectl le déploiement de TCE échouera mais son installation est rapide.

Kubectl est correctement installé, on peut passer à celle de Docker.

Installation de docker

# Installation des prérequis 
sudo apt-get update 
sudo apt-get install ca-certificates curl gnupg lsb-release 

# Ajout du repository Docker 
sudo mkdir -p /etc/apt/keyrings  
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o etc/apt/keyrings/docker.gpg 
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null 

# Installation de Docker 
sudo apt-get updatesudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin 

# Vérification de docker 
sudo docker run hello-world  
Une installation correcte doit afficher ce résultat

Afin de pouvoir gérer Docker avec notre compte non-root on suit la procédure ci dessous.

# Création d’un groupe Docker 
sudo groupadd docker 

# Ajout de notre compte à ce groupe 
sudo usermod -aG docker $USER 

# Redémarrage pour prise en compte 
sudo reboot

# Test du bon fonctionnement en non root 
docker run hello-world 

# Lancement de Docker au démarrage 
sudo systemctl enable docker.service 
sudo systemctl enable containerd.service 

Docker est prêt !

☝🏼
Je conseil un reboot de la VM afin de valider que les services redémarrent comme attendu.

Le Wizard TCE de déploiement est prêt à être lancé !

Déploiement de Tanzu Community Edition

Cluster de Management

Depuis la remote console VMware de la VM Booststrap on exécute la commande suivante :

tanzu management-cluster create --ui

Si la commande s’exécute correctement le service web se lance et indique le port à utiliser.

Pour cet article c’est le déploiement de TCE sur un cluster vSphere qui nous intéresse.

A l'instar de TKGm, TCE peut se déployer sur Docker

On indique les éléments de connexion au vCenter et on importe la clé publique SSH créée plus tôt.

La clé publique

Pour NSX Intelligence il faut sélectionner à minima une instance de type « Medium ».

L’ip du Control Plane Endpoit correspond à la VIP du cluster gérée par Kube-vip.

⚠️
L’ip choisie doit être hors du range DHCP et être enregistré dans les DNS

On laisse l’onglet VMware NSX ALB vide puisque nous utilisons Kube-vip

NAPP ne nécessite pas de configuration spécifique.

On indique le cluster ou sera déployé TCE.

💡
ProTip : Au lieu d’écrire manuellement le chemin entier du VM Folder et Datastore. Cliquez dans le champ texte et appuyez sur flèche du bas du clavier. La liste des ressources s’affiche.

On sélectionne le port group pour le réseau Tanzu.

On ne modifie pas les deux range IPs préremplis. Sauf si vous savez ce que vous faites.

Importants : Les VMs déployées par Tanzu nécessite un accès un internet pour récupérer les binaires. Si besoin vous pouvez configurer un proxy

Le service identity Management n’étant pas nécessaire on le désactive. Les droits de NSX Intelligence sont définis depuis l’interface NSX.

Vous vous souvenez du template que vous avez créé au début ? C’est le moment de l’indiquer dans le wizard pour permettre à TCE de se déployer.

On sélectionne le template le plus récent

On vérifie que la configuration avant déploiement.

Le Wizard permet de copier la ligne de commande à utiliser dans un terminal. L’information la plus importante est le chemin d’accès au fichier YAML de configuration du cluster de management.

Notez bien le chemin du fichier YAML. On en aura besoin pour la suite.

Je vous conseille d’exporter la configuration dans votre dossier utilisateur avant de lancer le déploiement. Il sera facilement accessible pour la suite.

Le Wizard possède d’un terminal intégré pour suivre le déploiement.

Le Wizard clone et configure les appliances

Après une quinzaine de minutes le déploiement se termine.

Coté vCenter.

Consommation après le déploiement (VM Bootstrap incluse)

Déploiement du Workload Cluster

Retour au terminal SSH pour la suite.

Configuration du fichier YAML

Pour déployer notre cluster k8s on copie le fichier YAML du Management Cluster pour le modifier et ne changer que les champs nécessaires.

Dans mon cas j’ai fait une copie sur le bureau

Ouvrez le yaml copié et changez les lignes suivantes avec les paramètres appropriés

  • Un nom pour le cluster Workload
  • Pour un déploiement lab changez « prod » par « dev ». Ce qui déploiera 1 CP et 1 Worker
CLUSTER_NAME: tcenapp
CLUSTER_PLAN: dev
  • L’IP VIP du cluster Workload
VSPHERE_CONTROL_PLANE_ENDPOINT: 192.168.2.105

On doit modifier le profil matériel des appliances en accord avec les prés requis NAPP et NSX Intelligence

  • Pour le Control Plane on change la ram et la taille du disque
VSPHERE_CONTROL_PLANE_DISK_GIB: "64"
VSPHERE_CONTROL_PLANE_ENDPOINT: 192.168.2.105
VSPHERE_CONTROL_PLANE_MEM_MIB: "4096"
VSPHERE_CONTROL_PLANE_NUM_CPUS: "2"
  • On modifie les champs pour le nœud Worker
VSPHERE_WORKER_DISK_GIB: "1024"
VSPHERE_WORKER_MEM_MIB: "65536"
VSPHERE_WORKER_NUM_CPUS: "16"
⚠️
Rappel : La version 1.22 de K8s n’est pas supporté par NAPP, nous devons forcer le déploiement d’un cluster 1.21.

On peut afficher les builds disponibles.

tanzu kubernetes-release

On note le nom de la version qui nous intéresse : v1.21.11—vmware.1-tkg.1-tf-v0.11.4

tanzu cluster create WORKLOAD-CLUSTER-NAME –file CONFIG-FILE –tkr v1.21.11—vmware.1-tkg.1-tf-v0.11.4

On est prêt à créer notre cluster Workload.

A l’instar du déploiement du cluster de management, TCE s’occupe de déployer et configurer les appliances.

Tcenapp est déployé !

Vue du vCenter

La nouvelle consommation de l’ensemble

Afin de pouvoir l’administrer il faut enregistrer le cluster dans la configuration de kubectl

tanzu cluster kubeconfig get <WORKLOAD-CLUSTER-NAME> --admin

On peut maintenant utiliser kubectl pour gérer notre Workload Cluster avec la commande

# Exécuter la commande afin de se connecter à notre nouveau cluster
kubectl config use-context CLUSTERNAME-admin@CLUSTERNAME

Création du fichier de configuration de NAPP avec un token non expirable

Pour cette étape je renvoi à la documentation VMware, la procédure consiste en de multiple copier- coller. Rien de complexe.

Il faut réaliser les étapes de 2 à 7.

Note : Modifier les champs « napp » avec le nom de votre cluster Workload. Dans mon cas c’est « tcenapp ». Je remplace par exemple les entrées « napp-admin » par « tcenapp-admin »

Note 2 : Indiquez le chemin où sera créé le YAML à la variable suivante :

TO_BE_CREATED_KUBECONFIG_FILE=”/home/Vince/Desktop/napp.yaml”

Configuration de MetalLB (Service DHCP pour NAPP)

NAPP nécessite un Service Name pour son fonctionnement. TCE propose plusieurs options.

Plus concrètement, la VIP et les ips utilisées par NAPP seront portées par le Service Name

# MetalLb  (12.1) se deploit en deux ligne de commandes
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.12.1/manifests/namespace.yaml
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.12.1/manifests/metallb.yaml 

Dans notre scénario nous n’avons pas accès aux fonctionnalité payantes de Tanzu. VMware supporte MetalLB dans un scénario « gratuit ».

Le déploiement est une formalité

Pour la suite on doit s’assurer d’être dans le bon contexte Kubectl (i.e Workload Cluster).

# Affichage du contexte actuel 
kubectl config current-context 

# Dans mon cas le résultat doit être 
tcenapp-admin@tcenapp 

MetalLb propose un template de configuration disponible ici. Copiez les lignes dans un nouveau fichier avec Nano et adaptez la plage ip.

☝️
Note : C’est le bloc IP de 15 adresses réservé plus tôt. Ces IPs seront distribués par MetalLb et non par votre DHCP. Pas d’overlapp entre votre range DHCP et celui de MetalLB.
☝️
Note 2 : La première IP du range sera la VIP du service NAPP. Cette IP sera à associer avec un FQDN dans votre service DNS.

Une fois adapté à mon environnement j’ai le document suivant :

Dans votre serveur DNS associez la première IP de votre range  à un nom pour NAPP. Dans mon cas j'ai choisi « napp.vincelab.local ».

# On applique la configuration 
kubectl apply -f metallb-config.yaml 

Déploiement de NSX Application Plateform

On peut retourner à notre console web NSX pour la suite.

Le nouvel onglet prend place dans le menu System

On peut lancer le déploiement de NAPP

# Helm 
https://projects.registry.vmware.com/chartrepo/nsx_application_platform 

# Docker 
projects.registry.vmware.com/nsx_application_platform/clustering 

On commence par indiquer les repository Helm et Docker pour télécharger NAPP

Si les url sont validées le wizard indique la build qui sera déployée.

Cette onglet peut prendre un certain temps à se charger.

Pendant le chargement on peut en profiter pour récupérer sur mon bureau le fichier YAML crée à partir de la documentation VMware.

👉
J’ai utilisé WinSCP pour l’opération

Charger le fichier YAML de NAPP.

NSX nous rappel les limitations du form factor

Une fois le fichier chargé on sélectionne le Form Factor « Evaluation »

On accepte les limitations du form factor

Indiquez le FQDN du service NAPP (1 ère IP du range MetalLb) - A enregistrer dans votre DNS cf étape précédente.

On exécute les pré checks. Le Warning est un rappel d’avoir les appliances NSX et TCE synchronisées sur l’heure.

On peut déployer NAPP.

Le déploiement prend quelques dizaines de minutes.

Déploiement de NSX Intelligence

On arrive au gros morceau de ce guide !

Activer la fonctionnalité Intelligence depuis l'onglet NAPP.

Quelques pré checks

☝🏼
Note : la licence comprenant NSX Intelligence doit être ajoutée avant le déploiement.

Une fois les prés requis validés nous pouvons « activer » Intelligence.

Et au bout de 15 min…

Ce n’était pas bien compliqué !

Consommation active des ressources.