Påskyndar Ansible med Mitogen

Ansible blev en av de mest populära Systemkonfigurationshantering. Efter köptes av Red Hat 2015 antalet projektdeltagare översteg tusentals och Ansible blev förmodligen det mest använda distributions- och orkestreringssystemet. Dess breda utbud av applikationer är mycket imponerande.

Ansible fungerar över SSH-anslutningar till fjärrvärdar. Den öppnar en SSH-session, loggar in, kopierar Python-koden över nätverket och skriver den till en separat temporär fil. Efter det kör den den här filen på fjärrmaskinen. Hela den här operationssekvensen är ganska lång och tråkig, så det finns olika sätt att optimera den.

Ett av dessa sätt är SSH pipelines som låter dig använda en SSH-session för att utföra instruktioner, istället för att öppna en ny session varje gång, vilket kan spara oss mycket tid. (Kom bara ihåg att stänga av requiretty inställning för sudo i din /etc/sudoers fil på fjärrmaskinen)

Ett nytt sätt att överklocka Ansible är ett pythonbibliotek som heter Mitogen. Om någon inte har hört talas om det, ska jag kort beskriva dess funktionalitet. Det tillåter snabb exekvering av python-kod på en fjärrdator, och Ansible är bara ett exempel på användning. Mitogen använder ett UNIX-rör på fjärrmaskinen och överför pythonkod komprimerad med zlib och serialiserad med pickle. Detta hjälper till att slutföra det snabbare och sparar trafik. Om du är intresserad av en mer detaljerad förklaring är det bäst att läsa om det på sidan "Hur det fungerar". Men idag kommer vi bara att fokusera på hur biblioteket fungerar med Ansible.

Mitogen kan under vissa omständigheter påskynda din Ansible-kod flera gånger och avsevärt minska trafikförbrukningen. Låt oss kolla in de mest populära användningsfallen och se hur mycket det hjälper oss.

Jag använder Ansible mest för: skapa konfigurationsfiler på en fjärrdator, installera paket, kopiera filer till och från fjärrmaskinen. Du kanske har andra exempel - skriv i kommentarerna.

Låt oss gå!

Mitogen-konfigurationen för Ansible är mycket enkel:
Installera Mitogen-biblioteket:

pip install mitogen

Nu finns det två likvärdiga sätt - antingen konfigurera alternativen i konfigurationsfilen ansible.cfg, eller ställ in nödvändiga miljövariabler.

Låt oss anta att vägen till den installerade Mitogen kommer att vara /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy. Sedan:

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

Låt oss installera Ansible i virtualenv, med och utan 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

Observera att Mitogen 0.2.7 inte fungerar med Ansible 2.8 (från och med maj 2019)

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

Låt oss nu försöka köra en spelbok som skapar filer på en fjärrdator:

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

Och låt oss köra det med och utan Mitogen för att skapa 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-faldig förbättring. Låt oss leta 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 ett resultat har vi accelererat utförandet med mer än 10 gånger!
Låt oss nu prova olika scenarier och se hur mycket snabbare allt fungerar för oss:

  • Skript för att kopiera filer till en fjärrvärd från en lokal (med modulen copy):
    Påskyndar Ansible med Mitogen

  • Skript för att skapa filer på en fjärrvärd med copy modul:
    Påskyndar Ansible med Mitogen

  • Scenario med nedladdning av filer från en fjärrvärd till en lokal:
    Påskyndar Ansible med Mitogen

Låt oss prova ett scenario med flera (3) fjärrmaskiner, till exempel ett scenario med kopiering av filer till en fjärrvärd:
Påskyndar Ansible med Mitogen

Som du kan se sparar Mitogen oss både tid och trafik i dessa scenarier. Men om flaskhalsen inte finns i Ansible, utan till exempel i I/O på en disk eller ett nätverk, eller någon annanstans, så är det svårt att förvänta sig att Mitogen kommer att hjälpa oss.

Låt oss prova ett skript med att installera paket med yum/dnf och python-moduler med hjälp av pip. Paketen cacheades för att inte bero på nätverksfel:

---
- 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, samma som utan.
På sidan Mitogen för Ansible sida du kan titta på andra riktmärken och tester. Som det står på sidan:

Mitogen kan inte påskynda modulen när den är igång. Det kan bara göra exekveringen av denna modul så snabbt som möjligt.

Därför är det viktigt att hitta dina flaskhalsar i din utplacering och om de beror på Ansible, så hjälper Mitogen dig att lösa dem och avsevärt påskynda exekveringen av dina playbooks.

Källa: will.com

Köp pålitlig hosting för webbplatser med DDoS-skydd, VPS VDS-servrar 🔥 Köp pålitlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster