Zaczynamy patrzeć na Ansible, aby zastąpić starą instalację cfengine2. Mam prosty podręcznik, który:
- kopiuje plik sudoers
- kopiuje szablon resolv.conf (zasilany danymi group_vars i host_vars)
- sprawdza, czy działa kilka usług
- sprawdza obecność lokalnego użytkownika
Playbook zajmuje ponad 4 minuty czasu pracy przy ścianie na 97 maszynach (wszystkie połączone szybką siecią 1 gig lub 10 gig, z opóźnieniem LAN poniżej 1 ms) i zużywa ponad 50% procesora na 2-rdzeniowej pamięci VM 4G, gdy jestem uruchomić to.
Uruchomienie na pojedynczej maszynie zajmuje około 11 sekund, a procesor użytkownika + sys zajmuje około 4 sekund, co nadal wydaje się nieco nadmierne w stosunku do nakładu pracy.
Oczywiste fragmenty:
- Mam jawnie włączone potokowanie w lokalnym playible-dir lokalnym ansible.cfg
- Mam włączone buforowanie do pliku json, ten sam lokalny ansible.cfg
- Mam widelce ustawione na 50, to samo (próbowałem innych wartości)
- Jestem pewien, że Ansible używa SSH, a nie Paramiko i korzysta z trwałego gniazda kontrolnego - widzę, że procesy SSH są uruchamiane i trwają podczas uruchamiania.
Czy ten poziom wydajności jest normalny, czy coś jest nie tak z moją konfiguracją? Jak mogę ustalić, co jeśli tak?
Edycja: od sierpnia 2017 r. Nadal występuje ten problem. Wersja Ansible to 2.2.1, a rozmiar podręcznika urósł. Aktualne numery:
- 98 hostów
ansible -m ping all
trwa 4,6 s, użytkownik 3,2 s, 2,5 s s razy- pełne uruchomienie playbooka zajmuje 4 minuty, przy użyciu 100% procesora użytkownika i ~ 35% procesora systemowego (w przypadku 2-rdzeniowego serwera wdrażania VM, 100% to jeden pełny procesor)
- docelowym systemem operacyjnym jest głównie CentOS 7, niektóre CentOS 6
- profilowanie nie ujawnia żadnych konkretnych punktów aktywnych zadań AFAICT
Chociaż playbook jest teraz znacznie większy, nadal nie sądzę, aby było w nim coś, co usprawiedliwiałoby ten poziom obciążenia procesora na serwerze playbook - być może czas na wallclock, ale serwer wdrażania powinien być w dużej mierze bezczynny przez większość czasu, o ile widzę, to głównie kopie plików i niektóre rozszerzenia szablonów.
Uwaga: dość szeroko wykorzystujemy zmienne hosta / grupy
Kilka osób pytało o profilowanie, ogon z profilowaniem:
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
źródło
ANSIBLE_CALLBACK_WHITELIST=profile_tasks
i do dokładniejszego debugowania za pomocąANSIBLE_DEBUG=1
. Należy również zwrócić szczególną uwagę na początkową szybkość połączenia ssh.watch cat /proc/sys/kernel/random/entropy_avail
podczas gdy playbook jest uruchomiony. Jeśli jest mniej niż 1000, masz potencjalny problem; jeśli jest mniejsza niż 64 i nie wyzdrowieje, oznacza to, że masz problem z głodem entropijnym. (powszechne w niektórych środowiskach maszyn wirtualnych). Dotyczy to serwera zarządzania, a także zarządzanych węzłów.ansible -i all all -m ping
przeciwko ponad 300 hostom (głównie maszynom wirtualnym) zajęło mniej niż 1 minutę. Czy Twój poradnik robi coś, aby zmienić użytkownika (zostać / sudo / itp.). Jak działa „-m ping”? Na podstawie doświadczenia powiedziałbym, że chcesz mieć więcej pamięci na 50 widelców.Odpowiedzi:
w twoim
ansible.cfg
zestawie następujące:Ponadto w swoim poradniku ustaw strategię jako „bezpłatną”
Na koniec wyłącz zbieranie faktów w swojej grze:
gather_facts: false
Jeśli po profilowaniu widzisz wiele z nich:
squash te akcje w
ansible.cfg
ramach [defaults]:na przykład
squash_actions = yum,pip,bar
źródło