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