Passer au contenu principal

Expertise (Ansible)

Optimisation et performances

Sur 10 serveurs, un playbook prend 2 minutes. Sur 200 serveurs, sans optimisation, les mêmes 2 minutes peuvent devenir 20. Les gains sont souvent spectaculaires avec des changements de configuration simples.

SSH Pipelining

Par défaut, Ansible transfère le module Python en fichier temporaire, l'exécute, puis le supprime : 3 connexions SSH par tâche. Le pipelining réduit ça à 1.

[ssh_connection]
pipelining = True

Prérequis : requiretty désactivé dans /etc/sudoers (défaut sur Debian). Gain : 3 à 5x.

SSH Multiplexing

[ssh_connection]
pipelining = True
ssh_args = -o ControlMaster=auto -o ControlPersist=60s -o ControlPath=/tmp/ansible-ssh-%%h-%%p-%%r

Mitogen

Mitogen maintient un interpréteur Python persistant sur les cibles, évitant de relancer Python à chaque tâche. Gain : 5 à 10x.

Note de compatibilité : Mitogen supporte officiellement ansible-core jusqu'à 2.16. Le support 2.17+ est partiel et expérimental (voir mitogen-hq/mitogen). Pour ansible-core 2.18+, tester en environnement non-critique avant tout déploiement.

pip install mitogen
# Trouver le chemin d'installation
python3 -c "import mitogen; print(mitogen.__file__)"
# Exemple : /usr/local/lib/python3.11/dist-packages/mitogen/__init__.py
# Le chemin strategy_plugins sera : /usr/local/lib/python3.11/dist-packages/ansible_mitogen/plugins/strategy
[defaults]
strategy_plugins = /usr/local/lib/python3.11/dist-packages/ansible_mitogen/plugins/strategy
strategy = mitogen_linear

Fact Caching

[defaults]
gathering = smart
fact_caching = redis
fact_caching_connection = localhost:6379:0
fact_caching_timeout = 86400
# Vider le cache
ansible all -m meta -a "clear_facts"

Profiler les tâches

[defaults]
callbacks_enabled = profile_tasks, timer

Affiche le temps par tâche trié par durée. Identifie immédiatement les goulots d'étranglement.

Tuning des forks

Point de départ : forks = CPU_noeud_controle * 2. Au-delà, les connexions SSH concurrentes peuvent saturer le réseau.

time ansible-playbook site.yml -f 10
time ansible-playbook site.yml -f 20
time ansible-playbook site.yml -f 50