Benchmark OpenStack avec Rally

Rally est un outil de benchmark d'infrastructure OpenStack. Il est à différencier du projet Tempest destiné à tester la conformité fonctionnelle d'une infrastructure. En d'autres termes, Tempest valide que la réponse de votre API est conforme, alors que Rally vérifie le délai.

Pour cet article, j'ai utilisé Rally pour tester une nouvelle plateforme (bac à sable) OpenStack. J'ai donc choisi d'installer Rally en dehors de cet environnement, en l'occurence sur ma production.

Mise en place de l'environnement

Dans un souci de simplicité, j'ai téléchargé un container docker avec l'outil pré-installé. Une image Rally est disponible sur le registry docker. J'ai utilisé une instance nova classique pour télécharger et lancer l'image.

Après ces quelques commandes, je me retrouve sur le prompt de mon container, prêt à lancer les commandes Rally.

mkdir ~/rally_home ~/rally_db
docker pull rallyforge/rally
docker run -t -i -v ~/rally_home:/home/rally rallyforge/rally

Une fois dans votre container, il faut initialiser la BDD et charger les variables d'environnement contenant les indentifiants de la plateforme à tester.

export OS_PASSWORD=<votre_password>
export OS_AUTH_URL=<votre_authurl>
export OS_USERNAME=<votre_username>
export OS_TENANT_NAME=<votre_tenantname>

rally-manage db recreate
rally deployment create --fromenv --name=openstack_a_tester

Préparer et lancer un scénario

Nous allons créer un fichier json contenant un test assez simple : boot d'un serveur nova et suppression. Si vous souhaitez faire un autre test, le repository github de Rally contient bon nombre d'exemple.

Puisque c'est une instance qui va être lancée, il faut indiquer un type d'intance et un nom d'image. Rally permet de lister directement ces élements :

rally@bd45e3925df9:~$ rally show flavors

Flavors for user `admin` in tenant `admin`:
+----+------------+-------+----------+-----------+-----------+
| ID | Name       | vCPUs | RAM (MB) | Swap (MB) | Disk (GB) |
+----+------------+-------+----------+-----------+-----------+
| 1  | m1.small   | 1     | 2048     |           | 20        |
+----+------------+-------+----------+-----------+-----------+
rally@bd45e3925df9:~$ rally show images

Images for user `admin` in tenant `admin`:
+-------+---------------------------------------+------------+
| UUID  | Name                                  | Size (B)   |
+-------+---------------------------------------+------------+
| [...] | trusty-server-cloudimg-amd64-disk1    | 256573952  |
+-------+---------------------------------------+------------+

Nous pouvons maintenant écrire notre fichier de test, en n'oubliant pas de modifier la valeur de flavor et image avec un des résultat des commandes précédentes.

cat << EOF > ./mon_test.json
{
    "NovaServers.boot_and_delete_server": [
        {
            "args": {
                "flavor": {
                    "name": "m1.small"
                },
                "image": {
                    "name": "trusty-server-cloudimg-amd64-disk1"
                },
                "force_delete": false
            },
            "runner": {
                "type": "constant",
                "times": 10,
                "concurrency": 2
            },
            "context": {
                "users": {
                    "tenants": 3,
                    "users_per_tenant": 2
                }
            }
        }
    ]
}
EOF

C'est terminé, il ne reste plus qu'à lancer le benchmark.

rally task start ./mon_test.json

Génération d'un rapport

L'output de la commande Rally vous indique la commande pour générer un rapport au format json ou html.

rally task report dd2d3ccd-e1f4-42c9-9ab8-a4de6668db0c --out output.html

Le résultat est un rapport html, plutôt joli, contenant les résultats détaillés de tous vos tests.

Reporting Rally

Pierre FREUND

La discussion continue !

Nous attendons vos questions, remarques & mots doux sur notre Twitter :