menjadi salah satu yang paling populer . Setelah pada tahun 2015 jumlahnya melebihi ribuan dan Ansible mungkin menjadi sistem penerapan dan orkestrasi yang paling banyak digunakan. Berbagai macam aplikasinya sangat mengesankan.
Ansible bekerja melalui koneksi SSH ke host jarak jauh. Ini membuka sesi SSH, masuk, menyalin kode Python melalui jaringan dan menulisnya ke file sementara yang terpisah. Setelah itu, ia menjalankan file ini di mesin jarak jauh. Seluruh rangkaian operasi ini cukup panjang dan membosankan, jadi ada berbagai cara untuk mengoptimalkannya.
Salah satu caranya adalah yang memungkinkan Anda menggunakan satu sesi SSH untuk menjalankan instruksi, daripada membuka sesi baru setiap kali, yang dapat menghemat banyak waktu. (Ingatlah untuk mematikannya requiretty pengaturan untuk Sudo di Anda /etc/sudoers file di mesin jarak jauh)
Cara baru untuk melakukan overclock Ansible adalah perpustakaan python bernama . Jika ada yang belum pernah mendengarnya, saya akan menjelaskan secara singkat fungsinya. Ini memungkinkan eksekusi cepat kode python pada mesin jarak jauh, dan Ansible hanyalah salah satu contoh penggunaan. Mitogen menggunakan pipa UNIX pada mesin jarak jauh dan mentransfer kode python yang dikompresi dengan zlib dan diserialkan dengan acar. Ini membantu menyelesaikannya lebih cepat dan menghemat lalu lintas. Jika Anda tertarik dengan penjelasan lebih detail, sebaiknya baca di halaman . Namun hari ini kita hanya akan fokus pada cara kerja 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 seberapa besar manfaatnya bagi kita.
Saya menggunakan sebagian besar 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.
Mari kita pergi!
Konfigurasi mitogen untuk Ansible sangat sederhana:
Instal perpustakaan Mitogen:
pip install mitogenSekarang ada dua cara yang setara - konfigurasikan opsi di file konfigurasi ansible.cfg, atau atur variabel lingkungan yang diperlukan.
Mari kita asumsikan bahwa jalur ke Mitogen yang diinstal adalah /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy. Kemudian:
export ANSIBLE_STRATEGY_PLUGINS=/usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy
export ANSIBLE_STRATEGY=mitogen_linearили
[defaults]
strategy = mitogen_linear
strategy_plugins = /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategyMari 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.10Harap dicatat bahwa Mitogen 0.2.7 tidak berfungsi dengan Ansible 2.8 (mulai Mei 2019)
Membuat 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 mari kita coba menjalankan pedoman yang 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 mari kita jalankan dengan dan tanpa Mitogen untuk membuat 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.643sKami melihat peningkatan 2 kali lipat. Mari kita periksa 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.197sHasilnya, kami mempercepat eksekusi lebih dari 10 kali lipat!
Sekarang mari kita coba skenario yang berbeda dan lihat seberapa cepat semuanya bekerja untuk kita:
Skrip untuk menyalin file ke host jarak jauh dari host lokal (dengan module
copy):
Skrip untuk membuat file di host jarak jauh dengan
copymodul:
Skenario dengan mengunduh file dari host jarak jauh ke host lokal:
Mari kita coba skenario dengan beberapa (3) mesin jarak jauh, misalnya skenario dengan menyalin file ke host jarak jauh:
Seperti yang Anda lihat, Mitogen menghemat waktu dan lalu lintas dalam skenario ini. Namun jika hambatannya bukan di Ansible, tapi misalnya di I/O disk atau jaringan, atau di tempat lain, maka sulit diharapkan Mitogen akan membantu kita.
Mari kita coba skrip dengan menginstal paket dengan modul yum/dnf dan python menggunakan pip. Paket-paket tersebut di-cache agar tidak bergantung pada gangguan 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 waktu 12 detik, sama seperti tanpa Mitogen.
Di halaman Anda dapat melihat tolok ukur dan tes lainnya. Seperti yang dinyatakan dalam halaman:
Mitogen tidak dapat mempercepat modul saat sedang berjalan. Itu hanya dapat membuat eksekusi modul ini secepat mungkin.
Oleh karena itu, penting untuk menemukan hambatan dalam penerapan Anda dan jika hambatan tersebut disebabkan oleh Ansible, maka Mitogen akan membantu Anda menyelesaikannya dan secara signifikan mempercepat pelaksanaan pedoman Anda.
Sumber: www.habr.com
