Binilisan ang Ansible

Binilisan ang Ansible
Hindi lihim na sa mga default na setting ay hindi magagawa ng Ansible ang trabaho nito nang napakabilis. Sa artikulo ay ituturo ko ang ilang mga kadahilanan para dito at nag-aalok ng isang kapaki-pakinabang na minimum na mga setting na, malamang, ay talagang magpapataas ng bilis ng iyong proyekto.

Dito at sa ibaba ay tinatalakay namin ang Ansible 2.9.x, na na-install sa bagong likhang virtualenv sa iyong paboritong paraan.

Pagkatapos ng pag-install, lumikha ng isang "ansible.cfg" na file sa tabi ng iyong playbook - ang lokasyong ito ay magbibigay-daan sa iyong ilipat ang mga setting na ito kasama ng proyekto, pati na rin ang mga ito ay awtomatikong maglo-load.

Pipelining

Maaaring narinig na ng ilan ang tungkol sa pangangailangang gumamit ng pipelining, iyon ay, hindi pagkopya ng mga module sa file system ng target system, ngunit paglilipat ng isang zip archive na nakabalot sa Base64 nang direkta sa stdin ng Python interpreter, ngunit ang iba ay maaaring hindi, ngunit ang katotohanan. nananatiling katotohanan: ang setting na ito nananatili pa ring minamaliit. Sa kasamaang palad, ang ilan sa mga tanyag na distribusyon ng Linux na ginamit upang i-configure ang sudo bilang default ay hindi masyadong maayos - upang ang utos na ito ay nangangailangan ng isang tty (terminal), kaya iniwan ng Ansible na hindi pinagana ang napakakapaki-pakinabang na setting na ito bilang default.

pipelining = True

Pagtitipon ng mga katotohanan

Alam mo ba na sa mga default na setting, sinisimulan ng Ansible para sa bawat paglalaro ang koleksyon ng mga katotohanan para sa lahat ng host na lumalahok dito? Sa pangkalahatan, kung hindi mo alam, ngayon alam mo na. Upang maiwasang mangyari ito, kailangan mong paganahin ang alinman sa tahasang mode ng kahilingan para sa pagkolekta ng mga katotohanan (tahasang) o ang smart mode. Dito, ang mga katotohanan ay kokolektahin lamang mula sa mga host na hindi nakatagpo sa mga nakaraang dula.
UPD. Kapag kumukopya, kakailanganin mong pumili ng isa sa mga setting na ito.

gathering = smart|explicit

Muling paggamit ng mga ssh na koneksyon

Kung nagpatakbo ka na ng Ansible sa debugging mode (ang opsyong "v", naulit ng isa hanggang siyam na beses), maaaring napansin mo na ang mga ssh na koneksyon ay patuloy na ginagawa at sinisira. Kaya, may ilang mga subtleties din dito.

Maiiwasan mo ang hakbang ng muling pagtatatag ng koneksyon sa ssh sa dalawang antas nang sabay-sabay: parehong direkta sa ssh client, at kapag naglilipat ng mga file sa pinamamahalaang host mula sa manager.
Upang muling magamit ang isang bukas na koneksyon sa ssh, ipasa lamang ang mga kinakailangang key sa ssh client. Pagkatapos ay magsisimula itong gawin ang mga sumusunod: kapag nagtatag ng isang koneksyon sa ssh sa unang pagkakataon, gagawa din ito ng isang tinatawag na control socket, sa mga susunod na pag-install, susuriin nito ang pagkakaroon ng mismong socket na ito, at kung matagumpay, muling gamitin ang umiiral na koneksyon sa ssh. At para maging makabuluhan ang lahat ng ito, itakda natin ang oras para sa pagpapanatili ng koneksyon kapag hindi aktibo. Maaari kang magbasa nang higit pa sa ssh na dokumentasyon, at sa konteksto ng Ansible ginagamit lang namin ang "pagpapasa" ng mga kinakailangang opsyon sa ssh client.

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

Upang muling magamit ang isang bukas na ssh na koneksyon kapag naglilipat ng mga file sa isang pinamamahalaang host, tumukoy lamang ng isa pang hindi kilalang setting na ssh_tranfer_method. Ang dokumentasyon sa paksang ito ay labis kuripot at nakakapanlinlang, dahil gumagana nang maayos ang opsyong ito! Pero nagbabasa source code nagbibigay-daan sa iyo na maunawaan kung ano ang eksaktong mangyayari: ang dd command ay ilulunsad sa pinamamahalaang host, direktang gumagana sa nais na file.

transfer_method = piped

Sa pamamagitan ng paraan, sa "develop" na sangay ay umiiral din ang setting na ito hindi pupunta kahit saan.

Huwag matakot sa kutsilyo, matakot sa tinidor

Ang isa pang kapaki-pakinabang na setting ay ang mga tinidor. Tinutukoy nito ang bilang ng mga proseso ng manggagawa na sabay-sabay na kumonekta sa mga host at magsasagawa ng mga gawain. Dahil sa mga kakaibang katangian ng Python bilang isang wika, mga proseso ang ginagamit, hindi mga thread, dahil sinusuportahan pa rin ng Ansible ang Python 2.7 - walang asyncio para sa iyo, walang punto sa pagpapakilala ng asynchronous na pag-uugali dito! Bilang default, tumatakbo ang Ansible lima manggagawa, ngunit kung tatanungin nang tama, maglulunsad ito ng higit pa:

forks = 20

Binabalaan lang kita kaagad na maaaring mayroong ilang mga paghihirap dito na may kaugnayan sa magagamit na dami ng memorya sa control machine. Sa madaling salita, maaari mong, siyempre, magtakda ng mga tinidor=100500, ngunit sino ang nagsabing gagana ito?

Pinagsasama-sama ang lahat

Bilang resulta, para sa ansible.cfg (ini format), ang mga kinakailangang setting ay maaaring magmukhang ganito:

[defaults]
gathering = smart|explicit
forks = 20
[ssh_connection]
pipelining = True
ssh_args = -o ControlMaster=auto -o ControlPersist=15m
transfer_method = piped

At kung gusto mong itago ang lahat sa isang normal na YaML-imbentaryo ng isang malusog na tao, maaari itong magmukhang ganito:

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

Sa kasamaang palad, hindi ito gagana sa mga setting na “gathering = smart/explicit” at “forks = 20”: ang kanilang mga katumbas na YaML ay hindi umiiral. Alinman sa itinakda namin ang mga ito sa ansible.cfg, o ipinapasa namin ang mga ito sa mga variable ng kapaligiran na ANSIBLE_GATHERING at ANSIBLE_FORKS.

Tungkol kay Mitogen
- Saan ito tungkol sa Mitogen? - may karapatan kang magtanong, mahal na mambabasa. Wala kahit saan sa artikulong ito. Ngunit kung talagang handa ka nang basahin ang code nito at alamin kung bakit nag-crash ang iyong playbook sa Mitogen, ngunit gumagana nang maayos sa vanilla Ansible, o kung bakit gumagana nang maayos ang parehong playbook dati, ngunit pagkatapos ng pag-update ay nagsimulang gumawa ng mga kakaibang bagay - mabuti, Mitogen maaaring maging kasangkapan mo. Ilapat ito, unawain ito, magsulat ng mga artikulo - Babasahin ko ito nang may interes.

Bakit hindi ko personal na ginagamit ang Mitogen? Dahil ang Gladiolus ay gumagana lamang hangga't ang mga gawain ay talagang simple at lahat ay maayos. Gayunpaman, kung lumiko ka ng kaunti sa kaliwa o kanan - iyon lang, nakarating na kami: bilang tugon, lumipad sa iyo ang isang maliit na bilang ng hindi malinaw na mga eksepsiyon, at para makumpleto ang larawan, ang kulang na lang ay ang karaniwang pariralang “salamat sa lahat. , lahat ay libre.” Sa pangkalahatan, ayaw ko lang mag-aksaya ng oras na alamin ang mga dahilan para sa susunod na "underground knock".

Ang ilan sa mga setting na ito ay natuklasan sa panahon ng proseso ng pagbabasa source code connection plugin sa ilalim ng self-explanatory name na “ssh.py”. Ibinabahagi ko ang mga resulta ng pagbabasa sa pag-asa na ito ay magbibigay inspirasyon sa ibang tao na tingnan ang mga mapagkukunan, basahin ang mga ito, suriin ang pagpapatupad, ihambing sa dokumentasyon - pagkatapos ng lahat, sa madaling panahon ang lahat ng ito ay magdadala sa iyo ng mga positibong resulta. Good luck!

Ang mga rehistradong user lamang ang maaaring lumahok sa survey. Mag-sign in, pakiusap

Alin sa mga sumusunod na setting ng Ansible ang ginagamit mo upang pabilisin ang iyong mga proyekto?

  • 69,6%pipelining=totoo32

  • 34,8%pagtitipon = matalino/hayag16

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

  • 17,4%paraan_paglipat = piped8

  • 63,0%mga tinidor = XXX29

  • 6,5%Wala sa mga ito, Mitogen3 lang

  • 8,7%Mitogen + Tatandaan ko kung alin sa mga setting na ito4

46 na user ang bumoto. 21 user ang umiwas.

Gusto ng higit pang bagay tungkol sa Ansible?

  • 78,3%oo, siyempre54

  • 21,7%oo, gusto ko lang ng mas maraming hardcore na bagay!15

  • 0,0%hindi, at hindi ito kailangan para sa wala0

  • 0,0%hindi, ito ay kumplikado!!!0

69 user ang bumoto. 7 na user ang umiwas.

Pinagmulan: www.habr.com

Magdagdag ng komento