Ansible berfungsi melalui sambungan SSH ke hos jauh. Ia membuka sesi SSH, log masuk, menyalin kod Python melalui rangkaian dan menulisnya ke fail sementara yang berasingan. Selepas itu, ia menjalankan fail ini pada mesin jauh. Seluruh urutan operasi ini agak panjang dan membosankan, jadi terdapat pelbagai cara untuk mengoptimumkannya.
Salah satu cara ini ialah requiretty
tetapan untuk sudo dalam anda /etc/sudoers
fail pada mesin jauh)
Cara baharu untuk melakukan overclock Ansible ialah perpustakaan python yang dipanggil
Mitogen dalam keadaan tertentu boleh mempercepatkan kod Ansible anda beberapa kali dan mengurangkan penggunaan trafik dengan ketara. Mari lihat kes penggunaan yang paling popular dan lihat sejauh mana ia membantu kami.
Saya paling banyak menggunakan Ansible untuk: mencipta fail konfigurasi pada mesin jauh, memasang pakej, menyalin fail ke dan dari mesin jauh. Mungkin anda mempunyai contoh lain - tulis dalam komen.
Mari kita pergi!
Konfigurasi mitogen untuk Ansible adalah sangat mudah:
Pasang pustaka Mitogen:
pip install mitogen
Kini terdapat dua cara yang setara - sama ada konfigurasikan pilihan dalam fail konfigurasi ansible.cfg, atau tetapkan pembolehubah persekitaran yang diperlukan.
Mari kita anggap bahawa laluan ke Mitogen yang dipasang 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
atau
[defaults]
strategy = mitogen_linear
strategy_plugins = /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy
Mari pasang Ansible dalam 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
Sila ambil perhatian bahawa Mitogen 0.2.7 tidak berfungsi dengan Ansible 2.8 (sehingga 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 cuba jalankan buku main yang mencipta fail pada mesin 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 jalankannya dengan dan tanpa Mitogen untuk mencipta 10 fail:
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
Kami melihat peningkatan 2 kali ganda. Mari semak 20, 30, ..., 100 fail:
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
Akibatnya, kami mempercepatkan pelaksanaan lebih daripada 10 kali!
Sekarang mari kita cuba senario yang berbeza dan lihat sejauh mana lebih cepat semuanya berfungsi untuk kita:
-
Skrip untuk menyalin fail ke hos jauh daripada hos tempatan (dengan modul
copy
):
-
Skrip untuk mencipta fail pada hos jauh dengan
copy
modul:
-
Senario dengan memuat turun fail daripada hos jauh kepada hos setempat:
Mari cuba senario dengan beberapa (3) mesin jauh, contohnya senario dengan menyalin fail ke hos jauh:
Seperti yang anda lihat, Mitogen menjimatkan masa dan trafik kami dalam senario ini. Tetapi jika kesesakan tiada dalam Ansible, tetapi contohnya dalam I/O cakera atau rangkaian, atau di tempat lain, maka sukar untuk mengharapkan Mitogen akan membantu kami.
Mari cuba skrip dengan memasang pakej dengan modul yum/dnf dan python menggunakan pip. Pakej telah dicache supaya tidak bergantung pada gangguan rangkaian:
---
- 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 ia mengambil masa 12 saat, sama seperti tanpanya.
Pada halaman
Mitogen tidak boleh mempercepatkan modul apabila ia berjalan. Ia hanya boleh membuat pelaksanaan modul ini secepat mungkin.
Oleh itu, adalah penting untuk mencari kesesakan anda dalam penggunaan anda dan jika ia disebabkan oleh Ansible, maka Mitogen akan membantu anda menyelesaikannya dan mempercepatkan pelaksanaan buku permainan anda dengan ketara.
Sumber: www.habr.com