Académique Documents
Professionnel Documents
Culture Documents
VOTRE PLAYBOOK
Introduction
d'agent sur des hôtes gérés, plus d'informations ici). Dans la plupart des cas, vous
utiliseriez une connexion avec le protocole ssh pour configurer vos serveurs
génère l'exécution de tâches, l'envoie à l'hôte distant, l'exécute, attend les résultats,
lit les résultats, les analyses et continue vers la tâche suivante. Dans cet article, nous
Tout au long de cet article, nous prendrons comme exemple de test le playbook ci-
- hosts: test
vars:
- test_path: "/home/hatim/hatim.txt"
tasks:
- name: "Send {{ test_path }}"
copy:
content: "Ceci est une ligne de test"
dest: '{{ test_path }}'
mesurer les performances des tâches de notre playbook. Pour, ce faire nous
valeurs suivantes :
[defaults]
callback_whitelist = timer, profile_tasks
Après avoir ajouté cette ligne, vous commencerez à voir le temps d'exécution de
ansible-playbook main.yml
Résultat :
ansible-playbook ). Vous remarquerez que cette étape nous a pris 3.16s de temps
d'exécution. Si vous n'avez pas besoin de récupérer les facts, alors cette étape peut
- hosts: test
gather_facts: no
# suite de votre playbook
ansible-playbook main.yml
Résultat :
=======================================================
Send /home/hatim/hatim.txt ---------------------- 1.62s
Add text in /home/hatim/hatim.txt --------------- 0.79s
Playbook run took 0 days, 0 hours, 0 minutes, 2 seconds
d'intercepter exactement juste ce dont vous avez besoin, il suffit alors d'affiner la
- hosts: test
gather_facts: no
vars:
- test_path: "/home/hatim/hatim.txt"
pre_tasks:
- name: Collect only facts returned by network
setup:
gather_subset:
- '!all'
- '!any'
- 'network'
tasks:
- debug:
msg: 'Mon ip {{ ansible_default_ipv4.address }}'
# suite du playbook
facts :
hardware : recueillir des facts sur le matériel (facts les plus longs à récupérer).
virtual : recueillir des informations sur les machines virtuelles hébergées sur
la machine.
[defaults]
gather_subset = !hardware,!ohai,!facte
demanderons à Ansible de conserver les facts pour un hôte donné qu'il recueille
dans un fichier local. Vous pouvez également définir d'autre type de cache
(memcache, redis etc ... plus d'informations ici). Pour ce faire, il suffit de rajouter
comme suit :
[defaults]
fact_caching_connection = /tmp/.ansible_fact_cache
fact_caching = jsonfile
fact_caching_timeout = 7200
Information
Le protocole ssh
Laissez-moi d'abord vous expliquer de façon très simple, le workflow par défaut
4. Connexion via SSH pour détecter l'existence de notre fichier distant et rajouter
la ligne adéquate.
6. Résumé de l'exécution.
Vous remarquerez alors qu'ansible utilise à chaque fois le protocole ssh pour
exécuter ses tâches. Il est donc important de s'intéresser de plus près à ce protocole
Dans cette section, je vais vous dévoiler quelques astuces qui vous permettront
façon dont le serveur maître utilise le protocole ssh pour communiquer avec vos
nombre de tâches ou que vous exécutez sur un grand nombre d'hôtes, ou les deux.
Le multiplexage SSH
L'idée derrière le multiplexage SSH est qu'une fois qu'une connexion ssh est établie
période de temps donnée. Donc, chaque fois que vous devez réexécuter vos tâches
Nous allons dans un premier lieu, vérifier comment le protocole ssh est utilisé pour
une simple exécution du module ping, pour cela exécuter la commande suivante
Résultat filtré :
Les options affichées sont des options de la commande ssh , ci-dessous leur
explication :
Une fois que nous avons fait le tour sur l'explication des différentes options utilisées
par défaut par ansible, on peut alors s'imaginer les modifications suivantes pour un
gain de performances :
valeur de ControlPersist .
Si vous utilisez uniquement des clés publiques pour la connexion ssh avec les
[ssh_connection]
ssh_args = -o ControlMaster=auto -o ControlPersist=2h -o PreferredAuthentications=publickey
control_path = %(directory)s/ansible-ssh-%%h-%%p-%%r
L'option control_path n'est pas obligatoire mais je l'ai rajoutée pour sauvegarder
de manière plus agréable notre fichier socket (%%h => host, %%p => port, %%r =>
ls -l /home/hatim/.ansible/cp/
Résultat :
MISE EN GARDE
long, il peut y avoir un problème potentiel de non connectivité. Voici par exemple
un scénario qui m'est déjà arrivé : Mon pc s'est mis en veille et au moment de
jamais vous êtes dans ce cas de problème alors tuez les processus contenant le
mot 'ssh' et '[mux]', cela pourrait être fait avec la commande suivante :
ps faux | grep ssh | grep "\[mux\]" | awk '{print $2}' | xargs kill
Le Pipelining ssh
La pipeline shh est la méthode Ansible moderne pour accélérer vos connexions ssh
sur le réseau vers les hôtes gérés. C'est une fonctionnalité qui permet de réduire le
nombre de connexions ssh à un hôte. Lorsqu'elle est activée, l'exécution d'un module
se fait en passant les instructions à l'hôte via SSH, les instructions sont alors écrites
directement sur le canal STDIN depuis l'interpréteur python, cela conduirait alors à
de meilleures performances.
pipeline utilisée sans et avec cette option. Pour ce faire, nous lancerons le module
ansible-playbook main.yml
Résultat résumé :
Voici ci-dessous le workflow avec le mode pipeline activé afin de mieux ce qui se
passe en arrière-plan :
1. Génération d'un fichier python avec le module et ses paramètres pour une
exécution à distance.
5. Résumé de l'exécution.
Nous passons alors d'une seule connexion SSH au lieu de quatre ! Multipliez
[ssh_connection]
pipelining = True
MISE EN GARDE
gérés.
Forks
Les forks sont le nombre de processus parallèles à générer lors de la communication
avec des hôtes distants. Par défaut, Ansible règle la valeur fork sur 5, ce qui signifie
qu'à tout moment donné, Ansible peut exécuter jusqu'à 5 exécutions parallèles.
[defaults]
forks = 10
Attention
Free Strategy
Il existe deux types de stratégies dans ansible. Celle qui est utilisée par défaut est la
stratégie serial (linéaire) dans laquelle chaque tâche attend la fin de chaque hôte
Voici un exemple de scénario qui m'est déjà arrivé aussi : Mon but était d'installer
un serveur NGINX sur cinq serveurs différents et l'un de ces serveurs avait un verrou
Yum, les quatre autres serveurs n'ont pas pu donc continuer leurs tâches. Pour
éviter ce type de problème, nous utiliserons la stratégie free (libre), pour ce faire, il
- hosts: test
strategy: free
tasks:
# suite de votre playbook
Attention
Pour les playbooks avec des dépendances entre les nœuds, cela pourrait être
dangereux, mais pour la plupart des cas d'utilisation, une stratégie libre est
idéale.
Conclusion
exécutions de vos playbooks Ansible. Sachez juste que ces astuces d'optimisations
s'adaptent à des besoins précis, et certains d'entre eux nécessitent soit au préalable
N'oubliez pas aussi que d'autres gains de vitesse sont possibles en optimisant le