En aquest tema, explorarem diverses tècniques i estratègies per optimitzar el rendiment dels teus playbooks i rols d'Ansible. L'objectiu és assegurar que les teves automatitzacions siguin el més eficients possible, reduint el temps d'execució i minimitzant l'ús de recursos.

  1. Introducció a l'Ajust de Rendiment

L'ajust de rendiment en Ansible implica identificar i eliminar colls d'ampolla, optimitzar l'ús de recursos i assegurar que les tasques es completen de la manera més eficient possible. Alguns dels aspectes clau a considerar són:

  • Paral·lelisme: Executar tasques en paral·lel per reduir el temps total d'execució.
  • Optimització de Playbooks: Escriure playbooks de manera que minimitzin les operacions innecessàries.
  • Cache: Utilitzar mecanismes de cache per evitar la repetició de tasques costoses.
  • Configuració del Controlador: Ajustar la configuració del controlador d'Ansible per millorar el rendiment.

  1. Paral·lelisme

2.1. Configuració de forks

Ansible permet executar tasques en paral·lel utilitzant el paràmetre forks. Aquest paràmetre defineix el nombre de processos paral·lels que Ansible pot utilitzar.

# ansible.cfg
[defaults]
forks = 10

2.2. Utilització de async i poll

Per a tasques que poden trigar molt de temps, pots utilitzar async i poll per executar-les de manera asíncrona.

- name: Llarg procés
  command: /path/to/long_process
  async: 3600
  poll: 0

- name: Esperar que el llarg procés acabi
  async_status:
    jid: "{{ long_process.ansible_job_id }}"
  register: job_result
  until: job_result.finished
  retries: 30
  delay: 10

  1. Optimització de Playbooks

3.1. Evitar Tasques Innecessàries

Utilitza changed_when i check_mode per evitar l'execució de tasques innecessàries.

- name: Crear un fitxer només si no existeix
  command: touch /tmp/somefile
  args:
    creates: /tmp/somefile

3.2. Utilitzar gather_facts de manera selectiva

Recollir fets pot ser costós. Si no necessites tots els fets, desactiva'ls o recull només els necessaris.

- hosts: all
  gather_facts: no

O recull només els fets necessaris:

- hosts: all
  gather_facts: yes
  tasks:
    - setup:
        filter: "ansible_eth*"

  1. Cache

4.1. Cache de Fets

Utilitza la cache de fets per evitar recollir fets repetidament.

# ansible.cfg
[defaults]
fact_caching = jsonfile
fact_caching_connection = /tmp/ansible_cache
fact_caching_timeout = 86400

  1. Configuració del Controlador

5.1. Ajustar pipelining

Habilitar pipelining pot reduir el nombre de connexions SSH necessàries per executar tasques.

# ansible.cfg
[ssh_connection]
pipelining = True

5.2. Ajustar timeout

Ajustar el timeout per a connexions SSH pot ajudar a evitar que les tasques fallin per temps d'espera.

# ansible.cfg
[defaults]
timeout = 30

Exercicis Pràctics

Exercici 1: Configurar forks

  1. Modifica el fitxer ansible.cfg per establir forks a 15.
  2. Executa un playbook que contingui diverses tasques i observa la diferència en el temps d'execució.

Exercici 2: Utilitzar async i poll

  1. Escriu un playbook que executi una tasca llarga de manera asíncrona.
  2. Utilitza async_status per esperar que la tasca acabi.

Exercici 3: Cache de Fets

  1. Configura la cache de fets en el fitxer ansible.cfg.
  2. Executa un playbook que reculli fets i observa com es comporta la cache.

Conclusió

L'ajust de rendiment és una part crucial per assegurar que les teves automatitzacions amb Ansible siguin eficients i ràpides. Mitjançant l'ús de paral·lelisme, optimització de playbooks, cache de fets i configuració adequada del controlador, pots millorar significativament el rendiment dels teus playbooks. Practica aquestes tècniques amb els exercicis proporcionats per consolidar els teus coneixements.

© Copyright 2024. Tots els drets reservats