Ansible tezlashmoqda

Ansible tezlashmoqda
Hech kimga sir emaski, standart sozlamalar bilan Ansible o'z ishini juda tez bajara olmaydi. Maqolada men buning bir nechta sabablarini ko'rsataman va loyihangiz tezligini oshirishi mumkin bo'lgan foydali minimal sozlamalarni taklif qilaman.

Bu erda va quyida biz yangi yaratilgan virtualenv-ga o'zingiz yoqtirgan tarzda o'rnatilgan Ansible 2.9.x-ni muhokama qilamiz.

O'rnatishdan so'ng, o'yin kitobingiz yonida "ansible.cfg" faylini yarating - bu joy sizga ushbu sozlamalarni loyiha bilan birga o'tkazish imkonini beradi va ular avtomatik ravishda yuklanadi.

Quvurlarni yotqizish

Ba'zilar quvur liniyasidan foydalanish, ya'ni modullarni maqsadli tizimning fayl tizimiga nusxalash emas, balki Base64-ga o'ralgan zip arxivini to'g'ridan-to'g'ri Python tarjimonining stdin-ga o'tkazish zarurligi haqida eshitgan bo'lishi mumkin, ammo boshqalar eshitmagan bo'lishi mumkin, lekin haqiqat haqiqat bo'lib qoladi: bu sozlama hali ham yetarlicha baholanmagan. Afsuski, sudo-ni sozlash uchun ishlatiladigan ba'zi mashhur Linux distributivlari sukut bo'yicha unchalik yaxshi emas - shuning uchun bu buyruq tty (terminal) talab qildi, shuning uchun Ansible bu juda foydali sozlamani sukut bo'yicha o'chirib qo'ydi.

pipelining = True

Faktlarni yig'ish

Standart sozlamalar bilan Ansible har bir o'yin uchun unda ishtirok etuvchi barcha xostlar uchun faktlar to'plamini boshlashini bilasizmi? Umuman olganda, agar siz bilmagan bo'lsangiz, endi bilasiz. Buning oldini olish uchun siz faktlarni to'plash uchun aniq so'rov rejimini (aniq) yoki aqlli rejimni yoqishingiz kerak. Unda faqat oldingi o'yinlarda uchramagan mezbonlardan faktlar to'planadi.
UPD. Nusxalashda siz ushbu sozlamalardan birini tanlashingiz kerak bo'ladi.

gathering = smart|explicit

Ssh ulanishlarini qayta ishlatish

Agar siz Ansible-ni disk raskadrovka rejimida ishga tushirgan bo'lsangiz ("v" varianti, birdan to'qqiz martagacha takrorlanadi), siz ssh ulanishlari doimiy ravishda amalga oshirilayotganini va uzilib qolganini payqagan bo'lishingiz mumkin. Shunday qilib, bu erda ham bir nechta nozikliklar mavjud.

Bir vaqtning o'zida ikkita darajada ssh ulanishini qayta tiklash bosqichidan qochishingiz mumkin: to'g'ridan-to'g'ri ssh mijozida va fayllarni boshqaruvchidan boshqariladigan xostga o'tkazishda.
Ochiq ssh ulanishini qayta ishlatish uchun kerakli kalitlarni ssh mijoziga o'tkazing. Keyin u quyidagilarni amalga oshirishni boshlaydi: birinchi marta ssh ulanishini o'rnatishda u qo'shimcha ravishda boshqaruv rozetkasini yaratadi, keyingi o'rnatishda esa aynan shu rozetkaning mavjudligini tekshiradi va agar muvaffaqiyatli bo'lsa, qayta ishlating. mavjud ssh ulanishi. Bularning barchasi mantiqiy bo'lishi uchun keling, faol bo'lmaganda ulanishni saqlab qolish vaqtini belgilaylik. Batafsil maqolada o'qishingiz mumkin ssh hujjatlari, va Ansible kontekstida biz shunchaki ssh mijoziga kerakli variantlarni "yo'naltirish" dan foydalanamiz.

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

Fayllarni boshqariladigan xostga oʻtkazishda allaqachon ochiq ssh ulanishidan qayta foydalanish uchun boshqa nomaʼlum ssh_tranfer_method sozlamasini koʻrsatish kifoya. Ushbu mavzu bo'yicha hujjatlar juda katta ziqna va chalg'ituvchi, chunki bu variant juda yaxshi ishlaydi! Lekin o'qish manba kodi aniq nima sodir bo'lishini tushunishga imkon beradi: dd buyrug'i to'g'ridan-to'g'ri kerakli fayl bilan ishlaydigan boshqariladigan xostda ishga tushiriladi.

transfer_method = piped

Aytgancha, "ishlab chiqish" bo'limida bu sozlama ham mavjud hech qaerga ketmaydi.

Pichoqdan qo'rqma, sanchqidan qo'rq

Yana bir foydali parametr - vilkalar. U bir vaqtning o'zida xostlarga ulanadigan va vazifalarni bajaradigan ishchi jarayonlar sonini aniqlaydi. Til sifatida Pythonning o'ziga xos xususiyatlaridan kelib chiqqan holda, iplar emas, balki jarayonlar qo'llaniladi, chunki Ansible hali ham Python 2.7 ni qo'llab-quvvatlaydi - siz uchun asyncio yo'q, bu erda asinxron xatti-harakatni joriy qilishning ma'nosi yo'q! Odatiy bo'lib Ansible ishlaydi beshta ishchilar, lekin agar to'g'ri so'ralsa, u ko'proq ishga tushadi:

forks = 20

Men sizni darhol ogohlantiraman, bu erda boshqaruv mashinasida mavjud xotira miqdori bilan bog'liq ba'zi qiyinchiliklar bo'lishi mumkin. Boshqacha qilib aytganda, siz, albatta, vilkalar = 100500 o'rnatishingiz mumkin, lekin bu ishlaydi deb kim aytdi?

Hammasini bir joyga qo'yish

Natijada, ansible.cfg (ini formati) uchun kerakli sozlamalar quyidagicha ko'rinishi mumkin:

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

Va agar siz sog'lom odamning oddiy YaML-inventarida hamma narsani yashirishni istasangiz, u quyidagicha ko'rinishi mumkin:

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

Afsuski, bu "yig'ish = aqlli/aniq" va "vilkalar = 20" sozlamalari bilan ishlamaydi: ularning YaML ekvivalentlari mavjud emas. Yoki biz ularni ansible.cfg da o'rnatamiz yoki ANSIBLE_GATHERING va ANSIBLE_FORKS muhit o'zgaruvchilari orqali o'tkazamiz.

Mitogen haqida
- Bu Mitogen haqida qayerda? — soʻrashga haqqingiz bor, aziz oʻquvchi. Ushbu maqolaning hech bir joyida. Ammo agar siz haqiqatan ham uning kodini o'qib chiqishga tayyor bo'lsangiz va nima uchun o'yin kitobingiz Mitogen bilan ishlamay qolganini, lekin vanil Ansible bilan yaxshi ishlayotganini yoki nima uchun o'sha o'yin kitobi avval yaxshi ishlayotganini, lekin yangilanishdan keyin g'alati ishlarni qila boshlaganini tushunsangiz - yaxshi, Mitogen potentsial sizning vositangiz bo'lishi mumkin. Uni qo'llang, tushuning, maqolalar yozing - men uni qiziqish bilan o'qiyman.

Nega men shaxsan Mitogendan foydalanmayman? Chunki gladiolus vazifalari juda oddiy va hamma narsa yaxshi bo'lsagina ishlaydi. Ammo, agar siz bir oz chapga yoki o'ngga burilsangiz - biz yetib keldik: bunga javoban bir nechta noaniq istisnolar sizga uchadi va rasmni to'ldirish uchun "barchangizga rahmat" iborasi etishmayapti. , hamma bepul." Umuman olganda, men navbatdagi "er osti zarbasi" ning sabablarini aniqlash uchun vaqt sarflashni xohlamayman.

Ushbu sozlamalarning ba'zilari o'qish jarayonida aniqlangan manba kodi "ssh.py" o'z-o'zidan tushunarli nomi ostida ulanish plagini. Men o'qish natijalarini boshqalarni manbalarga qarashga, ularni o'qishga, amalga oshirilishini tekshirishga, hujjatlar bilan solishtirishga ilhomlantiradi degan umidda baham ko'raman - oxir-oqibat, ertami-kechmi bularning barchasi sizga ijobiy natijalar beradi. Omad!

So'rovda faqat ro'yxatdan o'tgan foydalanuvchilar ishtirok etishlari mumkin. tizimga kirishiltimos.

Loyihalaringizni tezlashtirish uchun quyidagi Ansible sozlamalaridan qaysi biri foydalanasiz?

  • 69,6%quvur liniyasi = true32

  • 34,8%yig'ish = aqlli / aniq16

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

  • 17,4%transfer_metod = quvurli8

  • 63,0%vilkalar = XXX29

  • 6,5%Bularning hech biri, faqat Mitogen3

  • 8,7%Mitogen + Men ushbu sozlamalardan qaysi birini qayd etaman4

46 ta foydalanuvchi ovoz berdi. 21 foydalanuvchi betaraf qoldi.

Ansible haqida ko'proq ma'lumot olishni xohlaysizmi?

  • 78,3%ha, albatta 54

  • 21,7%ha, men shunchaki qattiqroq narsalarni xohlayman!15

  • 0,0%yo'q, va bu hech narsa uchun kerak emas0

  • 0,0%yo'q, bu murakkab!!!0

69 foydalanuvchi ovoz berdi. 7 nafar foydalanuvchi betaraf qolgan.

Manba: www.habr.com

a Izoh qo'shish