Ansible hoạt động trên các kết nối SSH tới máy chủ từ xa. Nó mở một phiên SSH, đăng nhập, sao chép mã Python qua mạng và ghi nó vào một tệp tạm thời riêng biệt. Sau đó, nó chạy tập tin này trên máy từ xa. Toàn bộ chuỗi thao tác này khá dài và tẻ nhạt, vì vậy có nhiều cách khác nhau để tối ưu hóa nó.
Một trong những cách này là requiretty
cài đặt cho sudo trong của bạn /etc/sudoers
tập tin trên máy từ xa)
Một cách mới để ép xung Ansible là một thư viện python có tên
Mitogen trong một số trường hợp nhất định có thể tăng tốc mã Ansible của bạn lên nhiều lần và giảm đáng kể mức tiêu thụ lưu lượng. Hãy xem các trường hợp sử dụng phổ biến nhất và xem nó giúp ích cho chúng ta đến mức nào.
Tôi sử dụng Ansible nhiều nhất cho: tạo tệp cấu hình trên máy từ xa, cài đặt gói, sao chép tệp đến và từ máy từ xa. Có lẽ bạn có những ví dụ khác - hãy viết bình luận.
Chúng ta hãy đi!
Cấu hình Mitogen cho Ansible rất đơn giản:
Cài đặt thư viện Mitogen:
pip install mitogen
Bây giờ có hai cách tương đương - định cấu hình các tùy chọn trong tệp cấu hình ansible.cfg hoặc đặt các biến môi trường cần thiết.
Giả sử rằng đường dẫn đến Mitogen đã cài đặt sẽ là /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy
. Sau đó:
export ANSIBLE_STRATEGY_PLUGINS=/usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy
export ANSIBLE_STRATEGY=mitogen_linear
hoặc
[defaults]
strategy = mitogen_linear
strategy_plugins = /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy
Hãy cài đặt Ansible trong virtualenv, có và không có 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
Xin lưu ý rằng Mitogen 0.2.7 không hoạt động với Ansible 2.8 (kể từ tháng 2019 năm XNUMX)
Tạo bí danh:
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'
Bây giờ, hãy thử chạy một playbook tạo tệp trên máy từ xa:
---
- 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 }}
Và hãy chạy nó có và không có Mitogen để tạo 10 tệp:
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
Chúng tôi thấy sự cải thiện gấp 2 lần. Hãy kiểm tra 20, 30, ..., 100 tệp:
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
Kết quả là chúng tôi đã tăng tốc độ thực thi lên hơn 10 lần!
Bây giờ, hãy thử các kịch bản khác nhau và xem mọi thứ hoạt động nhanh hơn như thế nào đối với chúng tôi:
-
Tập lệnh sao chép tập tin vào máy chủ từ xa từ máy chủ cục bộ (với mô-đun
copy
):
-
Tập lệnh tạo tập tin trên máy chủ từ xa với
copy
mô-đun:
-
Kịch bản tải tập tin từ máy chủ từ xa về máy chủ cục bộ:
Hãy thử một kịch bản với một số (3) máy từ xa, ví dụ như kịch bản sao chép tệp vào máy chủ từ xa:
Như bạn có thể thấy, Mitogen giúp chúng tôi tiết kiệm cả thời gian và lưu lượng truy cập trong những tình huống này. Nhưng nếu nút cổ chai không nằm ở Ansible, mà chẳng hạn như ở I/O của đĩa hoặc mạng, hoặc ở một nơi nào khác, thì thật khó để mong đợi rằng Mitogen sẽ giúp chúng ta.
Hãy thử một tập lệnh cài đặt các gói có mô-đun yum/dnf và python bằng pip. Các gói đã được lưu vào bộ nhớ đệm để không phụ thuộc vào sự cố mạng:
---
- 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
Với Mitogen mất 12 giây, giống như không có nó.
Trên trang
Mitogen không thể tăng tốc mô-đun khi nó đang chạy. Nó chỉ có thể thực hiện mô-đun này nhanh nhất có thể.
Do đó, điều quan trọng là phải tìm ra những điểm nghẽn trong quá trình triển khai của bạn và nếu chúng là do Ansible thì Mitogen sẽ giúp bạn giải quyết chúng và tăng tốc đáng kể việc thực thi các sổ chơi của bạn.
Nguồn: www.habr.com