如何加速 Ansible Playbook

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

在某些情況下,我們必須一次維護大量服務器,那麼在執行 ansible-playbook 時可能需要更長的時間來完成 playbook 任務。 根據 ansible 官方文檔,我們可以使用本文將討論的各種方法來加快其 playbook 速度。 使用這些方法我們可以通過改變ansible配置來減少其實際時間消耗的巨大比例。

流水線

流水線取代了早期版本的 ansible 中使用的加速模式,這有助於加速跨專用主機的 ssh 連接。 Ansible 啟動許多 ssh 連接來執行每個劇本任務,這可能會增加總時間消耗。 默認情況下禁用流水線,因此當啟用流水線時,許多 Ansible 模塊在沒有實際文件傳輸的情況下執行,這減少了所需的 ssh 連接數量。 STDIN 通道用於在模塊執行期間將指令傳遞給已知主機。

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

免費策略

Ansible 始終以線性策略執行劇本,這是劇本的工作流程之一。 在線性策略中,劇本中的每個任務只有在每個主機完成特定任務後才開始,這是耗時的。

使用免費策略,所有主機將相互獨立,其中每個主機上的任務將繼續,而無需等待另一台主機完成任務。 這有助於減少在所有專用主機上完成任務的等待時間。 要覆蓋默認策略,請在您的劇本 YAML 文件中將策略設置為 free。

增加貨叉數量

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

您可以通過以下方式更改 ansible.cfg 文件中的 fork 值來覆蓋默認值。 就我而言,我已將叉值設置為 20。

增加 Ansible 中的分叉數量

禁用事實收集

當我們執行 ansible-playbook 時,ansible 會收集有關主機的不同信息,例如網絡連接、設備信息、系統信息等,並存儲在控制機上的本地內存緩存中。 如果您正在處理大量遠程主機,只要您不需要它們,禁用事實收集將節省大量時間。 如果您在劇本中使用了 ansible 變量,則無法禁用事實收集。

在 Ansible 中禁用事實收集

結論

Ansible 是最好的自動化工具之一,但在提高速度時甚至更好。 本文展示了我們如何提高 ansible-playbook 的速度,以簡單有效的方式幫助快速配置和部署服務器。