Mettre en place un cluster de VMs avec Ansible

Pour lancer le réseau de test de Duniter V2S ou bien pour créer un point d’entrée fiable avec les indexeurs de type subsquid, ou pour d’autres besoins, nous devons créer un cluster de machines.

Avant d’utiliser un cluster fait de machines physiques ou de VPS pour la phase de production, on doit pouvoir créer et détruire rapidement un cluster de machine virtuelles.

Je viens de le faire sur une machine « headless » en utilisant un rôle Ansible dédié à cette tâche :

Ce dépôt est un exemple bien documenté à modifier.

Il nécessite python3 et ansible installé. Il installe automatiquement le rôle Ansible dans le dossier dédié via un git clone. Il utilise le trio libvirt / kvm / qemu.

Par défaut, l’hôte kvm qui héberge les VMs est la machine locale qui lance le Ansible.
Pou ma part, j’ai modifier inventory/kvmhost.yml pour créer le cluster sur une machine dédiée via ssh :

kvmhost:
  hosts:
    ## Put your KVM host connection and settings here
#    localhost:
#      ansible_connection: local
    192.168.1.103:
      ansible_connection: ssh

J’ai ensuite créé un fichier « inventory » pour mon cluster dans inventory/cluster.yml :

---
## YAML based inventory, see:
## https://docs.ansible.com/ansible/latest/plugins/inventory/yaml.html
#
## Simple example using defaults to spin up 3 CentOS guests
## This is on multiple KVM hosts, see kvmhost.yml
cluster:
  hosts:
    cluster-debian-10-[1:3]:
      virt_infra_state: running
      virt_infra_distro: debian
      virt_infra_distro_image: debian-10-openstack-amd64.qcow2
      virt_infra_distro_image_url: http://cdimage.debian.org/cdimage/openstack/current-10/debian-10-openstack-amd64.qcow2
      virt_infra_distro_image_checksum_url: http://cdimage.debian.org/cdimage/openstack/current-10/SHA512SUMS
      virt_infra_variant: debiantesting
#      virt_infra_disk_cmd:
#        - apt-get update
#        - apt-get install -y netselect-apt
#        - netselect-apt -n -o /etc/apt/sources.list
  vars:
    ansible_python_interpreter: /usr/libexec/platform-python

Pour lancer la recette, taper à la racine du dépôt :

./run.sh --limit kvmhost,cluster

Une erreur signalera de télécharger l’image disque de la distribution des VMs dans le dossier dédié sur l’hôte. Le second lancement devrait fonctionner et lancer 3 VMs.

Si vous êtes intéressé à contribuer à l’infra de dev du projet, pouvez-vous essayer cette recette Ansible ?

2 Likes

J’ai pu faire le test maintenant que j’ai recyclé une vieille bécane qui ne servait plus. Ça marche comme tu le décris.

2 Likes