~ 100 ana bilgisayara karşı basit bir Ansible oyun kitabı için makul performans nedir?


11

Eski bir cfengine2 kurulumunu değiştirmek için Ansible'a bakmaya başlıyoruz. Ben basit bir oyun kitabı var:

  • bir sudoers dosyasını kopyalar
  • şablonlanmış bir resolv.conf kopyalar (group_vars ve host_vars verileriyle beslenir)
  • birkaç hizmetin çalıştığını kontrol eder
  • yerel kullanıcının varlığını kontrol eder

Oynatma kitabının 97 makineye karşı çalışması için 4 dakikadan fazla duvar saati süresi (hepsi 1gig veya 10gig ağ üzerinden, 1ms alt LAN gecikmesi ile bağlı) ve 2 çekirdekli 4G bellek VM'sinde% 50'den fazla CPU tüketiyor çalışıyor.

Tek bir makineye karşı çalıştırmak yaklaşık 11 saniye sürer, yaklaşık 4 saniyelik kullanıcı + sys CPU süresi tüketilir, bu da TBH'nin hala işin miktarı için biraz aşırı görünmesi.

Bariz bitler:

  • Bir playbook-dir yerel ansible.cfg açıkça etkinleştirilen boru hattı var
  • Jsonfile etkin, aynı yerel ansible.cfg için önbellekleme aslında var
  • 50, aynı çatal set var (diğer değerleri denedim)
  • Ansible'ın Paramiko değil SSH kullandığından ve kalıcı kontrol soketini kullandığından eminim - çalışma sırasında SSH işlemlerinin başlatıldığını ve sürdüğünü görebiliyorum.

Bu performans düzeyi normal mi yoksa kurulumumda bir sorun mu var? Öyleyse ne olduğunu nasıl belirleyebilirim?

Düzenleme: Ağustos 2017 itibariyle hala bu sorunu görüyoruz. Ansible sürümü 2.2.1 ve oyun kitabı boyutu şimdi büyüdü. Güncel numaralar:

  • 98 ev sahibi
  • ansible -m ping all 4.6s gerçek, 3.2s kullanıcı, 2.5s sys kez alır
  • tam bir oynatma kitabı çalıştırması 4 dakika sürer, bunu yaparken% 100 kullanıcı ve ~% 35 sistem CPU'sunu kullanır (2 çekirdekli VM dağıtım sunucusunda,% 100 bir tam CPU'dur)
  • hedef OS büyük ölçüde CentOS 7, bazı CentOS 6
  • profilleme herhangi bir özel görev etkin noktasını göstermez AFAICT

Oyun kitabı şimdi çok daha büyük olmasına rağmen, hala oyun kitabı sunucusundaki CPU yükünün seviyesini haklı çıkaracak bir şey olduğunu düşünmüyorum - belki de duvar saati zamanı, ancak dağıtım sunucusu çalışmaların çoğu için büyük ölçüde boşta olmalı, gördüğüm kadarıyla, çoğunlukla dosya kopyaları ve bazı şablon genişletmeleri.

Ana bilgisayar / grup araçlarını oldukça kapsamlı kullandığımızı unutmayın

Birkaç kişi profilleme, profillemeli bir koşu kuyruğu hakkında sorular sordu:

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

4
Bazı profillemelerle ANSIBLE_CALLBACK_WHITELIST=profile_tasksve daha ayrıntılı hata ayıklama için yapın ANSIBLE_DEBUG=1. Ayrıca ilk ssh bağlantı hızında da dikkatli olun.
— Konstantin Suvorov

@KonstantinSuvorov'un yorumuyla aynı fikirde olun - lotta belirli bir görevde hatırı sayılır zaman alan tek bir ev sahibi olabilir. Görevi profile_tasks ile izole ettikten sonra, yalnızca ana makinelerinizde bu görevleri çalıştırmayı ve hangi görevlerin en uzun olduğunu görmeyi inceleyebilirsiniz. Beklenen bir zaman aldığını görmek için tüm ana bilgisayarlara karşı "command: w" gibi önemsiz bir görev de çalıştırabilirsiniz.
— andyhky

1
Entropi açlığını kontrol edin. watch cat /proc/sys/kernel/random/entropy_availoynatma kitabı çalışırken. 1000'den az ise potansiyel bir sorun var; 64 den az ve iyileşmezse, kesin bir entropi açlık sorununuz var. (bazı VM ortamlarında yaygındır). Bu, yönetim sunucunuz ve yönettiğiniz düğümler için geçerlidir.
— Cameron Kerr

4GB RAM ile yönetim sanal makinemde çatallarım = 20 ve pipelining = True var. ansible -i all all -m ping300'ün üzerinde ana bilgisayara (çoğunlukla VM'ler) karşı 1 dakikadan az sürdü. Başucu kitabınız kullanıcıyı değiştirmek için herhangi bir şey yapıyor mu (/ sudo / vb.). '-M ping' nasıl bir performans sergiliyor? Deneyime dayanarak, 50 çatal için daha fazla hafızaya sahip olmak istediğinizi söyleyebilirim.
— Cameron Kerr

hedef işletim sisteminiz nedir?
— xddsg

Yanıtlar:


1

sizin de ansible.cfgsette aşağıdaki:

[defaults]

# profile each task
callback_whitelist = profile_tasks

# [don't validate host keys](http://docs.ansible.com/ansible/intro_configuration.html#host-key-checking)
host_key_checking = False

[ssh_connection]
pipelining = True

Ayrıca, oyun kitabınızda stratejiyi 'ücretsiz' olarak ayarlayın

- hosts: all
  strategy: free
  tasks: [...]

Son olarak, oyununuzda bilgi toplama işlemini devre dışı bırakın: gather_facts: false

Profil oluşturduktan sonra, bunun birçoğunu görüyorsanız:

TASK [pip foo]
ok: [10.192.197.252] => (item=ansible)
ok: [10.192.197.252] => (item=boto)
ok: [10.192.197.252] => (item=boto3)
ok: [10.192.197.252] => (item=passlib)
ok: [10.192.197.252] => (item=cryptography)

bu eylemleri ansible.cfg[varsayılanlar] altında ezin:

Örneğin squash_actions = yum,pip,bar


Yanıt için teşekkürler. Zaten strateji kullanıyoruz: özgür ve gerçek toplamak korkuyorum, oyun kitaplarının gerektirdiği bir şey, bu yüzden gerçekten işe yaramıyor. Cevabımda belirtildiği gibi zaten boru hattı yapıyorum.
— user53814

@ user53814 profil oluşturma açıkken en çok zaman alan nedir? sorunuzu kullandığınız ansible sürümüyle güncelleyebilir misiniz?
— xddsg
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.