De l’Hyperviseur à Kubernetes : Gestion Unifiée des VMs et Clusters via Harvester et Rancher

Avec la hausse significative des coûts des licences VMware suite à son rachat par Broadcom, de nombreuses entreprises recherchent des alternatives plus économiques et performantes pour gérer leurs infrastructures virtualisées. Harvester, une solution open-source d’infrastructure hyperconvergée (HCI), se présente comme une réponse efficace en combinant la gestion des machines virtuelles traditionnelles et des clusters Kubernetes sur une plateforme unifiée. Associé à Rancher, Harvester simplifie et automatise la gestion de ces infrastructures, tout en réduisant considérablement les coûts liés aux licences logicielles.

Dans cet article, nous vous guiderons à travers :

  • L’installation de Harvester.
  • La configuration réseau nécessaire avec des switches Cisco.
  • Le déploiement de Rancher avec un proxy configuré.
  • L’intégration de Harvester avec Rancher pour faciliter le provisionnement de clusters Kubernetes.

Harvester peut être une alternative viable à VMware pour les entreprises cherchant à moderniser leur infrastructure tout en réduisant les coûts opérationnels.

Partie 1 : Installation de Harvester

Prérequis

Avant de commencer l’installation de Harvester, assurez-vous d’avoir :

  • Accès à des serveurs physiques ou des VMs avec des cartes réseau configurées.
  • Accès réseau configuré avec le support PXE boot si nécessaire.
  • Un disque dédié pour le stockage des données.
  • Adresses IP : Adresses IP de management en cohérence avec le VLAN de management. Vous aurez besoin :
    • D’une adresse IP par nœud Harvester.
    • D’une adresse IP virtuelle (VIP) pour le keepalive, permettant d’accéder au cluster Harvester et d’ajouter d’autres nœuds.

Installation de Harvester

Evidemment vous devrez avoir des adresses IP de management en cohérence avec le VLAN de management. Il vous faudra autant d’IP que de nodes harvester et une IP de VIP pour le keepalive qui permet d’attaquer le cluster harvester en soit et d’ajouter d’autres noeuds.

Téléchargement et Démarrage :

  • Téléchargez l’image ISO de Harvester depuis le site officiel.
  • Démarrez le serveur avec l’image ISO pour lancer l’installation.

Configuration Initiale :

  • Paramètres Réseau :
    • Configurez les adresses IP de chaque nœud et la VIP du cluster Harvester.
    • Spécifiez le VLAN ID pour le VLAN de management si nécessaire.
    • Indiquez le proxy d’entreprise si vous en utilisez un.
  • Sécurité :
    • Définissez le token général du cluster.
    • Configurez le mot de passe d’accès au nœud.
    • Définissez le mot de passe admin pour l’interface Web.
  • Finalisation :
    • Accédez à l’interface Web de Harvester pour finaliser la configuration.
    • Pour une connexion SSH aux nœuds Harvester, utilisez l’utilisateur rancher.

Pour vous connecter en SSH sur votre node harvester, il faut utiliser l’utilisateur rancher

Partie 2 : Configuration Réseau Cisco

Configuration du Port de Gestion (mgmt-br)

Le pont de gestion (mgmt-br) est crucial pour la gestion du cluster Harvester. Voici comment configurer ce port sur un switch Cisco :

Configurer l’interface de gestion :

  • Accédez au mode de configuration du switch et configurez le port dédié à mgmt-br en mode access :
    switch# config terminal
    switch(config)# interface ethernet1/1
    switch(config-if)# switchport
    switch(config-if)# switchport mode access
    switch(config-if)# switchport access vlan 100
    switch(config-if)# no shutdown
    switch(config-if)# end
    switch# copy running-config startup-config

Cette configuration place le trafic de gestion sur le VLAN 100, isolant ainsi le trafic de gestion des autres réseaux.

Configuration du Port Trunk User

Le port trunk user permet d’acheminer le trafic réseau des VMs. Voici comment configurer ce port sur un switch Cisco :

Configurer l’interface trunk pour les VLANs :

  • Configurez l’interface trunk pour autoriser le trafic des VLANs utilisés par Harvester : switch# config terminal
    switch(config)# interface ethernet1/2
    switch(config-if)# switchport
    switch(config-if)# switchport mode trunk
    switch(config-if)# switchport trunk allowed vlan 100-200
    switch(config-if)# switchport trunk native vlan 1
    switch(config-if)# no shutdown
    switch(config-if)# end
    switch# copy running-config startup-config

Cette configuration permet de transporter le trafic des VLANs 100 à 200, utilisés par les VMs sur Harvester.

Partie 3 : Déploiement de Rancher-vCluster avec un Proxy

Déploiement du Rancher-vCluster

Le déploiement du Rancher-vCluster se fait via un fichier YAML fourni par Harvester.

Déployez le vCluster Rancher en appliquant le fichier YAML fourni :

kubectl apply -f https://raw.githubusercontent.com/harvester/experimental-addons/main/rancher-vcluster/rancher-vcluster.yaml

Activez l’addon :

  • Allez dans Advanced > Addons dans l’interface Harvester.
  • Indiquez le hostname souhaité (doit être un alias DNS de la VIP Harvester).
  • Définissez le mot de passe admin pour Rancher.

Vous pouvez voir l’ensemble du déploiement via la commande :
kubect get all -n rancher-vcluster

On peut voir les détails du StafefulSet via :
kubectl edit statefulset.apps/rancher-vcluster -n rancher-vcluster

(optionnel) Configurer le Proxy d’entreprise :

La seule solution que j’ai trouvé a été de patcher le StatefulSet, en effet, l’addon ne reprend pas la configuration proxy générale du cluster. Il faut donc, après le déploiement, patchez le StatefulSet pour ajouter les variables d’environnement pour le proxy.

Modifier le StatefulSet :

  • Éditez le StatefulSet de Rancher pour ajouter les variables d’environnement du proxy : kubectl edit deployment rancher -n cattle-system

Ajoutez les variables d’environnement dans la section env du conteneur :

- name: HTTP_PROXY
value: "http://proxy.test.fr:3128"
- name: HTTPS_PROXY
value: "http://proxy.test.fr:3128"
- name: NO_PROXY
value: "localhost,127.0.0.1,.svc,.cluster.local"

Accédez à l’interface Rancher via l’adresse spécifiée (par exemple, https://rancher.votre-domaine.com ou bien https://rancher.$vip.nip.io par exemple où VIP est la VIP configurée lors de l’installation d’harvester) pour finaliser la configuration.

Un patch potentiel pour appliquer la modification du proxy directement :

kubectl patch statefulset.apps/rancher-vcluster -n rancher-vcluster --type='json' -p='[{ "op": "add", "path": "/spec/template/spec/containers/0/env", "value": [ {"name": "HTTP_PROXY", "value": "http://proxy.test.fr:3128"}, {"name": "HTTPS_PROXY", "value": "http://proxy.test.fr:3128"}, {"name": "NO_PROXY", "value": "10.0.0.0/8,192.168.0.0/16,172.16.0.0/12,.svc,.cluster.local"} ] }]'

Partie 4 : Interfaçage de Rancher avec Harvester

Ajout d’Harvester comme provider dans Rancher

Partie Virtualization Management :

  • Dans Rancher, allez dans « Virtualization Management » et ajoutez Harvester en fournissant l’URL API et le token d’authentification que vous avez indiqué lors de l’installation d’harvester.

Configurer les Cloud Credentials :

  • Créez des credentials pour Harvester dans Rancher pour permettre le provisionnement des clusters Kubernetes via Rancher. Dans « Cluster Management », « Cloud Credentials » puis « Create », sélectionnez « Harvester », donnez lui un nom et, par défaut, vous verrez apparaitre le credential du cluster harvester importé précédemment.

Ajouter le feature flag « harvester-baremetal-container-workload »

  • Allez dans « Global Settings » puis « Feature Flag » puis activer « harvester-baremetal-container-workload »

Provisionner des Clusters via Rancher

Gestion et Monitoring

Rancher centralise la gestion et le monitoring de vos clusters Kubernetes, vous permettant de superviser facilement les ressources, les déploiements et les performances des nœuds.

Configuration VLAN dans Harvester

Avant de procéder à la création de vos clusters, configurez un réseau VLAN dans Harvester pour assurer une isolation et une segmentation réseau efficaces. Suivez ces étapes simples :

  1. Accédez à Networks : Dans l’interface de Harvester, allez dans Networks.
  2. Créez un nouveau réseau VLAN : Sous VM Networks, sélectionnez L2VLANNetwork.
  3. Configurez les paramètres :
    • VLAN ID : Indiquez l’identifiant VLAN spécifique qui doit évidemment être dans la liste des VLAN trunk que vous avez configuré sur le switch (100 à 200)
    • CIDR : Spécifiez le CIDR pour définir le sous-réseau.
    • Gateway : Renseignez la passerelle dans la section Route.

Ce réseau VLAN sera ensuite accessible dans Rancher lors de la création de vos clusters Kubernetes, facilitant une gestion réseau optimisée et sécurisée.

Créer un Nouveau Cluster

Vous pouvez créer des clusters Kubernetes directement depuis l’interface intuitive de Rancher. Pour ce faire, vous devrez utiliser des images cloud-init.

Configurer des Images Cloud-Init
Les images cloud-init sont essentielles pour automatiser la configuration des machines virtuelles lors du déploiement de clusters. Avec cloud-init, vous pouvez configurer le réseau, les utilisateurs, les packages, et bien plus encore, directement à la création de la VM.

Exemples de Configuration Cloud-Init (partie « Show Advanced » lors de la création du pool dans Rancher) :

  • Configuration Réseau Statique (dans « Network Data ») :
version: 2
ethernets:
  enp1s0:
    addresses:
      - 192.168.1.100/24
    gateway4: 192.168.1.1
    nameservers:
      search: [test.fr]
      addresses: [8.8.8.8]

Par défaut, la configuration réseau se fait via DHCP. Si vous n’avez pas de serveur DHCP, vous pouvez en déployer un via Harvester.

  • Création d’Utilisateurs avec Mot de Passe (dans « User Data ») :
#cloud-config
package_update: true
packages:
  - qemu-guest-agent

runcmd:
  - systemctl enable --now qemu-guest-agent.service

write_files:
  - path: /etc/apt/apt.conf.d/95proxies
    content: |
      Acquire::http::Proxy "http://proxy.test.fr:3128";
      Acquire::https::Proxy "http://proxy.test.fr:3128";

users:
  - name: pascal.mietlicki
    groups: users, wheel
    sudo: "ALL=(ALL) NOPASSWD:ALL"
    shell: /bin/bash
    lock_passwd: false
    ssh_authorized_keys:
      - |
        ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCxYXJkYcm+Xff5j5VwL5f6aGV/ubGVtl4mXO7UyptbfV7xd/y5bsvV1RKlq3H5kK1mc/dgS0UO1yEwRVfZcJfddPvsgh7KL71RPR2vG3mzUJk6xUumCbh8jD4oaF1t6Ywpq4+WrMXYfjgA4fhgt3DwEeoMbLMBfVQsl+y9BAGbw8x7F8q93fy2c9FR0f4zL2kCJeJFA/E+Kh5aXprHkT72RnQ/QCKSH7RqY39RGt1VhbFci+5OjfLqkJUSecLwSMFmlHfsVG0U7Apf4oxk8UksMYFtrJS6cA7nXwB/ZB7j44Dk+7KxCV/BWmI1+qSXygdr7Wa6Nd3SgJZm7E5rxLaZ pascal.mietlicki

Avantages de Cloud-Init : L’utilisation d’images cloud-init permet d’automatiser et de standardiser la configuration des VMs, réduisant ainsi les erreurs et améliorant la reproductibilité des environnements. Vous pouvez préconfigurer des réseaux, installer des outils nécessaires au déploiement des clusters Kubernetes, et définir des utilisateurs pour une gestion plus facile.

Conclusion

En suivant cet article, vous avez installé Harvester, configuré le réseau de gestion et le trunk user via un switch Cisco, déployé un vcluster pour rancher avec un proxy configuré, et intégré Harvester avec Rancher pour un provisionnement facile des clusters Kubernetes. Cette configuration permet une gestion centralisée et efficace de votre infrastructure virtualisée et de vos clusters Kubernetes.

Ressources Supplémentaires