Accelerare Ansible con Mitogen

ansible è diventato uno dei più popolari Gestione della configurazione del sistema. A seguito di è stato acquistato da Red Hat nel 2015 il numero partecipanti al progetto ha superato le migliaia e Ansible è diventato probabilmente il sistema di distribuzione e orchestrazione più utilizzato. La sua vasta gamma di applicazioni è davvero impressionante.

Ansible funziona tramite connessioni SSH a host remoti. Apre una sessione SSH, accede, copia il codice Python sulla rete e lo scrive in un file temporaneo separato. Successivamente, esegue questo file sul computer remoto. Tutta questa sequenza di operazioni è piuttosto lunga e noiosa, quindi ci sono vari modi per ottimizzarla.

Uno di questi modi è Condutture SSH che ti consente di utilizzare una sessione SSH per eseguire istruzioni, anziché aprire una nuova sessione ogni volta, il che può farci risparmiare molto tempo. (Ricordati solo di spegnere requiretty impostazione per sudo nel tuo /etc/sudoers file sul computer remoto)

Un nuovo modo per overclockare Ansible è una libreria Python chiamata mitogeno. Se qualcuno non ne ha sentito parlare, descriverò brevemente il suo funzionamento. Consente l'esecuzione rapida del codice Python su una macchina remota e Ansible è solo un esempio di utilizzo. Mitogen utilizza una pipe UNIX sulla macchina remota e trasferisce il codice Python compresso con zlib e serializzato con pickle. Ciò aiuta a completarlo più velocemente e a risparmiare traffico. Se sei interessato a una spiegazione più dettagliata, è meglio leggerla nella pagina "Come funziona". Ma oggi ci concentreremo solo su come funziona la libreria con Ansible.

Mitogen in determinate circostanze può velocizzare più volte il tuo codice Ansible e ridurre significativamente il consumo di traffico. Diamo un'occhiata ai casi d'uso più popolari e vediamo quanto ci aiuta.

Utilizzo Ansible principalmente per: creare file di configurazione su un computer remoto, installare pacchetti, copiare file da e verso il computer remoto. Forse hai altri esempi: scrivi nei commenti.

Andiamo!

La configurazione di Mitogen per Ansible è molto semplice:
Installa la libreria Mitogen:

pip install mitogen

Ora ci sono due modi equivalenti: configurare le opzioni nel file di configurazione ansible.cfg o impostare le variabili di ambiente necessarie.

Supponiamo che il percorso del Mitogen installato sarà /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy. Quindi:

export ANSIBLE_STRATEGY_PLUGINS=/usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy
export ANSIBLE_STRATEGY=mitogen_linear

o

[defaults]
strategy = mitogen_linear
strategy_plugins = /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy

Installiamo Ansible in virtualenv, con e senza Mitogen:

virtualenv mitogen_ansible
./mitogen_ansible/bin/pip install ansible==2.7.10 mitogen
virtualenv pure_ansible
./pure_ansible/bin/pip install ansible==2.7.10

Tieni presente che Mitogen 0.2.7 non funziona con Ansible 2.8 (a partire da maggio 2019)

Creare alias:

alias pure-ansible-playbook='$(pwd)/pure_ansible/bin/ansible-playbook'
alias mitogen-ansible-playbook='ANSIBLE_STRATEGY_PLUGINS=$(pwd)/mitogen_ansible/lib/python3.7/site-packages/ansible_mitogen/plugins/strategy ANSIBLE_STRATEGY=mitogen_linear $(pwd)/mitogen_ansible/bin/ansible-playbook'

Ora proviamo a eseguire un playbook che crea file su un computer remoto:

---
- hosts: all
  gather_facts: false
  tasks:
    - name: Create files with copy content module
      copy:
        content: |
          test file {{ item }}
        dest: ~/file_{{ item }}
      with_sequence: start=1 end={{ n }}

Eseguiamolo con e senza Mitogen per creare 10 file:

time mitogen-ansible-playbook file_creation.yml -i hosts -e n=10 &>/dev/null

real    0m2.603s
user    0m1.152s
sys     0m0.096s

time pure-ansible-playbook file_creation.yml -i hosts -e n=10 &>/dev/null

real    0m5.908s
user    0m1.745s
sys     0m0.643s

Vediamo un miglioramento di 2 volte. Controlliamo 20, 30, ..., 100 file:

time pure-ansible-playbook file_creation.yml -i hosts -e n=100 &>/dev/null

real    0m51.775s
user    0m8.039s
sys     0m6.305s

time mitogen-ansible-playbook file_creation.yml -i hosts -e n=100 &>/dev/null

real    0m4.331s
user    0m1.903s
sys     0m0.197s

Di conseguenza, abbiamo accelerato l’esecuzione di oltre 10 volte!
Ora proviamo diversi scenari e vediamo quanto più velocemente tutto funziona per noi:

  • Script per copiare file su un host remoto da uno locale (con il modulo copy):
    Accelerare Ansible con Mitogen

  • Script per creare file su un host remoto con copy modulo:
    Accelerare Ansible con Mitogen

  • Scenario con il download di file da un host remoto a uno locale:
    Accelerare Ansible con Mitogen

Proviamo uno scenario con diverse (3) macchine remote, ad esempio uno scenario con la copia di file su un host remoto:
Accelerare Ansible con Mitogen

Come puoi vedere, Mitogen ci fa risparmiare tempo e traffico in questi scenari. Ma se il collo di bottiglia non è in Ansible, ma ad esempio nell’I/O di un disco o di una rete, o da qualche altra parte, allora è difficile aspettarsi che Mitogen ci aiuti.

Proviamo uno script con l'installazione di pacchetti con moduli yum/dnf e python utilizzando pip. I pacchetti sono stati memorizzati nella cache in modo da non dipendere da problemi di rete:

---
- hosts: all
  gather_facts: false
  tasks:
    - name: Install packages
      become: true
      package:
        name:
          - samba
          - httpd
          - nano
          - ruby
        state: present

    - name: Install pip modules
      become: true
      pip:
        name:
          - pytest-split-tests
          - bottle
          - pep8
          - flask
        state: present

Con Mitogen ci sono voluti 12 secondi, come senza.
Sulla pagina Mitogen per la pagina Ansible puoi guardare altri benchmark e test. Come recita la pagina:

Mitogen non può accelerare il modulo quando è in esecuzione. Può solo rendere l'esecuzione di questo modulo il più veloce possibile.

Pertanto, è importante trovare i colli di bottiglia nella tua distribuzione e, se sono dovuti ad Ansible, Mitogen ti aiuterà a risolverli e ad accelerare significativamente l'esecuzione dei tuoi playbook.

Fonte: habr.com

Acquista hosting affidabile per siti con protezione DDoS, server VPS VDS 🔥 Acquista un hosting web affidabile con protezione DDoS, server VPS e VDS | ProHoster