Unyablog.

のにれんのブログ

Ansible で大量のホストに対して実行する場合のメモリ対策

Ansible で大量のホストを対象として Playbook を実行すると、大量の変数を保持する結果、メモリが足りなくなることがある。

以下はその対策。

gather_subset を用いて収集する fact を制限する

Ansible は gather_facts(または setup モジュール)で大量の fact を取得するが、これを必要最低限にすることでメモリ使用量を抑えることができる。

gather_subset という setup モジュールのオプションを使う。

gather_facts: no
tasks:
- name: Gather facts
  setup:
    gather_subset: min

serial を用いて数回に分けて PlayBook を実行する

serial: 150 とすることで 、150ホストごとに PlayBook が走る。

使い終わった巨大な変数は初期化しておく

serial にしていても PlayBook の実行ごとにメモリ使用量は増えることがある。

このような場合は、PlayBook の最後で巨大な変数を初期化する(最終手段っぽい)。

tasks:
- name: Save large output
  command: command_outputs_large_text
  register: large_output
  
...

- name: Init values
  set_fact:
    large_output: !!null