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.
Pierre FREUND
Découvrez les derniers articles d'alter way
- Big Data & AI Paris 2024 : L'IA au cœur de toutes les transformations.
- Un retour vers l'open-source ? Vos outils DevOps préférés et leurs equivalents open-source.
- Prowler : L'outil de sécurité multi-cloud indispensable pour renforcer votre infrastructure
- Kubernetes : plateforme "star" de l'IT et levier d'innovation des entreprises
- AI_dev2024
- : DirectPV : Avoir du stockage bloc distribué facilement dans kubernetes