Kubernetes ishchi tugunlari: ko'p kichikmi yoki bir nechta kattami?

Kubernetes ishchi tugunlari: ko'p kichikmi yoki bir nechta kattami?
Kubernetes klasterini yaratishda savollar tug'ilishi mumkin: qancha ishchi tugunlarini sozlash kerak va qanday turdagi? Mahalliy klaster uchun nima yaxshiroq: bir nechta kuchli serverlarni sotib oling yoki ma'lumotlar markazingizda o'nlab eski mashinalardan foydalaning? Bulutda sakkizta bitta yadroli yoki ikkita to'rt yadroli misolni olish yaxshiroqmi?

Ushbu savollarga javoblar maqolada. Daniel Weibel, dasturiy ta'minot muhandisi va Learnk8s ta'lim loyihasi o'qituvchisi buyruq tarjimasida Mail.ru dan Kubernetes aaS.

Klaster sig'imi

Umuman olganda, Kubernetes klasterini katta "supertugun" deb hisoblash mumkin. Uning umumiy hisoblash quvvati uni tashkil etuvchi barcha tugunlarning quvvatlarining yig'indisidir.

Istalgan klaster sig'imiga erishishning bir necha yo'li mavjud. Misol uchun, bizga jami 8 protsessor yadrosi va 32 GB operativ xotiraga ega klaster kerak, chunki ilovalar to'plami juda ko'p resurslarni talab qiladi. Keyin siz 16 Gb xotiraga ega ikkita tugunni yoki 8 Gb xotirali to'rtta tugunni, ikkita to'rt yadroli protsessorni yoki to'rtta ikki yadrolini o'rnatishingiz mumkin.

Bu erda klaster yaratishning ikkita mumkin bo'lgan usuli mavjud:

Kubernetes ishchi tugunlari: ko'p kichikmi yoki bir nechta kattami?
Ikkala variant ham bir xil quvvatga ega klasterni ishlab chiqaradi, lekin pastki konfiguratsiyada to'rtta kichikroq tugun mavjud va yuqori konfiguratsiyada ikkita kattaroq tugun mavjud.

Qaysi variant yaxshiroq?

Bu savolga javob berish uchun ikkala variantning afzalliklarini ko'rib chiqaylik. Biz ularni jadvalda umumlashtirdik.

Bir nechta yirik tugunlar

Ko'p kichik tugunlar

Klasterni osonroq boshqarish (agar u mahalliy bo'lsa)

Silliq avtomatik masshtablash

Arzonroq (agar mahalliy bo'lsa)

Narx biroz farq qiladi (bulutda)

Resurs talab qiladigan dasturlarni ishga tushirishi mumkin

To'liq replikatsiya

Resurslardan samaraliroq foydalaniladi (tizim demonlariga kamroq yuk
Yuqori klaster xatolarga chidamliligi

E'tibor bering, biz faqat ishchi tugunlar haqida gapiramiz. Asosiy tugunlarning soni va hajmini tanlash butunlay boshqa mavzu.

Shunday qilib, keling, jadvaldagi har bir fikrni batafsilroq muhokama qilaylik.

Birinchi variant: bir nechta katta tugunlar

Eng ekstremal variant - butun klaster sig'imi uchun bitta ishchi tugun. Yuqoridagi misolda bu 16 protsessor yadrosi va 16 GB operativ xotiraga ega bo'lgan bitta ishchi tugun bo'ladi.

Plyusy

Plus No 1. Osonroq boshqarish
Butun parkni boshqarishdan ko'ra bir nechta mashinalarni boshqarish osonroq. Yangilanishlar va tuzatishlarni chiqarish tezroq va sinxronlashtirish osonroq. Mutlaq raqamlardagi muvaffaqiyatsizliklar soni ham kamroq.

Esda tutingki, yuqorida aytilganlarning barchasi bulutli nusxalarga emas, balki sizning uskunangizga, serverlaringizga tegishli.

Bulutda vaziyat boshqacha. U erda boshqaruv bulutli xizmat ko'rsatuvchi provayder tomonidan amalga oshiriladi. Shunday qilib, bulutdagi o'nta tugunni boshqarish bitta tugunni boshqarishdan unchalik farq qilmaydi.

Trafikni yo'naltirish va bulutdagi podlar o'rtasida yuk taqsimoti avtomatik ravishda amalga oshiriladi: Internetdan kelayotgan trafik asosiy yuk balanslagichiga yuboriladi, u trafikni tugunlardan birining portiga yo'naltiradi (NodePort xizmati har bir klaster tugunida portni 30000-32767 oralig'ida o'rnatadi). Kube-proksi tomonidan o'rnatilgan qoidalar trafikni tugundan podkaga yo'naltiradi. Ikki tugundagi o'nta podkada qanday ko'rinishga ega:

Kubernetes ishchi tugunlari: ko'p kichikmi yoki bir nechta kattami?
Pro №2: har bir tugun uchun kamroq xarajat
Kuchli mashina qimmatroq, lekin narxning oshishi chiziqli bo'lishi shart emas. Boshqacha qilib aytadigan bo'lsak, 10 Gb xotiraga ega o'n yadroli bitta server odatda bir xil hajmdagi xotiraga ega bo'lgan o'n yadroli serverdan arzonroqdir.

Ammo shuni yodda tutingki, bu qoida odatda bulutli xizmatlarda ishlamaydi. Barcha yirik bulutli provayderlarning joriy narxlash sxemalarida narxlar quvvatga qarab lineer ravishda oshadi.

Shunday qilib, bulutda siz odatda kuchliroq serverlarda saqlay olmaysiz.

Pro №3: Siz resurs talab qiladigan ilovalarni ishga tushirishingiz mumkin
Ba'zi ilovalar klasterda kuchli serverlarni talab qiladi. Misol uchun, agar mashinani o'rganish tizimi 8 Gb xotirani talab qilsa, siz uni 1 Gb tugunlarda ishlata olmaysiz, faqat kamida bitta katta ishchi tugun bilan.

Minusy

Kamchilik No 1. Har bir tugunga ko'p podalar
Xuddi shu vazifa kamroq tugunlarda bajarilsa, ularning har birida tabiiy ravishda ko'proq podalar bo'ladi.

Bu muammo bo'lishi mumkin.

Buning sababi shundaki, har bir modul konteynerning ishlash vaqtiga (masalan, Docker), shuningdek kubelet va cAdvisorga biroz qo'shimcha xarajatlar kiritadi.

Misol uchun, kubelet omon qolish uchun tugundagi barcha konteynerlarni muntazam tekshiradi - qancha konteynerlar bo'lsa, kubelet shunchalik ko'p ish qilishi kerak.

CAdvisor tugundagi barcha konteynerlar uchun resurslardan foydalanish statistikasini to‘playdi va kubelet bu ma’lumotlarni muntazam ravishda so‘raydi va API orqali taqdim etadi. Shunga qaramay, ko'proq konteynerlar cAdvisor va kubelet uchun ko'proq ishlashni anglatadi.

Agar modullar soni ko'paysa, u tizimni sekinlashtirishi va hatto uning ishonchliligini buzishi mumkin.

Kubernetes ishchi tugunlari: ko'p kichikmi yoki bir nechta kattami?
Kubernetes omborida ba'zilari shikoyat qildiBu tugunlar Ready/NotReady holatlari o'rtasida o'tadi, chunki tugundagi barcha konteynerlarni kubelet orqali muntazam tekshirish juda uzoq davom etadi.
Shu sababli Kubernetes har bir tugunga 110 tadan ko'p bo'lmagan podkalarni joylashtirishni tavsiya qiladi. Tugunning ishlashiga qarab, har bir tugun uchun ko'proq podlarni ishga tushirishingiz mumkin, ammo muammolar bo'ladimi yoki hammasi yaxshi ishlaydimi, buni oldindan aytish qiyin. Ishni oldindan sinab ko'rishga arziydi.

Kamchilik No 2. Replikatsiyani cheklash
Juda kam tugunlar dastur replikatsiyasining samarali hajmini cheklaydi. Misol uchun, agar sizda beshta replikatsiyaga ega, lekin faqat ikkita tugunga ega bo'lgan yuqori darajadagi dastur mavjud bo'lsa, ilovaning samarali replikatsiya darajasi ikkiga kamayadi.

Beshta nusxani faqat ikkita tugun bo'ylab tarqatish mumkin va agar ulardan biri muvaffaqiyatsiz bo'lsa, u bir vaqtning o'zida bir nechta replikalarni olib tashlaydi.

Agar sizda besh yoki undan ortiq tugun bo'lsa, har bir replika alohida tugunda ishlaydi va bitta tugunning ishlamay qolishi ko'pi bilan bitta nusxani olib tashlaydi.

Shunday qilib, yuqori mavjudlik talablari klasterda ma'lum bir minimal tugun sonini talab qilishi mumkin.

Kamchilik No 3. Muvaffaqiyatsizlikning yomon oqibatlari
Kam sonli tugunlar bilan har bir nosozlik yanada jiddiy oqibatlarga olib keladi. Misol uchun, agar sizda faqat ikkita tugun bo'lsa va ulardan biri muvaffaqiyatsiz bo'lsa, modullaringizning yarmi darhol yo'qoladi.

Albatta, Kubernetes ish yukini muvaffaqiyatsiz tugundan boshqalarga o'tkazadi. Ammo agar ularning soni oz bo'lsa, unda bo'sh sig'im etarli bo'lmasligi mumkin. Natijada, muvaffaqiyatsiz tugunni ochmaguningizcha, ba'zi ilovalaringiz mavjud bo'lmaydi.

Shunday qilib, tugunlar qanchalik ko'p bo'lsa, apparat buzilishlarining ta'siri shunchalik kam bo'ladi.

Kamchilik №4: Ko'proq avtomatik o'lchov qadamlari
Kubernetes bulutli infratuzilma uchun klasterli avtomatik masshtablash tizimiga ega, bu sizning joriy ehtiyojlaringizga qarab tugunlarni avtomatik ravishda qo‘shish yoki olib tashlash imkonini beradi. Kattaroq tugunlar bilan avtomatik o'lchov yanada keskin va noqulay bo'ladi. Misol uchun, ikkita tugunga qo'shimcha tugun qo'shilishi darhol klaster hajmini 50% ga oshiradi. Va sizga kerak bo'lmasa ham, bu resurslar uchun pul to'lashingiz kerak bo'ladi.

Shunday qilib, agar siz avtomatik klaster masshtabini qo'llashni rejalashtirmoqchi bo'lsangiz, tugunlar qanchalik kichik bo'lsa, siz shunchalik moslashuvchan va tejamkor masshtabga ega bo'lasiz.

Keling, ko'p sonli kichik tugunlarning afzalliklari va kamchiliklarini ko'rib chiqaylik.

Ikkinchi variant: ko'plab kichik tugunlar

Ushbu yondashuvning afzalliklari asosan bir nechta katta tugunlar bilan qarama-qarshi variantning kamchiliklaridan kelib chiqadi.

Plyusy

Pro №1: Muvaffaqiyatsizlikning kamroq ta'siri
Qanchalik ko'p tugun bo'lsa, har bir tugunda kamroq podalar. Misol uchun, agar sizda o'nta tugunga yuzta modul bo'lsa, unda har bir tugun o'rtacha o'nta modulga ega bo'ladi.

Shunday qilib, agar tugunlardan biri muvaffaqiyatsiz bo'lsa, ish yukining atigi 10 foizini yo'qotasiz. Imkoniyat shundaki, faqat oz sonli replikalarga ta'sir qiladi va umumiy dastur o'z faoliyatini davom ettiradi.

Bundan tashqari, qolgan tugunlar muvaffaqiyatsiz tugunning ish yukini boshqarish uchun yetarlicha boʻsh resurslarga ega boʻladi, shuning uchun Kubernetes podkastlarni erkin qayta rejalashtirishi mumkin va ilovalaringiz nisbatan tez funksional holatga qaytadi.

Pro №2: Yaxshi replikatsiya
Agar tugunlar yetarli boʻlsa, Kubernetes rejalashtiruvchisi barcha replikalarga turli tugunlarni belgilashi mumkin. Shunday qilib, agar tugun muvaffaqiyatsiz bo'lsa, faqat bitta replika ta'sir qiladi va dastur mavjud bo'lib qoladi.

Minusy

Kamchilik No 1. Nazorat qilish qiyin
Ko'p sonli tugunlarni boshqarish qiyinroq. Misol uchun, har bir Kubernetes tugunlari boshqalar bilan aloqa qilishlari kerak, ya'ni ulanishlar soni kvadratik ravishda o'sib boradi va bu ulanishlarning barchasini kuzatish kerak.

Kubernetes Controller Manager-dagi tugun boshqaruvchisi sog'lig'ini tekshirish uchun muntazam ravishda klasterdagi barcha tugunlar bo'ylab yuradi - tugunlar qancha ko'p bo'lsa, kontrollerga shunchalik yuk tushadi.

etcd ma'lumotlar bazasiga yuk ham ortib bormoqda - har bir kubelet va kube-proksi qo'ng'iroqlari kuzatuvchi etcd uchun (API orqali), bu etcd ob'ekt yangilanishlarini translyatsiya qilishi kerak.

Umuman olganda, har bir ishchi tugun asosiy tugunlarning tizim komponentlariga qo'shimcha yuklaydi.

Kubernetes ishchi tugunlari: ko'p kichikmi yoki bir nechta kattami?
Kubernetes rasmiy ravishda klasterlarni qo'llab-quvvatlaydi 5000 tagacha tugunlar soni. Biroq, amalda allaqachon 500 ta tugun mavjud ahamiyatsiz muammolarga olib kelishi mumkin.

Ko'p sonli ishchi tugunlarni boshqarish uchun siz kuchliroq asosiy tugunlarni tanlashingiz kerak. Masalan, kube-up avtomatik o'rnatadi ishchi tugunlar soniga qarab asosiy tugun uchun to'g'ri VM o'lchami. Ya'ni, ishchi tugunlari qanchalik ko'p bo'lsa, asosiy tugunlar shunchalik samarali bo'lishi kerak.

Ushbu o'ziga xos muammolarni hal qilish uchun maxsus ishlanmalar mavjud, masalan Virtual Kubelet. Ushbu tizim cheklovlarni chetlab o'tish va juda ko'p ishchi tugunlari bilan klasterlar yaratish imkonini beradi.

Kamchilik №2: Qo'shimcha xarajatlar.
Har bir ishchi tugunda Kubernetes tizim demonlari to'plamini ishga tushiradi - bularga konteynerning ishlash vaqti (masalan, Docker), kube-proksi va kubelet, shu jumladan cAdvisor kiradi. Ular birgalikda ma'lum miqdordagi resurslarni iste'mol qiladilar.

Agar sizda ko'plab kichik tugunlar bo'lsa, har bir tugundagi bu yukning ulushi kattaroqdir. Masalan, bitta tugundagi barcha tizim demonlari birgalikda 0,1 protsessor yadrolari va 0,1 GB xotiradan foydalanishini tasavvur qiling. Agar sizda 10 Gb xotiraga ega bitta o'n yadroli tugun bo'lsa, demonlar klaster hajmining 1 foizini iste'mol qiladi. Boshqa tomondan, 1 Gb xotiraga ega o'nta bitta yadroli tugunlarda demonlar klaster sig'imining 10 foizini oladi.

Shunday qilib, tugunlar qanchalik kam bo'lsa, infratuzilma shunchalik samarali ishlatiladi.

Kamchilik No 3. Resurslardan samarasiz foydalanish
Kichik tugunlarda qolgan resurs bo'laklari har qanday ish yukini tayinlash uchun juda kichik bo'lishi mumkin, shuning uchun ular foydalanilmay qoladi.

Misol uchun, har bir pod 0,75 GB xotira talab qiladi. Agar sizda har biri 1 Gb xotiraga ega o'nta tugun bo'lsa, har bir tugunda 0,25 Gb foydalanilmagan xotirani qoldirib, o'nta podkastni ishga tushirishingiz mumkin.

Bu butun klaster xotirasining 25% isrof bo'lishini anglatadi.

10 Gb xotiraga ega katta tugunda siz ushbu modullarning 13 tasini ishga tushirishingiz mumkin - va faqat bitta foydalanilmagan 0,25 Gb fragment bo'ladi.

Bunday holda, xotiraning faqat 2,5% isrof qilinadi.

Shunday qilib, resurslar kattaroq tugunlarda yanada maqbulroq ishlatiladi.

Bir nechta katta tugunlar yoki ko'plab kichiklar?

Xo'sh, qaysi biri yaxshiroq: klasterdagi bir nechta katta tugunlar yoki ko'plab kichiklar? Har doimgidek, aniq javob yo'q. Ko'p narsa dastur turiga bog'liq.

Misol uchun, agar dastur 10 Gb xotirani talab qilsa, kattaroq tugunlar aniq tanlovdir. Va agar ilova yuqori darajada mavjudligi uchun o'n marta takrorlashni talab qilsa, replikalarni faqat ikkita tugunga joylashtirish xavfi deyarli yo'q - klasterda kamida o'nta tugun bo'lishi kerak.

Oraliq vaziyatlarda har bir variantning afzalliklari va kamchiliklari asosida tanlov qiling. Ehtimol, ba'zi dalillar sizning vaziyatingizga boshqalarga qaraganda ko'proq mos keladi.

Va barcha tugunlarni bir xil o'lchamda qilish kerak emas. Avvaliga bir xil o'lchamdagi tugunlar bilan tajriba o'tkazishga, keyin ularga boshqa o'lchamdagi tugunlarni qo'shib, ularni klasterda birlashtirishga hech narsa to'sqinlik qilmaydi. Kubernetes klasteridagi ishchi tugunlari mutlaqo heterojen bo'lishi mumkin. Shunday qilib, siz ikkala yondashuvning afzalliklarini birlashtirishga harakat qilishingiz mumkin.

Yagona retsept yo'q va har bir vaziyatning o'ziga xos nuanslari bor va faqat ishlab chiqarish haqiqatni ko'rsatadi.

Tarjima bulutli platforma jamoasi tomonidan tayyorlangan Mail.ru bulutli echimlar.

Kubernetes haqida ko'proq ma'lumot: 25 Klasterlarni boshqarish va joylashtirish uchun foydali vositalar.

Manba: www.habr.com

a Izoh qo'shish