Fremskynder Ansible med Mitogen

Ansible blev en af ​​de mest populære Systemkonfigurationsstyring. Efter blev købt af Red Hat i 2015 tallet projektdeltagere oversteg tusinder og Ansible blev nok det mest brugte implementerings- og orkestreringssystem. Dens brede vifte af applikationer er meget imponerende.

Ansible fungerer over SSH-forbindelser til fjernværter. Den åbner en SSH-session, logger på, kopierer Python-koden over netværket og skriver den til en separat midlertidig fil. Derefter kører den denne fil på den eksterne maskine. Hele denne sekvens af operationer er ret lang og kedelig, så der er forskellige måder at optimere den på.

En af disse måder er SSH rørledninger som giver dig mulighed for at bruge én SSH-session til at udføre instruktioner i stedet for at åbne en ny session hver gang, hvilket kan spare os for meget tid. (Husk blot at slukke requiretty indstilling for sudo i din /etc/sudoers fil på den eksterne maskine)

En ny måde at overclocke Ansible på er et python-bibliotek kaldet Mitogen. Hvis nogen ikke har hørt om det, vil jeg kort beskrive dets funktionalitet. Det tillader hurtig eksekvering af python-kode på en ekstern maskine, og Ansible er blot et eksempel på brug. Mitogen bruger et UNIX-rør på fjernmaskinen og overfører python-kode komprimeret med zlib og serialiseret med pickle. Dette hjælper med at fuldføre det hurtigere og sparer trafik. Hvis du er interesseret i en mere detaljeret forklaring, er det bedst at læse om det på siden "Hvordan det virker". Men i dag vil vi kun fokusere på, hvordan biblioteket arbejder med Ansible.

Mitogen kan under visse omstændigheder fremskynde din Ansible-kode flere gange og reducere trafikforbruget betydeligt. Lad os se de mest populære use cases og se, hvor meget det hjælper os.

Jeg bruger Ansible mest til: oprettelse af konfigurationsfiler på en fjernmaskine, installation af pakker, kopiering af filer til og fra fjernmaskinen. Måske har du andre eksempler - skriv i kommentarerne.

Lad os gå!

Mitogen-konfigurationen til Ansible er meget enkel:
Installer Mitogen-biblioteket:

pip install mitogen

Nu er der to ækvivalente måder - enten konfigurer indstillingerne i ansible.cfg konfigurationsfilen, eller indstil de nødvendige miljøvariabler.

Lad os antage, at stien til den installerede Mitogen vil være /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy. Derefter:

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

eller

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

Lad os installere Ansible i virtualenv, med og uden 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

Bemærk venligst, at Mitogen 0.2.7 ikke virker med Ansible 2.8 (fra maj 2019)

Oprettelse af aliaser:

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'

Lad os nu prøve at køre en afspilningsbog, der opretter filer på en fjernmaskine:

---
- 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 }}

Og lad os køre det med og uden Mitogen for at oprette 10 filer:

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

Vi ser en 2-fold forbedring. Lad os se efter 20, 30, ..., 100 filer:

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

Som et resultat fremskyndede vi eksekveringen med mere end 10 gange!
Lad os nu prøve forskellige scenarier og se, hvor meget hurtigere alt fungerer for os:

  • Script til kopiering af filer til en ekstern vært fra en lokal (med modulet copy):
    Fremskynder Ansible med Mitogen

  • Script til at oprette filer på en fjernvært med copy modul:
    Fremskynder Ansible med Mitogen

  • Scenarie med download af filer fra en ekstern vært til en lokal:
    Fremskynder Ansible med Mitogen

Lad os prøve et scenarie med flere (3) fjernmaskiner, for eksempel et scenarie med kopiering af filer til en fjernvært:
Fremskynder Ansible med Mitogen

Som du kan se, sparer Mitogen os både tid og trafik i disse scenarier. Men hvis flaskehalsen ikke er i Ansible, men for eksempel i I/O på en disk eller et netværk, eller et andet sted, så er det svært at forvente, at Mitogen vil hjælpe os.

Lad os prøve et script med at installere pakker med yum/dnf og python-moduler ved hjælp af pip. Pakkerne blev cachelagret for ikke at afhænge af netværksfejl:

---
- 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

Med Mitogen tog det 12 sekunder, det samme som uden.
På siden Mitogen for Ansible side du kan se på andre benchmarks og tests. Som der står på siden:

Mitogen kan ikke fremskynde modulet, når det kører. Det kan kun gøre udførelsen af ​​dette modul så hurtig som muligt.

Derfor er det vigtigt at finde dine flaskehalse i din udrulning og hvis de skyldes Ansible, så vil Mitogen hjælpe dig med at løse dem og fremskynde eksekveringen af ​​dine playbooks markant.

Kilde: www.habr.com

Tilføj en kommentar