~ 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.