Kubernetesning eng yaxshi amaliyotlari. Resurs so'rovlari va cheklovlarini o'rnatish

Kubernetesning eng yaxshi amaliyotlari. Kichik konteynerlarni yaratish
Kubernetesning eng yaxshi amaliyotlari. Nomlar maydoni bilan Kubernetesni tashkil qilish
Kubernetesning eng yaxshi amaliyotlari. Kubernetes jonliligini tayyorlik va jonlilik testlari bilan tekshirish

Har bir Kubernetes resursi uchun siz ikki turdagi talablarni sozlashingiz mumkin - so'rovlar va cheklovlar. Birinchisi, konteyner yoki podkastni ishga tushirish uchun zarur bo'lgan bepul tugun resurslarining mavjudligi uchun minimal talablarni tavsiflaydi, ikkinchisi konteyner uchun mavjud resurslarni qat'iy cheklaydi.

Kubernetes podkastlarni rejalashtirganda, konteynerlarning to'g'ri ishlashi uchun etarli resurslarga ega bo'lishi juda muhimdir. Agar siz katta dasturni resurs cheklangan tugunga joylashtirishni rejalashtirmoqchi bo'lsangiz, u ishlamasligi mumkin, chunki tugun xotirasi kam yoki protsessor quvvati tugaydi. Ushbu maqolada biz resurs so'rovlari va cheklovlari yordamida hisoblash quvvati tanqisligini qanday hal qilishni ko'rib chiqamiz.

So'rovlar va cheklovlar Kubernetes protsessor va xotira kabi resurslarni boshqarish uchun foydalanadigan mexanizmlardir. So'rovlar konteyner so'ralgan manbani olishini ta'minlaydi. Agar konteyner resurs so'rasa, Kubernetes uni faqat uni ta'minlay oladigan tugunga rejalashtiradi. Konteyner tomonidan so'ralgan resurslar hech qachon ma'lum bir qiymatdan oshmasligini nazorat qiladi.

Kubernetesning eng yaxshi amaliyotlari. Resurs so'rovlari va cheklovlarini o'rnatish

Konteyner faqat hisoblash quvvatini ma'lum chegaragacha oshirishi mumkin, shundan so'ng u cheklangan bo'ladi. Keling, bu qanday ishlashini ko'rib chiqaylik. Shunday qilib, ikkita turdagi resurslar mavjud - protsessor va xotira. Kubernetes rejalashtiruvchisi podkastlaringizni qayerda ishga tushirishni aniqlash uchun ushbu resurslar haqidagi ma'lumotlardan foydalanadi. Pod uchun odatiy resurs spetsifikatsiyasi shunday ko'rinadi.

Kubernetesning eng yaxshi amaliyotlari. Resurs so'rovlari va cheklovlarini o'rnatish

Podkadagi har bir konteyner o'z so'rovlari va chegaralarini o'rnatishi mumkin, bularning barchasi qo'shimcha hisoblanadi. Protsessor resurslari millikorlarda aniqlanadi. Agar sizning konteyneringiz ishlashi uchun ikkita to'liq yadro kerak bo'lsa, siz qiymatni 2000 m ga o'rnatasiz. Agar konteyner faqat yadroning 1/4 qismining kuchiga muhtoj bo'lsa, qiymat 250 m bo'ladi. Shuni yodda tutingki, agar siz eng katta tugunning yadrolari sonidan kattaroq protsessor resurs qiymatini belgilasangiz, podkastingiz umuman ishga tushmaydi. Agar sizda to'rtta yadroga muhtoj bo'lgan Pod bo'lsa va Kubernetes klasteri faqat ikkita asosiy virtual mashinadan iborat bo'lsa, xuddi shunday holat yuzaga keladi.

Agar ilovangiz bir nechta yadrolardan foydalanish uchun maxsus ishlab chiqilmagan bo'lsa (murakkab ilmiy hisoblash va ma'lumotlar bazasi operatsiyalari kabi dasturlar aqlga kelsa), u holda eng yaxshi amaliyot CPU so'rovlarini 1 yoki undan past darajaga o'rnatish va keyin kengaytirilishi uchun ko'proq replikalarni ishga tushirishdir. Ushbu yechim tizimga ko'proq moslashuvchanlik va ishonchlilikni beradi.

CPU cheklovlari haqida gap ketganda, narsalar yanada qiziqarli bo'ladi, chunki u siqilgan manba hisoblanadi. Agar ilovangiz protsessor quvvati chegarasiga yaqinlasha boshlasa, Kubernetes protsessor chastotasini pasaytiradigan CPU Throttling yordamida konteyneringizni sekinlashtira boshlaydi. Bu shuni anglatadiki, protsessor sun'iy ravishda siqilib, dasturning ishlashini yomonlashtiradi, lekin jarayon to'xtatilmaydi yoki olib tashlanmaydi.

Xotira resurslari baytlarda aniqlanadi. Odatda sozlamalardagi qiymat mebibaytlarda o'lchanadi Mib, lekin siz baytdan petabaytgacha bo'lgan har qanday qiymatni o'rnatishingiz mumkin. Xuddi shu holat protsessorda bo'lgani kabi bu erda ham qo'llaniladi - agar siz tugunlaringizdagi xotira miqdoridan kattaroq xotira miqdori uchun so'rov yuborsangiz, u podkastni bajarish rejalashtirilmaydi. Ammo CPU resurslaridan farqli o'laroq, xotira siqilmaydi, chunki undan foydalanishni cheklashning hech qanday usuli yo'q. Shuning uchun konteynerning bajarilishi unga ajratilgan xotiradan oshib ketishi bilanoq to'xtatiladi.

Kubernetesning eng yaxshi amaliyotlari. Resurs so'rovlari va cheklovlarini o'rnatish

Shuni yodda tutish kerakki, siz tugunlaringiz taqdim eta oladigan resurslardan oshib ketadigan so'rovlarni sozlay olmaysiz. GKE virtual mashinalari uchun umumiy resurs spetsifikatsiyalarini ushbu videoning quyidagi havolalarida topish mumkin.

Ideal dunyoda konteynerning standart sozlamalari ish jarayonlarining muammosiz ishlashini ta'minlash uchun etarli bo'ladi. Ammo haqiqiy dunyo bunday emas, odamlar resurslardan foydalanishni sozlashni osonlikcha unutishlari mumkin yoki xakerlar infratuzilmaning haqiqiy imkoniyatlaridan oshib ketadigan so'rovlar va cheklovlarni o'rnatadilar. Bunday stsenariylarning paydo bo'lishining oldini olish uchun siz ResourceQuota va LimitRange manba kvotalarini sozlashingiz mumkin.

Nomlar maydoni yaratilgandan so'ng, uni kvotalar yordamida bloklash mumkin. Misol uchun, agar sizda ishlab chiqarish va ishlab chiqaruvchi nomlar bo'shliqlari bo'lsa, unda ishlab chiqarish kvotalari umuman yo'q va ishlab chiqish kvotalari juda qattiq. Bu ishlab chiqaruvchiga traffik keskin ko'tarilgan taqdirda, ishlab chiqaruvchini butunlay blokirovka qilib, mavjud bo'lgan barcha resursni egallashga imkon beradi.

Resurs kvotasi shunday ko'rinishi mumkin. Ushbu misolda 4 ta bo'lim mavjud - bu kodning 4 ta pastki qatori.

Kubernetesning eng yaxshi amaliyotlari. Resurs so'rovlari va cheklovlarini o'rnatish

Keling, ularning har birini ko'rib chiqaylik. Requests.cpu - nomlar maydonidagi barcha konteynerlardan kelishi mumkin bo'lgan birlashtirilgan CPU so'rovlarining maksimal soni. Ushbu misolda sizda 50 m so'rovli 10 ta konteyner, 100 m so'rovli besh konteyner yoki 500 million so'rovli bitta konteyner bo'lishi mumkin. Berilgan nomlar maydonidagi so'rovlar.cpu umumiy soni 500 m dan kam bo'lsa, hammasi yaxshi bo'ladi.

Xotira so'ralgan so'rovlar.xotira - nomlar maydonidagi barcha konteynerlar ega bo'lishi mumkin bo'lgan birlashtirilgan xotira so'rovlarining maksimal miqdori. Avvalgi holatda bo'lgani kabi, sizda 50 ta 2 mib konteyner, beshta 20 mib konteyner yoki bitta 100 mib konteyner bo'lishi mumkin, agar nomlar maydonida so'ralgan xotiraning umumiy hajmi 100 mebibaytdan kam bo'lsa.

Limits.cpu - nomlar maydonidagi barcha konteynerlar foydalanishi mumkin bo'lgan CPU quvvatining maksimal umumiy miqdori. Buni protsessor quvvat so'rovlarining chegarasi deb hisoblashimiz mumkin.

Nihoyat, limits.xotira nomlar maydonidagi barcha konteynerlar foydalanishi mumkin bo'lgan umumiy xotiraning maksimal miqdori. Bu umumiy xotira so'rovlari uchun cheklovdir.
Shunday qilib, sukut bo'yicha, Kubernetes klasteridagi konteynerlar cheksiz hisoblash resurslari bilan ishlaydi. Resurs kvotalari yordamida klaster ma'murlari nomlar maydoniga asoslangan resurslarni iste'mol qilish va manba yaratishni cheklashlari mumkin. Nomlar maydonida pod yoki konteyner nomlar maydoni resurs kvotasi bilan belgilanadigan darajada protsessor quvvati va xotirasini iste'mol qilishi mumkin. Biroq, bitta pod yoki konteyner barcha mavjud resurslarni monopollashtirishi mumkinligi haqida xavotir bor. Bunday vaziyatni oldini olish uchun chegara diapazoni qo'llaniladi - nomlar maydonida resurslarni (podlar yoki konteynerlar uchun) taqsimlashni cheklash siyosati.

Cheklov oralig'i quyidagi cheklovlarni ta'minlaydi:

  • Nomlar maydonidagi har bir modul yoki konteyner uchun hisoblash resurslaridan minimal va maksimal foydalanishni ta'minlash;
  • nomlar maydonidagi har bir PersistentVolumeClaim uchun minimal va maksimal Starage Request saqlash so'rovlarini amalga oshirish;
  • nom maydonidagi resurs uchun so'rov va chegara o'rtasidagi munosabatni ta'minlash;
  • nomlar maydonida hisoblash resurslari uchun standart so'rovlar/cheklovlarni o'rnating va ularni ish vaqtida avtomatik ravishda konteynerlarga kiriting.

Shu tarzda siz nomlar maydonida chegara oralig'ini yaratishingiz mumkin. Butun nom maydoniga tegishli bo'lgan kvotadan farqli o'laroq, Cheklash oralig'i alohida konteynerlar uchun ishlatiladi. Bu foydalanuvchilarning nomlar maydonida juda kichik yoki aksincha, ulkan konteynerlarni yaratishiga to'sqinlik qilishi mumkin. Cheklangan diapazon shunday ko'rinishi mumkin.

Kubernetesning eng yaxshi amaliyotlari. Resurs so'rovlari va cheklovlarini o'rnatish

Oldingi holatda bo'lgani kabi, bu erda ham 4 ta bo'limni ajratish mumkin. Keling, har birini ko'rib chiqaylik.
Standart bo'lim poddagi konteyner uchun standart chegaralarni o'rnatadi. Agar siz ushbu qiymatlarni ekstremal diapazonga o'rnatsangiz, unda bu qiymatlar aniq o'rnatilmagan har qanday konteynerlar standart qiymatlarga amal qiladi.

Standart so'rov bo'limi defaultRequest poddagi konteyner uchun standart so'rovlarni sozlaydi. Shunga qaramay, agar siz ushbu qiymatlarni ekstremal diapazonga o'rnatsangiz, ushbu parametrlarni aniq belgilamagan har qanday konteynerlar ushbu qiymatlarga sukut bo'yicha o'rnatiladi.

Maksimal qism podkastdagi konteyner uchun o'rnatilishi mumkin bo'lgan maksimal chegaralarni belgilaydi. Standart bo'limdagi qiymatlar va konteyner chegaralari ushbu chegaradan yuqori bo'lishi mumkin emas. Shuni ta'kidlash kerakki, agar qiymat maksimal qiymatga o'rnatilgan bo'lsa va standart bo'lim bo'lmasa, maksimal qiymat standart qiymatga aylanadi.

Min bo'limi poddagi konteyner uchun o'rnatilishi mumkin bo'lgan minimal so'rovlarni belgilaydi. Biroq, standart bo'limdagi qiymatlar va konteyner uchun so'rovlar ushbu chegaradan pastga o'rnatilishi mumkin emas.

Yana shuni ta'kidlash kerakki, agar bu qiymat o'rnatilgan bo'lsa, sukut bo'yicha emas, keyin minimal qiymat standart taklifga aylanadi.

Ushbu resurs so'rovlari oxir-oqibat Kubernetes rejalashtiruvchisi tomonidan ish yuklaringizni bajarish uchun ishlatiladi. Konteynerlaringizni to'g'ri sozlashingiz uchun uning qanday ishlashini tushunish juda muhimdir. Aytaylik, siz klasteringizda bir nechta podlarni ishga tushirishni xohlaysiz. Pod spetsifikatsiyalari to'g'ri deb hisoblasak, Kubernetes jadvali ish yukini ishga tushirish uchun tugunni tanlash uchun aylana balanslashdan foydalanadi.

Kubernetesning eng yaxshi amaliyotlari. Resurs so'rovlari va cheklovlarini o'rnatish

Kubernetes 1-tugunda pod konteynerlaridan so'rovlarni bajarish uchun etarli resurslar mavjudligini tekshiradi va agar u bo'lmasa, keyingi tugunga o'tadi. Agar tizimdagi tugunlarning hech biri so'rovlarni qondira olmasa, podalar Kutish holatiga o'tadi. Google Kubernetes dvigatelining tugunlarni avtomatik oʻlchash kabi funksiyalaridan foydalangan holda GKE kutish holatini avtomatik aniqlashi va yana bir nechta qoʻshimcha tugunlarni yaratishi mumkin.

Agar siz tugun sig'imi tugasa, avtomatik o'lchash pulni tejash uchun tugunlar sonini kamaytiradi. Shuning uchun Kubernetes so'rovlar asosida podlarni rejalashtiradi. Biroq, chegara so'rovlardan yuqori bo'lishi mumkin va ba'zi hollarda tugunning resurslari tugashi mumkin. Biz bu davlatni haddan tashqari majburiyat holati deb ataymiz.

Kubernetesning eng yaxshi amaliyotlari. Resurs so'rovlari va cheklovlarini o'rnatish

Aytganimdek, CPU haqida gap ketganda, Kubernetes podlarni cheklashni boshlaydi. Har bir pod so'ragan miqdorda oladi, lekin chegaraga yetmasa, drossellash qo'llanila boshlaydi.

Xotira resurslari haqida gap ketganda, Kubernetes tizim resurslarini bo'shatmaguningizcha yoki butun tizim ishdan chiqmaguningizcha qaysi podlarni o'chirish va qaysi birini saqlash haqida qaror qabul qilishga majbur bo'ladi.

Mashinaning xotirasi tugab qolgan stsenariyni tasavvur qilaylik - Kubernetes buni qanday hal qiladi?

Kubernetes ular so'raganidan ko'ra ko'proq resurslardan foydalanadigan podlarni qidiradi. Shunday qilib, agar sizning konteyneringizda hech qanday so'rov bo'lmasa, bu ular so'raganidan ko'proq narsani ishlatishni sukut saqlaganligini anglatadi, chunki ular umuman hech narsa so'ramagan! Bunday konteynerlar yopilish uchun asosiy nomzodga aylanadi. Keyingi nomzodlar barcha so'rovlarini qondirgan, lekin hali ham maksimal chegaradan past bo'lgan konteynerlardir.

Shunday qilib, agar Kubernetes so'rov parametrlaridan oshib ketgan bir nechta podlarni topsa, u ularni ustuvorlik bo'yicha saralaydi va keyin eng past ustuvor bo'laklarni olib tashlaydi. Agar barcha podalar bir xil ustuvorlikka ega bo'lsa, Kubernetes boshqa podlarga qaraganda o'z so'rovlaridan ko'proq bo'lgan podlarni to'xtatadi.

Juda kamdan-kam hollarda, Kubernetes hali ham so'rovlari doirasida bo'lgan podlarni bekor qilishi mumkin. Bu Kubelet agenti yoki Docker kabi muhim tizim komponentlari ular uchun ajratilganidan ko'proq resurslarni iste'mol qila boshlaganda sodir bo'lishi mumkin.
Shunday qilib, kichik kompaniyalarning dastlabki bosqichlarida Kubernetes klasteri resurs so'rovlari va cheklovlarni o'rnatmasdan yaxshi ishlashi mumkin, ammo sizning jamoalaringiz va loyihalaringiz hajmi o'sishni boshlaganda, siz ushbu sohada muammolarga duch kelishingiz mumkin. Modullar va nomlar bo'shliqlariga so'rovlar va cheklovlar qo'shish juda oz qo'shimcha harakat talab qiladi va ko'p qiyinchiliklarni tejashga yordam beradi.

Kubernetesning eng yaxshi amaliyotlari. To'g'ri o'chirish Tugatish

Ba'zi reklamalar 🙂

Biz bilan qolganingiz uchun tashakkur. Bizning maqolalarimiz sizga yoqdimi? Ko'proq qiziqarli tarkibni ko'rishni xohlaysizmi? Buyurtma berish yoki do'stlaringizga tavsiya qilish orqali bizni qo'llab-quvvatlang, 4.99 dollardan boshlab ishlab chiquvchilar uchun bulutli VPS, Siz uchun biz tomonidan ixtiro qilingan boshlang'ich darajadagi serverlarning noyob analogi: VPS (KVM) E5-2697 v3 (6 yadroli) 10GB DDR4 480GB SSD 1Gbps 19 dollardan yoki serverni qanday almashish haqida butun haqiqat? (RAID1 va RAID10, 24 tagacha yadro va 40 Gb gacha DDR4 bilan mavjud).

Amsterdamdagi Equinix Tier IV ma'lumotlar markazida Dell R730xd 2 baravar arzonmi? Faqat shu yerda 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 televizor 199 dollardan Gollandiyada! Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - 99 dollardan! Haqida o'qing Infratuzilma korporatsiyasini qanday qurish kerak. bir tiyinga 730 evroga teng Dell R5xd E2650-4 v9000 serverlaridan foydalanish bilan sinf?

Manba: www.habr.com

a Izoh qo'shish