Percepat Ansible dengan Mitogen

Ansible telah menjadi salah satu sistem Manajemen Konfigurasi yang paling populer. Setelah Red Hat dibeli pada 2015, jumlah peserta proyek melebihi ribuan dan Ansible mungkin merupakan sistem penyebaran dan orkestrasi yang paling banyak digunakan. Aplikasi luasnya sangat mengesankan.


Kemungkinan bekerja melalui koneksi SSH ke host jarak jauh. Ini membuka sesi SSH, membuat login, menyalin kode Python melalui jaringan dan menulisnya ke file sementara yang terpisah. Setelah itu, ia menjalankan file ini di mesin jarak jauh. Keseluruhan urutan operasi ini cukup panjang dan membosankan, jadi ada berbagai cara untuk mengoptimalkannya.


Salah satu metode ini adalah saluran pipa SSH yang memungkinkan Anda untuk menggunakan satu sesi SSH untuk menjalankan instruksi, daripada membuka sesi baru setiap kali, yang dapat menghemat banyak waktu bagi kami. (Ingatlah untuk menonaktifkan pengaturan yang diperlukan untuk sudo di /etc/sudoers pada mesin jarak jauh)


Cara baru untuk "overclock" Ansible adalah dengan perpustakaan python yang disebut Mitogen . jika seseorang belum pernah mendengarnya, maka saya akan menjelaskan secara singkat fungsinya. Ini memungkinkan eksekusi kode python dengan cepat pada mesin jarak jauh, dan Ansible hanyalah satu kasus penggunaan. Mitogen menggunakan pipa UNIX pada mesin jarak jauh dan melewati kode python yang dikompresi zlib dan diserialisasi menggunakan acar. Ini membantu untuk mengeksekusinya lebih cepat dan menghemat lalu lintas. Jika Anda tertarik dengan penjelasan yang lebih terperinci, yang terbaik adalah membacanya di halaman Cara Kerja . Tapi hari ini kita akan fokus hanya pada perpustakaan dengan Ansible.


Mitogen dalam keadaan tertentu dapat mempercepat kode Ansible Anda beberapa kali dan secara signifikan mengurangi konsumsi lalu lintas. Mari kita periksa kasus penggunaan paling populer dan lihat bagaimana ini membantu kita.


Kebanyakan dari semua saya menggunakan Ansible untuk: membuat file konfigurasi pada mesin jarak jauh, menginstal paket, menyalin file ke dan dari mesin jarak jauh. Mungkin Anda punya contoh lain - tulis di komentar.


Ayo pergi!


Konfigurasi Mitogen for Ansible sangat sederhana:
Instal perpustakaan Mitogen:


 pip install mitogen 

Sekarang ada dua cara yang setara - baik untuk mengkonfigurasi opsi dalam file konfigurasi ansible.cfg, atau untuk mengatur variabel lingkungan yang diperlukan.


Misalkan jalur ke Mitogen yang terinstal adalah /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy . Lalu:


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

atau


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

Instal Ansible di virtualenv, dengan dan tanpa 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 

Harap dicatat bahwa Mitogen 0.2.7 tidak berfungsi dengan Ansible 2.8 (pada Mei 2019)


Kami melakukan 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' 

Sekarang coba jalankan playbook membuat file di mesin jarak jauh:


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

Dan jalankan dengan dan tanpa Mitogen untuk membuat 10 file:


 time mitogen-ansible-playbook file_creation.yml -i hosts -en=10 &>/dev/null real 0m2.603s user 0m1.152s sys 0m0.096s time pure-ansible-playbook file_creation.yml -i hosts -en=10 &>/dev/null real 0m5.908s user 0m1.745s sys 0m0.643s 

Kami melihat peningkatan 2 kali lipat. Mari kita periksa 20, 30, ..., 100 file:


 time pure-ansible-playbook file_creation.yml -i hosts -en=100 &>/dev/null real 0m51.775s user 0m8.039s sys 0m6.305s time mitogen-ansible-playbook file_creation.yml -i hosts -en=100 &>/dev/null real 0m4.331s user 0m1.903s sys 0m0.197s 

Akibatnya, kami mempercepat eksekusi lebih dari 10 kali!
Sekarang mari kita coba berbagai skenario dan lihat seberapa cepat semuanya bekerja untuk kita:


  • Script untuk menyalin file ke host jarak jauh dari lokal (dengan modul copy ):
    Mengunggah file


  • Script untuk membuat file pada host jarak jauh dengan modul copy :
    Membuat file


  • Skenario dengan mengunduh file dari host jarak jauh ke host lokal:
    Mengambil file


  • Script dengan membuat template pada host khusus dengan beberapa variabel dan perhitungan di Jinja
    File templat



Mari kita coba skenario dengan beberapa (3) mesin jarak jauh, misalnya, skenario dengan menyalin file ke host jarak jauh:
Mengunggah file ke banyak host


Seperti yang Anda lihat, Mitogen menghemat waktu dan lalu lintas kami dalam skenario ini. Tetapi jika "bottleneck" tidak dalam Ansible, tetapi misalnya dalam disk I / O atau jaringan, atau di tempat lain, maka sulit untuk berharap bahwa Mitogen akan membantu kami.


Mari kita coba skrip untuk menginstal paket dengan modul yum / dnf dan python menggunakan pip. Paket di-cache agar tidak bergantung pada gangguan dalam jaringan:


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

Dengan Mitogen, butuh 12 detik, karena tanpa itu.
Pada halaman Mitogen for Ansible, Anda dapat melihat tolok ukur dan tes lain. Sebagaimana dinyatakan pada halaman:


Mitogen tidak dapat mempercepat modul saat dijalankan. Itu hanya dapat membuat eksekusi modul ini secepat mungkin.

Oleh karena itu, penting untuk menemukan kemacetan Anda dalam penerapan dan jika mereka disebabkan oleh Ansible, maka Mitogen akan membantu Anda menyelesaikannya dan secara signifikan mempercepat pelaksanaan buku pedoman Anda.


sunting: Menambahkan skrip dengan templat

Source: https://habr.com/ru/post/id453520/


All Articles