Fremskynder Ansible med Mitogen

Ansible ble en av de mest populære Systemkonfigurasjonsadministrasjon. Etter ble kjøpt av Red Hat i 2015 tallet prosjektdeltakere oversteg tusenvis og Ansible ble sannsynligvis det mest brukte distribusjons- og orkestreringssystemet. Det brede spekteret av bruksområder er veldig imponerende.

Ansible fungerer over SSH-tilkoblinger til eksterne verter. Den åpner en SSH-sesjon, logger på, kopierer Python-koden over nettverket og skriver den til en egen midlertidig fil. Etter det kjører den denne filen på den eksterne maskinen. Hele denne operasjonssekvensen er ganske lang og kjedelig, så det er forskjellige måter å optimalisere den på.

En av disse måtene er SSH rørledninger som lar deg bruke én SSH-økt til å utføre instruksjoner, i stedet for å åpne en ny økt hver gang, noe som kan spare oss for mye tid. (Bare husk å slå av requiretty innstilling for sudo i din /etc/sudoers fil på den eksterne maskinen)

En ny måte å overklokke Ansible på er et python-bibliotek som heter Mitogen. Hvis noen ikke har hørt om det, vil jeg kort beskrive funksjonaliteten. Den tillater rask utførelse av python-kode på en ekstern maskin, og Ansible er bare ett eksempel på bruk. Mitogen bruker et UNIX-rør på den eksterne maskinen og overfører pythonkode komprimert med zlib og serialisert med pickle. Dette bidrar til å fullføre det raskere og sparer trafikk. Hvis du er interessert i en mer detaljert forklaring, er det best å lese om det på siden "Hvordan det fungerer". Men i dag skal vi kun fokusere på hvordan biblioteket fungerer med Ansible.

Mitogen kan under visse omstendigheter øke hastigheten på Ansible-koden flere ganger og redusere trafikkforbruket betydelig. La oss sjekke ut de mest populære brukstilfellene og se hvor mye det hjelper oss.

Jeg bruker Ansible mest for: å lage konfigurasjonsfiler på en ekstern maskin, installere pakker, kopiere filer til og fra den eksterne maskinen. Kanskje du har andre eksempler - skriv i kommentarfeltet.

La oss gå!

Mitogen-konfigurasjonen for Ansible er veldig enkel:
Installer Mitogen-biblioteket:

pip install mitogen

Nå er det to tilsvarende måter - enten konfigurer alternativene i konfigurasjonsfilen ansible.cfg, eller angi de nødvendige miljøvariablene.

La oss anta at banen til den installerte Mitogen vil være /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy. Deretter:

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

La oss installere Ansible i virtualenv, med og uten 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

Vær oppmerksom på at Mitogen 0.2.7 ikke fungerer med Ansible 2.8 (per mai 2019)

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

La oss nå prøve å kjøre en spillebok som lager filer på en ekstern maskin:

---
- 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 la oss kjøre den med og uten Mitogen for å lage 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 dobbel forbedring. La oss se etter 2, 20, ..., 30 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 akselererte vi utførelsen med mer enn 10 ganger!
La oss nå prøve forskjellige scenarier og se hvor mye raskere alt fungerer for oss:

  • Skript for å kopiere filer til en ekstern vert fra en lokal (med modulen copy):
    Fremskynder Ansible med Mitogen

  • Skript for å lage filer på en ekstern vert med copy modul:
    Fremskynder Ansible med Mitogen

  • Scenario med nedlasting av filer fra en ekstern vert til en lokal:
    Fremskynder Ansible med Mitogen

La oss prøve et scenario med flere (3) eksterne maskiner, for eksempel et scenario med kopiering av filer til en ekstern vert:
Fremskynder Ansible med Mitogen

Som du ser sparer Mitogen oss for både tid og trafikk i disse scenariene. Men hvis flaskehalsen ikke er i Ansible, men for eksempel i I/O på en disk eller et nettverk, eller et annet sted, så er det vanskelig å forvente at Mitogen vil hjelpe oss.

La oss prøve et skript med å installere pakker med yum/dnf og python-moduler ved å bruke pip. Pakkene ble bufret for ikke å være avhengig av nettverksfeil:

---
- 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 tok det 12 sekunder, det samme som uten.
Side Mitogen for Ansible side du kan se på andre benchmarks og tester. Som det står på siden:

Mitogen kan ikke øke hastigheten på modulen når den kjører. Det kan bare gjøre utførelsen av denne modulen så rask som mulig.

Derfor er det viktig å finne flaskehalsene dine i distribusjonen din, og hvis de skyldes Ansible, vil Mitogen hjelpe deg med å løse dem og øke hastigheten på utførelsen av spillebøkene betydelig.

Kilde: www.habr.com

Legg til en kommentar