Ні для каго не сакрэт, што з наладамі па змаўчанні Ansible можа рабіць сваю справу не занадта хутка. У артыкуле я пакажу на некалькі прычын гэтага і прапаную карысны мінімум налад, якія, магчыма, рэальна павялічаць хуткасць працы вашага праекта.
Абмяркоўваем тут і далей Ансібл 2.9.x, які быў усталяваны ў свежаствораны virtualenv вашым каханым спосабам.
Пасля ўсталёўкі ствараем побач з вашым плэйбукам файл "ansible.cfg" - такое размяшчэнне дазволіць пераносіць дадзеныя налады разам з праектам, плюс загружацца будуць яны цалкам аўтамагічна.
Канвеерызацыя
Пра тое, што трэба выкарыстоўваць pipelining, гэта значыць не капіраванне модуляў у ФС мэтавай сістэмы, а перадачу абгорнутага ў Base64 zip-архіва непасрэдна на stdin інтэрпрэтатара Python, хтосьці ўжо мог чуць, а хтосьці – не, але факт застаецца фактам :
pipelining = True
Збор фактаў
Ці ведаеце вы, што з наладамі па змаўчанні Ansible для кожнага плею ініцыюе збор фактаў па ўсіх хастах, якія ў ім удзельнічаюць? Увогуле, калі не ведалі, то зараз ведаеце. Для таго, каб гэтага не адбывалася, трэба ўключыць альбо рэжым яўнага запыту на збор фактаў (explicit), альбо рэжым smart. У ім факты будуць збірацца толькі з тых хастоў, якія не сустракаліся ў папярэдніх плеях.
UPD. Пры капіяванні вам давядзецца выбраць з гэтых налад нейкую адну.
gathering = smart|explicit
Перавыкарыстанне ssh-злучэнняў
Калі вы калі-небудзь запускалі Ansible у рэжыме вываду адладкавай інфармацыі (опцыя «v», паўтораная ад аднаго да дзевяці разоў), то, магчыма, заўважалі, што ssh-злучэнні ўвесь час усталёўваюцца і разрываюцца. Дык вось, тут таксама існуе пара тонкасцяў.
Пазбегнуць этапу паўторнай усталёўкі ssh-злучэнні можна на двух узроўнях адразу: і непасрэдна ў кліенце ssh, і пры перадачы файлаў на кіраваны хост з кіраўніка.
Для перавыкарыстання адкрытага ssh-злучэння дастаткова проста перадаць патрэбныя ключы ssh-кліенту. Тады ён пачне рабіць наступнае: пры першай усталёўцы ssh-злучэнні дадаткова ствараць так званы control socket, пры наступных - правяраць існаванне гэтага самага сокета, і пры поспеху перавыкарыстоўваць існуючае ssh-злучэнне. А каб гэта ўсё мела сэнс, зададзім час захавання злучэння пры неактыўнасці. Больш падрабязна можна прачытаць у
ssh_args = "-o ControlMaster=auto -o ControlPersist=15m"
Для перавыкарыстоўвання ўжо адчыненага ssh-злучэнні пры перадачы файлаў на кіраваны хост досыць паказаць яшчэ адну невядомую наладу ssh_tranfer_method. Дакументацыя на гэты конт вельмі
transfer_method = piped
Дарэчы, у галінцы "develop" гэтая настройка таксама існуе і
Нажа не бойся, бойся відэльцы
Яшчэ адна карысная настройка - forks. Яна вызначае колькасць працоўных працэсаў, якія будуць адначасова падлучацца да хастаў і выконваць цягі. З-за асаблівасцяў Python як ЯП выкарыстоўваюцца менавіта працэсы, а не плыні, таму што Ansible усё яшчэ падтрымлівае Python 2.7 – ніякіх вам asyncio, няма чаго тут асінхроншчыну разводзіць! Па змаўчанні Ansible запускае
forks = 20
Толькі адразу папярэджваю, што тут магчымыя некаторыя складанасці, злучаныя з наяўным аб'ёмам памяці на кіравальнай машыне. Інакш кажучы, паставіць forks=100500, канешне, можна, але хто сказаў, што будзе працаваць?
Зводзім усё разам
У выніку для ansible.cfg (ini-фармат) патрэбныя наладкі могуць выглядаць так:
[defaults]
gathering = smart|explicit
forks = 20
[ssh_connection]
pipelining = True
ssh_args = -o ControlMaster=auto -o ControlPersist=15m
transfer_method = piped
А калі ты жадаеш схаваць усё ў нармальны YaML-inventory здаровага чалавека, то ён можа выглядаць прыкладна вось так:
---
all:
vars:
ansible_ssh_pipelining: true
ansible_ssh_transfer_method: piped
ansible_ssh_args: -o ControlMaster=auto -o ControlPersist=15m
Нажаль, з наладамі "gathering = smart/explicit" і "forks = 20" такое не пройдзе: іх YaML-эквівалентаў не існуе. Або задаём іх у ansible.cfg, альбо перадаем праз зменныя асяроддзі ANSIBLE_GATHERING і ANSIBLE_FORKS.
Пра Mitogen
- А дзе тут пра Mitogen? - мае права спытаць ты, паважаны чытач. У гэтым артыкуле - нідзе. Але калі ты рэальна гатовы чытаць яго код і разбірацца, чаму твой плэйбук падае з Mitogen, а з ванільным Ansible нармальна працуе, ці чаму гэты ж плэйбук дагэтуль спраўна працаваў, а пасля абнаўлення стаў рабіць дзіўнае – што ж, Mitogen патэнцыйна можа быць тваім інструментам . Ужывай, разбірайся, пішы артыкулы - прачытаю з цікавасцю.
Чаму асабіста я не выкарыстоўваю Mitogen? Таму што гладыёлус ён працуе, толькі пакуль цягі рэальна простыя і ўсё добра. Аднак варта згарнуць ледзь налева або направа - усё, прыехалі: у адказ у цябе ляціць жменю невыразных выключэнняў, і для завяршэння карціны не хапае толькі ходкай фразы "ўсім дзякуй, усе вольныя". Увогуле, я проста не жадаю марнаваць час на высвятленне прычын чарговага "падземнага груку".
Частка гэтых налад былі выяўлены ў працэсе чытання
Толькі зарэгістраваныя карыстачы могуць удзельнічаць у апытанні.
Якія з пералічаных налад Ansible для паскарэння сваіх праектаў вы карыстаецеся?
-
69,6%pipelining = true32
-
34,8%gathering = smart/explicit16
-
52,2%ssh_args = "-o ControlMaster=auto -o ControlPersist=…"24
-
17,4%transfer_method = piped8
-
63,0%forks = XXX29
-
6,5%Нічога з гэтага, толькі Mitogen3
-
8,7%Mitogen + адзначу, якія менавіта з гэтых настроек4
Прагаласавалі 46 карыстальнікаў. Устрымаўся 21 карыстач.
Жадаеце яшчэ рознага пра Ansible?
-
78,3%так, вядома54
-
21,7%так, толькі хачу больш хардкорных штук!
-
0,0%не, і дарма не трэба0
-
0,0%не, складанаааааа!!!0
Прагаласавалі 69 карыстальнікаў. Устрымаліся 7 карыстальнікаў.
Крыніца: habr.com