Ansible жылдамдығын арттыру

Ansible жылдамдығын арттыру
Әдепкі параметрлермен Ansible өз жұмысын тез орындай алмайтыны жасырын емес. Мақалада мен мұның бірнеше себептерін көрсетемін және жобаңыздың жылдамдығын шынымен арттыратын пайдалы минимум параметрлерді ұсынамын.

Мұнда және төменде біз Ansible 2.9.x нұсқасын талқылаймыз, ол жаңадан жасалған virtualenv-де сүйікті әдісіңізде орнатылған.

Орнатқаннан кейін ойын кітапшасының жанында «ansible.cfg» файлын жасаңыз - бұл орын жобамен бірге осы параметрлерді тасымалдауға мүмкіндік береді, сонымен қатар олар автоматты түрде жүктеледі.

Құбыр тарту

Кейбіреулер құбыр желісін пайдалану қажеттілігі туралы естіген болуы мүмкін, яғни модульдерді мақсатты жүйенің файлдық жүйесіне көшірмеу, бірақ Base64 оралған zip мұрағатын тікелей Python аудармашысының stdin файлына тасымалдау, бірақ басқалары естімейді, бірақ факт факт болып қалады: бұл параметр әлі де жете бағаланбайды. Өкінішке орай, sudo конфигурациялау үшін пайдаланылатын кейбір танымал Linux дистрибутивтері әдепкі бойынша онша жақсы емес - бұл пәрмен tty (терминал) қажет болғандықтан, Ansible бұл өте пайдалы параметрді әдепкі бойынша өшіріп тастады.

pipelining = True

Фактілерді жинау

Әдепкі параметрлермен Ansible for every play бағдарламасы оған қатысатын барлық хосттар үшін фактілерді жинауды бастайтынын білесіз бе? Жалпы, сіз білмесеңіз, енді білесіз. Мұның алдын алу үшін фактілерді жинауға арналған нақты сұрау режимін (анық) немесе смарт режимді қосу керек. Онда тек алдыңғы пьесаларда кездеспеген фактілер жиналады.
UPD. Көшіру кезінде осы параметрлердің бірін таңдау керек.

gathering = smart|explicit

ssh қосылымдарын қайта пайдалану

Егер сіз Ansible қолданбасын отладка режимінде іске қоссаңыз («v» опциясы, бір-тоғыз рет қайталанады), ssh қосылымдары үнемі жасалып, үзіліп жатқанын байқаған боларсыз. Сонымен, мұнда да бір-екі нәзіктік бар.

Ssh қосылымын бірден екі деңгейде қайта орнату қадамынан аулақ бола аласыз: тікелей ssh ​​клиентінде де, файлдарды басқарушыдан басқарылатын хостқа тасымалдау кезінде.
Ашық ssh қосылымын қайта пайдалану үшін ssh клиентіне қажетті кілттерді жіберіңіз. Содан кейін ол келесі әрекеттерді жасай бастайды: ssh қосылымын бірінші рет орнатқанда, ол қосымша басқару розеткасын жасайды, кейінгі орнатуларда ол дәл осы розетканың бар-жоғын тексереді және сәтті болса, қайта пайдаланыңыз. бар ssh қосылымы. Мұның бәрі мағыналы болу үшін белсенді емес кезде қосылымды сақтау уақытын белгілейік. Толығырақ бөлімінен оқи аласыз ssh құжаттамасы, және Ansible контекстінде біз жай ғана ssh клиентіне қажетті опцияларды «қайта жіберуді» қолданамыз.

ssh_args = "-o ControlMaster=auto -o ControlPersist=15m"

Файлдарды басқарылатын хостқа тасымалдау кезінде әлдеқашан ашық ssh қосылымын қайта пайдалану үшін ssh_tranfer_method басқа белгісіз параметрін көрсетіңіз. Бұл мәселе бойынша құжаттама өте көп сараң және жаңылыстыру, өйткені бұл опция өте жақсы жұмыс істейді! Бірақ оқу бастапқы код нақты не болатынын түсінуге мүмкіндік береді: dd пәрмені қажетті файлмен тікелей жұмыс істей отырып, басқарылатын хостта іске қосылады.

transfer_method = piped

Айтпақшы, «дамыту» бөлімінде бұл параметр де бар ешқайда кетпейді.

Пышақтан қорықпа, шанышқыдан қорық

Тағы бір пайдалы параметр - шанышқылар. Ол бір уақытта хосттарға қосылатын және тапсырмаларды орындайтын жұмысшы процестерінің санын анықтайды. Python тілінің ерекшеліктеріне байланысты ағындар емес, процестер пайдаланылады, өйткені Ansible әлі де Python 2.7 нұсқасын қолдайды - сіз үшін асинцио жоқ, мұнда асинхронды әрекетті енгізудің қажеті жоқ! Әдепкі бойынша Ansible жұмыс істейді бес жұмысшылар, бірақ дұрыс сұралса, ол көбірек іске қосылады:

forks = 20

Мен сізге бірден ескертемін, бұл жерде басқару құрылғысындағы қол жетімді жад көлеміне байланысты кейбір қиындықтар болуы мүмкін. Басқаша айтқанда, сіз, әрине, шанышқыларды = 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 инвентаризациясында бәрін жасырғыңыз келсе, ол келесідей болуы мүмкін:

---
all:
  vars:
    ansible_ssh_pipelining: true
    ansible_ssh_transfer_method: piped
    ansible_ssh_args: -o ControlMaster=auto -o ControlPersist=15m

Өкінішке орай, бұл «жинау = ақылды/анық» және «шанышқылар = 20» параметрлерімен жұмыс істемейді: олардың YaML баламалары жоқ. Біз оларды ansible.cfg ішіне орнатамыз немесе ANSIBLE_GATHERING және ANSIBLE_FORKS айнымалылары арқылы өткіземіз.

Митоген туралы
- Бұл Митоген туралы қайда? – деп сұрауға құқығыңыз бар, құрметті оқырман. Бұл мақалада еш жерде жоқ. Бірақ егер сіз оның кодын оқып, ойын кітапшаңыз неге Митогенмен бұзылатынын, бірақ ванильді Ansible-мен жақсы жұмыс істейтінін немесе дәл сол ойын кітабының неге бұрын жақсы жұмыс істегенін, бірақ жаңартудан кейін оғаш нәрселер жасай бастағанын түсінуге дайын болсаңыз - жақсы, Митоген сіздің құралыңыз болуы мүмкін. Қолданыңыз, түсініңіз, мақалалар жазыңыз - мен оны қызығушылықпен оқимын.

Неліктен мен Митогенді жеке пайдаланбаймын? Өйткені гладиолус ол тапсырмалар өте қарапайым және бәрі жақсы болғанша ғана жұмыс істейді. Дегенмен, егер сіз сәл солға немесе оңға бұрылсаңыз - міне, біз жеттік: жауап ретінде сізге бірнеше анық емес ерекшеліктер ұшып келеді және суретті аяқтау үшін «барлығыңызға рахмет» деген жалпы тіркес жетіспейді. , барлығы еркін». Жалпы, мен келесі «жер асты соққысының» себептерін білуге ​​уақытты жоғалтқым келмейді.

Бұл параметрлердің кейбірі оқу процесінде табылды бастапқы код қосылым плагині «ssh.py» өздігінен түсіндіріледі. Мен оқудың нәтижелерімен бөлісемін, бұл басқа біреуді дереккөздерді қарауға, оларды оқуға, орындалуын тексеруге, құжаттамамен салыстыруға шабыттандырады - бәрібір ерте ме, кеш пе, мұның бәрі сізге оң нәтиже береді. Іске сәт!

Сауалнамаға тек тіркелген пайдаланушылар қатыса алады. Кіру, өтінемін.

Төмендегі Ansible параметрлерінің қайсысын жобаларыңызды жылдамдату үшін пайдаланасыз?

  • 69,6%құбыржолдау=true32

  • 34,8%жинау = ақылды/анық16

  • 52,2%ssh_args = "-o ControlMaster=auto -o ControlPersist=..."24

  • 17,4%тасымалдау_әдісі = құбырлы8

  • 63,0%шанышқылар = XXX29

  • 6,5%Мұның ешқайсысы емес, тек Mitogen3

  • 8,7%Митоген + Осы параметрлердің қайсысын атап өтемін4

46 қолданушы дауыс берді. 21 пайдаланушы қалыс қалды.

Ansible туралы көбірек білгіңіз келе ме?

  • 78,3%иә, әрине54

  • 21,7%иә, мен тек қаттырақ нәрселерді қалаймын!15

  • 0,0%жоқ, және бұл ештеңеге қажет емес0

  • 0,0%жоқ, бұл күрделі!!!0

69 пайдаланушы дауыс берді. 7 пайдаланушы қалыс қалды.

Ақпарат көзі: www.habr.com

пікір қалдыру