Ansible 是一個開源 IT 自動化工具,用於持續部署或零停機滾動更新、軟件部署、配置管理和更高級 IT 任務的編排。 Ansible 最大限度地減少了工作量並節省了大量配置服務器和部署應用程序的時間。

在某些情況下,當您需要同時維護多個服務器然後運行 ansible-playbook 時,playbook 任務可能需要很長時間才能完成。根據官方的 ansible 文檔,您可以使用本文中描述的各種方法來加速您的 playbook。使用這些方法可以通過更改設置顯著減少實際時間。

流水線

Pipeline 取代了以前版本的 ansible 中使用的加速模式,並有助於加快專用主機上的 ssh 連接。 Ansible 啟動許多 ssh 連接來運行每個 playbook 任務。這會增加整體消耗時間。默認情況下禁用流水線,因此啟用流水線後,許多 Ansible 模塊在沒有實際文件傳輸的情況下運行,從而減少了所需的 ssh 連接數。 STDIN 通道用於在模塊執行期間將指令傳遞給已知主機。

要在 ansible.cfg 文件中啟用流水線,您必須將流水線值設置為 true。

自由戰略

Ansible 始終以線性策略運行 playbook,這是 playbook 工作流程之一。在線性策略中,playbook 中的每個任務只會在每個主機完成特定任務後才開始,這可能非常耗時。

使用免費策略,所有主機相互隔離,每個主機上的任務繼續運行,無需等待其他主機完成任務。這減少了在所有專用主機上完成任務的等待時間。要覆蓋默認策略,請在 playbook YAML 文件中將策略設置為 free。

增加分叉的數量

在與遠程主機通信時,在遠程主機上使用分叉來運行默認配置提供的一定數量的並行進程。 fork 決定一次配置多少個主機。默認值為 5。如果你有大量的遠程主機,分叉越多,任務完成的速度就越快。您可以根據控制機器的功能(例如可用內存和網絡帶寬)限制分叉值。

您可以通過以下方式更改 ansible.cfg 文件中的 fork 值來覆蓋默認值:在我的例子中,我將 forks 值設置為 20。

增加 Ansible 中的分叉數量

禁用事實收集

運行 ansible-playbook 時,ansible 會收集有關主機的各種信息,例如網絡連接、設備信息和系統信息,並將其存儲在控制機器上的本地內存緩存中。如果您正在處理大量遠程主機,除非您需要它們,否則禁用事實收集可以為您節省大量時間。 在 playbook 中使用 ansible 變量時不能禁用事實收集。

在 Ansible 中禁用事實收集

結論是

Ansible 是目前最好的自動化工具之一,但在速度方面它甚至更好。本文展示瞭如何加速 ansible-playbook。這使您能夠以簡單有效的方式快速配置和部署您的服務器。