古いcfengine2インストールを置き換えるAnsibleを検討し始めています。私は簡単なプレイブックを持っています:
- sudoersファイルをコピーします
- テンプレート化されたresolv.confをコピーします(group_varsおよびhost_varsデータを供給)
- いくつかのサービスが実行されていることを確認します
- ローカルユーザーの存在を確認します
プレイブックは、97台のマシン(すべてが1ギガまたは10ギガの高速ネットワークで接続され、LANレイテンシが1ミリ秒未満)に対して実行するのに4分以上のウォールクロック時間を要し、2コア4GメモリVMでCPUの50%以上を消費しますそれを実行します。
1台のマシンに対して実行するのに約11秒かかり、約4秒のuser + sys CPU時間を消費しますが、TBHは依然として作業量に対して少し過剰に見えます。
明らかなビット:
- playbook-dir local ansible.cfgでパイプライン処理を明示的に有効にしました
- 同じローカルansible.cfgが有効なjsonfileへのファクトキャッシングがあります
- 私はフォークを50に設定しています、同じです(他の値を試しました)
- AnsibleはParamikoではなくSSHを使用しており、永続的な制御ソケットを使用していると確信しています-実行中にSSHプロセスが開始されて永続化していることがわかります。
このレベルのパフォーマンスは正常ですか、セットアップに問題がありますか?もしそうなら、どうすれば決定できますか?
編集:2017年8月現在、この問題は引き続き発生しています。Ansibleバージョンは2.2.1であり、プレイブックのサイズは現在拡大しています。最新の番号:
- 98ホスト
ansible -m ping all
4.6秒の実時間、3.2秒のユーザー、2.5秒のsys時間- 完全なプレイブックの実行には4分かかり、実行中に100%のユーザーと〜35%のシステムCPUを使用します(2コアVM展開サーバーでは、100%が1つのフルCPUです)
- ターゲットOSは主にCentOS 7、一部のCentOS 6です。
- プロファイリングでは、特定のタスクのホットスポットは明らかになりません
プレイブックは現在はるかに大きくなっていますが、プレイブックサーバーのCPU負荷のレベルを正当化するものはまだないと思います。私が見る限り、それは主にファイルのコピーといくつかのテンプレートの拡張です。
host / groupvarsを非常に広範囲に使用していることに注意してください
何人かの人々がプロファイリング、プロファイリングの実行のテールについて尋ねてきました:
Tuesday 01 August 2017 16:02:24 +0100 (0:00:00.539) 0:06:22.991 ********
===============================================================================
yumrepo : centos repos -------------------------------------------------- 9.77s
sshd : copy CentOS 6 sshd config ---------------------------------------- 7.41s
sshd : copy CentOS 7 sshd config ---------------------------------------- 6.94s
core : ensure core packages are present --------------------------------- 6.28s
core : remove packages on VM guests ------------------------------------- 5.39s
resolv : stop NetworkManager changing resolv.conf ----------------------- 5.25s
yumrepo : epel6 gpg key ------------------------------------------------- 3.94s
yumrepo : epel7 gpg key ------------------------------------------------- 3.71s
yumrepo : nsg gpg key --------------------------------------------------- 3.57s
resolv : build resolv.conf ---------------------------------------------- 3.30s
yumrepo : nsg repo ------------------------------------------------------ 2.66s
resolv : check NetworkManager running ----------------------------------- 2.63s
yumrepo : psp repo ------------------------------------------------------ 2.62s
yumrepo : ucs repo ------------------------------------------------------ 2.44s
yumrepo : epel repo ----------------------------------------------------- 2.27s
resolv : check for nmcli ------------------------------------------------ 2.08s
core : remove various unwanted files ------------------------------------ 1.42s
telegraf : write telegraf.conf file ------------------------------------- 1.13s
core : copy sudoers in place -------------------------------------------- 0.94s
core : ensure sshd is running ------------------------------------------- 0.90s
watch cat /proc/sys/kernel/random/entropy_avail
プレイブックの実行中。1000未満の場合、潜在的な問題があります。64未満で回復しない場合、明確なエントロピー飢starの問題があります。(一部のVM環境で一般的)。これは、管理サーバーと、管理しているノードにも適用されます。
ansible -i all all -m ping
300を超えるホスト(主にVM)に対して1分もかかりませんでした。あなたのプレイブックはユーザーを変更するために何でもしますか(/ sudo /などになります)。「-m ping」はどのように機能しますか?経験に基づいて、50のフォークに対してより多くのメモリが必要だと言います。
ANSIBLE_CALLBACK_WHITELIST=profile_tasks
、でより徹底的なデバッグを行いANSIBLE_DEBUG=1
ます。また、初期のssh接続速度で細心の注意を払ってください。