Ansible ылдамдатуу

Ansible ылдамдатуу
Демейки орнотуулар менен Ansible өз ишин тез аткара албай турганы жашыруун эмес. Макалада мен мунун бир нече себептерин көрсөтөм жана долбоордун ылдамдыгын чындап жогорулата турган пайдалуу минималдуу орнотууларды сунуштайм.

Бул жерде жана төмөндө биз Ansible 2.9.x талкуулайбыз, ал жаңы түзүлгөн virtualenvде сиздин сүйүктүү ыкмаңызда орнотулган.

Орнотулгандан кийин, ойнотуу китебиңиздин жанында “ansible.cfg” файлын түзүңүз - бул жайгашкан жер бул орнотууларды долбоор менен бирге өткөрүп берүүгө мүмкүндүк берет жана алар автоматтык түрдө жүктөлөт.

Түтүктөр

Кээ бирөөлөр түтүктөрдү колдонуу зарылчылыгы жөнүндө, башкача айтканда, максаттуу системанын файлдык тутумуна модулдарды көчүрүү эмес, Base64 менен оролгон zip архивин түздөн-түз Python котормочусунун stdinине өткөрүп берүү жөнүндө уккан болушу мүмкүн, бирок башкалар укпашы мүмкүн, бирок факт факт бойдон калууда: бул жөндөө дагы эле бааланбаган бойдон калууда. Тилекке каршы, sudo конфигурациялоо үчүн колдонулган кээ бир популярдуу Linux дистрибьюциялары демейки боюнча анча жакшы эмес - андыктан бул буйрук tty (терминал) талап кылгандыктан, Ansible бул абдан пайдалуу жөндөөнү демейки боюнча өчүрүп койгон.

pipelining = True

Фактыларды чогултуу

Демейки жөндөөлөр менен Ansible ар бир оюнга катышкан бардык хосттор үчүн фактыларды чогултууну демилгелерин билесизби? Жалпысынан, сиз билбесеңиз, азыр билесиз. Мунун алдын алуу үчүн, сиз фактыларды чогултуу үчүн ачык суроо режимин (ачык) же акылдуу режимди иштетишиңиз керек. Анда мурунку спектаклдерде кездешпеген фактылар гана алып баруучулардан чогултулат.
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 чөйрө өзгөрмөлөрү аркылуу өткөрөбүз.

Митоген жөнүндө
- Митоген жөнүндө бул кайда? – деген суроого акыңыз бар, урматтуу окурман. Бул макалада эч жерде жок. Бирок, эгер сиз чындап эле анын кодун окуп, оюн китебиңиз эмне үчүн Mitogen менен бузулуп, бирок Vanilla Ansible менен жакшы иштегенин түшүнгөнгө даяр болсоңуз, же эмне үчүн ошол эле окуу китеби мурда жакшы иштеп келген, бирок жаңыртылгандан кийин кызыктай нерселерди жасай баштаган - жакшы, Mitogen Сиздин куралыңыз болушу мүмкүн. Колдонуңуз, түшүнүңүз, макала жазыңыз - мен аны кызыгуу менен окуйм.

Эмне үчүн мен жеке өзүм Митогенди колдонбойм? Анткени gladiolus ал милдеттери чынында эле жөнөкөй жана баары жакшы болсо гана иштейт. Бирок, эгер сиз бир аз солго же оңго бурулсаңыз - биз келдик: жооп катары бир ууч түшүнүксүз өзгөчөлүктөр сизге учуп баратат жана сүрөттү толуктоо үчүн "баарыңарга рахмат" деген жалпы сөз айкашы жетишпейт. , бардыгы эркин». Жалпысынан алганда, мен жөн гана кийинки "жер астындагы тыктын" себептерин табууга убакыт короткум келбейт.

Бул орнотуулардын айрымдары окуу процессинде табылган булак коду "ssh.py" өзүн-өзү түшүндүрүүчү аты менен туташуу плагини. Мен окуунун натыйжалары менен бөлүшөм, бул башка бирөөгө булактарды карап, аларды окууга, аткарылышын текшерүүгө, документация менен салыштырууга шыктандырат деп үмүттөнөм - мунун баары эртедир-кечтир сизге оң натыйжаларды алып келет. Жолуңуз ачык болсун!

Сурамжылоого катталган колдонуучулар гана катыша алышат. Кирүү, өтүнөмүн.

Төмөнкү Ansible орнотууларынын кайсынысын долбоорлоруңузду тездетүү үчүн колдоносуз?

  • 69,6%pipelining=true32

  • 34,8%чогултуу = акылдуу/айкын16

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

  • 17,4%transfer_method = труба менен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 колдонуучу добуш берүүдөн баш тартты.

Source: www.habr.com

Комментарий кошуу