naging isa sa pinakasikat . Pagkatapos noong 2015 ang bilang lumampas sa libu-libo at ang Ansible ay marahil ang pinakaginagamit na sistema ng pag-deploy at orkestrasyon. Ang malawak na hanay ng mga aplikasyon nito ay lubhang kahanga-hanga.
Gumagana ang Ansible sa mga koneksyon sa SSH sa mga malalayong host. Nagbubukas ito ng session ng SSH, nag-log in, kinokopya ang code ng Python sa network at isinusulat ito sa isang hiwalay na pansamantalang file. Pagkatapos nito, pinapatakbo nito ang file na ito sa remote na makina. Ang buong pagkakasunud-sunod ng mga operasyon ay medyo mahaba at nakakapagod, kaya mayroong iba't ibang mga paraan upang ma-optimize ito.
Isa sa mga paraan na ito ay na nagbibigay-daan sa iyong gumamit ng isang session ng SSH para magsagawa ng mga tagubilin, sa halip na magbukas ng bagong session sa bawat pagkakataon, na makakatipid sa amin ng maraming oras. (Tandaan lamang na i-off requiretty setting para sa sudo sa iyong /etc/sudoers file sa remote na makina)
Ang isang bagong paraan upang mag-overclock sa Ansible ay isang python library na tinatawag . Kung sinuman ang hindi pa nakarinig nito, ilalarawan ko nang maikli ang paggana nito. Pinapayagan nito ang mabilis na pagpapatupad ng code ng python sa isang malayong makina, at ang Ansible ay isa lamang halimbawa ng paggamit. Gumagamit si Mitogen ng UNIX pipe sa remote na makina at naglilipat ng code ng python na naka-compress na may zlib at naka-serialize sa pickle. Nakakatulong ito upang makumpleto ito nang mas mabilis at makatipid ng trapiko. Kung interesado ka sa isang mas detalyadong paliwanag, pinakamahusay na basahin ang tungkol dito sa pahina . Ngunit ngayon ay magtutuon lamang tayo ng pansin sa kung paano gumagana ang library sa Ansible.
Maaaring pabilisin ng Mitogen sa ilang partikular na pagkakataon ang iyong Ansible code nang maraming beses at makabuluhang bawasan ang pagkonsumo ng trapiko. Tingnan natin ang pinakasikat na mga kaso ng paggamit at tingnan kung gaano ito nakakatulong sa atin.
Ginagamit ko ang Ansible karamihan para sa: paglikha ng mga configuration file sa isang remote na makina, pag-install ng mga pakete, pagkopya ng mga file papunta at mula sa remote na makina. Marahil mayroon kang iba pang mga halimbawa - sumulat sa mga komento.
Sabihin pumunta!
Ang pagsasaayos ng mitogen para sa Ansible ay napaka-simple:
I-install ang Mitogen library:
pip install mitogenNgayon ay may dalawang katumbas na paraan - alinman sa i-configure ang mga opsyon sa ansible.cfg configuration file, o itakda ang mga kinakailangang variable ng kapaligiran.
Ipagpalagay natin na ang landas patungo sa naka-install na Mitogen ay magiging /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy. Pagkatapos:
export ANSIBLE_STRATEGY_PLUGINS=/usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy
export ANSIBLE_STRATEGY=mitogen_linearo
[defaults]
strategy = mitogen_linear
strategy_plugins = /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategyI-install natin ang Ansible sa virtualenv, kasama at walang 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.10Pakitandaan na ang Mitogen 0.2.7 ay hindi gumagana sa Ansible 2.8 (mula Mayo 2019)
Gumagawa ng mga 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'Ngayon subukan nating magpatakbo ng playbook na lumilikha ng mga file sa isang malayuang makina:
---
- 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 }}At patakbuhin natin ito nang may at walang Mitogen upang lumikha ng 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.643sNakikita namin ang 2-tiklop na pagpapabuti. Tingnan natin ang 20, 30, ..., 100 na mga 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.197sBilang resulta, pinabilis namin ang pagpapatupad ng higit sa 10 beses!
Ngayon subukan natin ang iba't ibang mga sitwasyon at tingnan kung gaano kabilis gumagana ang lahat para sa atin:
Script para sa pagkopya ng mga file sa isang malayong host mula sa isang lokal (na may module
copy):
Script para sa paggawa ng mga file sa isang malayuang host gamit ang
copymodule:
Sitwasyon sa pag-download ng mga file mula sa isang malayuang host patungo sa isang lokal:
Subukan natin ang isang scenario na may ilang (3) remote na makina, halimbawa isang scenario sa pagkopya ng mga file sa isang remote host:
Gaya ng nakikita mo, ang Mitogen ay nakakatipid sa amin ng oras at trapiko sa mga sitwasyong ito. Ngunit kung ang bottleneck ay wala sa Ansible, ngunit halimbawa sa I/O ng isang disk o network, o sa ibang lugar, mahirap umasa na tutulungan tayo ni Mitogen.
Subukan natin ang isang script na may pag-install ng mga pakete na may yum/dnf at python modules gamit ang pip. Ang mga pakete ay na-cache upang hindi umasa sa mga glitches sa network:
---
- 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
Sa Mitogen tumagal ito ng 12 segundo, katulad ng wala nito.
Sa pahina maaari kang tumingin sa iba pang mga benchmark at pagsubok. Tulad ng sinasabi ng pahina:
Hindi mapabilis ng Mitogen ang module kapag ito ay tumatakbo. Maaari lamang nitong gawin ang pagpapatupad ng modyul na ito nang mabilis hangga't maaari.
Samakatuwid, mahalagang mahanap ang iyong mga bottleneck sa iyong deployment at kung ang mga ito ay dahil sa Ansible, tutulungan ka ng Mitogen na lutasin ang mga ito at makabuluhang mapabilis ang pagpapatupad ng iyong mga playbook.
Pinagmulan: www.habr.com
