Ansible 透過與遠端主機的 SSH 連線進行工作。 它打開 SSH 會話、登入、透過網路複製 Python 程式碼並將其寫入單獨的臨時檔案。 之後,它在遠端電腦上運行該文件。 整個操作序列相當長且乏味,因此有多種方法可以對其進行最佳化。
其中一種方法是 requiretty
在你的 sudo 設置 /etc/sudoers
遠端電腦上的文件)
超頻 Ansible 的新方法是一個名為的 Python 函式庫
Mitogen 在某些情況下可以將 Ansible 程式碼加速數倍並顯著減少流量消耗。 讓我們看看最受歡迎的用例,看看它對我們有多大幫助。
我最常使用 Ansible:在遠端電腦上建立設定檔、安裝軟體包、將檔案複製到遠端電腦或從遠端電腦複製檔案。 也許你還有其他例子 - 請寫在評論中。
我們走吧!
Ansible 的 Mitogen 設定非常簡單:
安裝 Mitogen 庫:
pip install mitogen
現在有兩種等效的方法 - 要么配置 ansible.cfg 設定檔中的選項,要么設定必要的環境變數。
假設安裝的 Mitogen 的路徑是 /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy
。 然後:
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/strategy
讓我們在 virtualenv 中安裝 Ansible,有或沒有 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
請注意,Mitogen 0.2.7 不適用於 Ansible 2.8(截至 2019 年 XNUMX 月)
製作別名:
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'
現在讓我們嘗試運行一個在遠端電腦上建立文件的劇本:
---
- 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 }}
讓我們在使用和不使用 Mitogen 的情況下運行它來創建 10 個檔案:
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
我們看到了 2 倍的改進。 讓我們檢查 20、30、...、100 個檔案:
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
結果,我們的執行速度提高了 10 倍以上!
現在讓我們嘗試不同的場景,看看一切對我們來說有多快:
-
用於將檔案從本機主機複製到遠端主機的腳本(使用模組
copy
):
-
用於在遠端主機上建立檔案的腳本
copy
模組:
-
從遠端主機下載檔案到本機的場景:
讓我們嘗試一個具有多 (3) 台遠端電腦的場景,例如將檔案複製到遠端主機的場景:
正如您所看到的,Mitogen 在這些場景中為我們節省了時間和流量。 但如果瓶頸不在 Ansible 中,而是在磁碟或網路的 I/O 或其他地方,那麼很難指望 Mitogen 能夠幫助我們。
讓我們嘗試使用 pip 安裝包含 yum/dnf 和 python 模組的軟體包的腳本。 這些包被緩存,以免依賴網路故障:
---
- 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
使用 Mitogen 需要 12 秒,與不使用 Mitogen 時相同。
在頁面上
Mitogen 運作時無法加速模組。 它只能讓這個模組的執行速度盡可能的快。
因此,找到部署中的瓶頸非常重要,如果這些瓶頸是由 Ansible 造成的,那麼 Mitogen 將幫助您解決它們並顯著加快 playbook 的執行速度。
來源: www.habr.com