Kubernetesda avtomatik o'lchashning uchta darajasi: ulardan qanday qilib samarali foydalanish

Kubernetesda avtomatik o'lchashning uchta darajasi: ulardan qanday qilib samarali foydalanish
Kubernetes-ni to'liq o'zlashtirish uchun siz klaster resurslarini o'lchashning turli usullarini bilishingiz kerak: by tizim ishlab chiqaruvchilariga ko'ra, bu Kubernetesning asosiy vazifalaridan biridir. Biz gorizontal va vertikal avtomatik masshtablash va klaster o‘lchamlarini o‘zgartirish mexanizmlarining yuqori darajadagi umumiy ko‘rinishini hamda ulardan samarali foydalanish bo‘yicha tavsiyalarni taqdim etdik.

Maqola Kubernetes Autoscaling 101: Cluster Autoscaler, Gorizontal Autoscaler va Vertical Pod Autoscaler avtomatik o'lchovni amalga oshirgan jamoa tomonidan tarjima qilingan Mail.ru dan Kubernetes aaS.

Nima uchun masshtablash haqida o'ylash muhim?

Kubernetes - resurslarni boshqarish va orkestrlash vositasi. Albatta, podlarni joylashtirish, monitoring qilish va boshqarishning ajoyib xususiyatlari bilan shug'ullanish yoqimli (pod - bu so'rovga javoban ishga tushiriladigan konteynerlar guruhi).

Biroq, siz quyidagi savollar haqida ham o'ylashingiz kerak:

  1. Modullar va ilovalarni qanday masshtablash mumkin?
  2. Konteynerlarni qanday qilib samarali va samarali saqlash kerak?
  3. Foydalanuvchilarning kodlari va ish yuklarining doimiy o'zgarishiga qanday javob berish kerak?

Resurslar va unumdorlikni muvozanatlash uchun Kubernetes klasterlarini sozlash qiyin bo'lishi mumkin va Kubernetesning ichki ishi bo'yicha mutaxassis bilimlarini talab qiladi. Sizning ilovangiz yoki xizmatlaringizning ish yuki kun davomida yoki hatto bir soat davomida o'zgarishi mumkin, shuning uchun muvozanatni davom ettirish jarayoni deb hisoblash yaxshiroqdir.

Kubernetes avtomatik o'lchov darajalari

Samarali avtomatik o'lchov ikki daraja o'rtasida muvofiqlashtirishni talab qiladi:

  1. Pod darajasi, jumladan gorizontal (Horizontal Pod Autoscaler, HPA) va vertikal autoscaler (Vertical Pod Autoscaler, VPA). Bu sizning konteynerlaringiz uchun mavjud resurslarni kengaytirmoqda.
  2. Klaster avtomatik shkalasi (CA) tomonidan boshqariladigan klaster darajasi, bu klaster ichidagi tugunlar sonini oshiradi yoki kamaytiradi.

Gorizontal Autoscaler (HPA) moduli

Nomidan ko'rinib turibdiki, HPA pod replikalarining sonini o'lchaydi. Aksariyat ishlab chiqaruvchilar replikalar sonini o'zgartirish uchun trigger sifatida CPU va xotira yukidan foydalanadilar. Shu bilan birga, tizimni miqyosga qarab kengaytirish mumkin moslashtirilgan ko'rsatkichlarularning kombinatsiyalar yoki hatto tashqi ko'rsatkichlar.

Yuqori darajadagi HPA ish diagrammasi:

  1. HPA doimiy ravishda o'rnatish vaqtida ko'rsatilgan metrik qiymatlarni 30 soniyalik standart oraliqda tekshiradi.
  2. Agar belgilangan chegaraga erishilsa, HPA modullar sonini oshirishga harakat qiladi.
  3. HPA tarqatish/replikatsiya boshqaruvchisi ichidagi replikalar sonini yangilaydi.
  4. Tarqatish/replikatsiya boshqaruvchisi har qanday zarur qo'shimcha modullarni o'rnatadi.

Kubernetesda avtomatik o'lchashning uchta darajasi: ulardan qanday qilib samarali foydalanish
HPA metrik chegaraga erishilganda modulni joylashtirish jarayonini boshlaydi

HPA dan foydalanayotganda quyidagilarni e'tiborga oling:

  • Standart HPA tekshirish oralig'i 30 soniya. U bayroq bilan o'rnatiladi gorizontal-pod-autoscaler-sinxronizatsiya davri boshqaruvchi menejerida.
  • Standart nisbiy xatolik 10% ni tashkil qiladi.
  • Modullar sonining oxirgi ko'payishidan so'ng, HPA ko'rsatkichlar uch daqiqa ichida barqarorlashishini kutmoqda. Ushbu interval bayroq bilan o'rnatiladi gorizontal-pod-autoscaler-yuqori-kechikish.
  • Modullar sonining oxirgi qisqarishidan so'ng, HPA barqarorlashishi uchun besh daqiqa kutadi. Ushbu interval bayroq bilan o'rnatiladi gorizontal-pod-autoscaler-pasaytiruvchi-kechikish.
  • HPA replikatsiya kontrollerlari emas, balki joylashtirish ob'ektlari bilan yaxshi ishlaydi. Gorizontal avtomatik masshtablash to'g'ridan-to'g'ri replikatsiya kontrollerlarini boshqaradigan prokat yangilanishi bilan mos kelmaydi. Joylashtirish bilan replikalar soni to'g'ridan-to'g'ri joylashtirish ob'ektlariga bog'liq.

Podkalarni vertikal avtomatik masshtablash

Vertikal avtomatik masshtablash (VPA) mavjud podslarga ko'proq (yoki kamroq) CPU vaqtini yoki xotirasini ajratadi. Davlat maʼlumotlari yoki fuqaroligi boʻlmagan podkastlar uchun mos, lekin asosan davlat xizmatlari uchun moʻljallangan. Biroq, agar siz dastlab ajratilgan resurslar miqdorini avtomatik ravishda sozlashingiz kerak bo'lsa, fuqaroligi bo'lmagan modullar uchun VPA dan ham foydalanishingiz mumkin.

VPA shuningdek, OOM (xotiradan tashqari) hodisalariga javob beradi. CPU vaqtini va xotirasini o'zgartirish podkastlarni qayta ishga tushirishni talab qiladi. Qayta ishga tushirilganda, VPA ajratish byudjetini hurmat qiladi (pods tarqatish byudjeti, PDB) modullarning minimal talab qilinadigan sonini kafolatlash.

Har bir modul uchun minimal va maksimal resurslarni belgilashingiz mumkin. Shunday qilib, siz ajratilgan xotiraning maksimal hajmini 8 GB gacha cheklashingiz mumkin. Agar joriy tugunlar har bir konteyner uchun 8 Gb dan ortiq xotira ajrata olmasa, bu foydalidir. Batafsil spetsifikatsiyalar va ishlash mexanizmi maqolada tasvirlangan rasmiy VPA wiki.

Bundan tashqari, VPA qiziqarli tavsiya funksiyasiga ega (VPA Recommender). Tarixiy o'lchovlarga asoslangan aqlli algoritmga asoslangan yangi xotira va CPU vaqt qiymatlarini taklif qilish uchun barcha modullarning resurslardan foydalanish va OOM hodisalarini kuzatib boradi. Shuningdek, pod tutqichini oladigan va tavsiya etilgan manba qiymatlarini qaytaradigan API ham mavjud.

Shuni ta'kidlash kerakki, VPA Recommender resurs "chegarasini" kuzatmaydi. Bu modul tugunlar ichidagi resurslarni monopollashtirishiga olib kelishi mumkin. Katta xotira yoki protsessor sarfini oldini olish uchun cheklovni nomlar maydoni darajasida o'rnatish yaxshiroqdir.

Yuqori darajadagi VPA ishlash sxemasi:

  1. VPA doimiy ravishda o'rnatish paytida ko'rsatilgan metrik qiymatlarni standart 10 soniya oralig'ida tekshiradi.
  2. Belgilangan chegaraga erishilsa, VPA ajratilgan resurslar miqdorini o'zgartirishga harakat qiladi.
  3. VPA joylashtirish/replikatsiya tekshiruvi ichidagi resurslar sonini yangilaydi.
  4. Modullar qayta ishga tushirilganda, barcha yangi resurslar yaratilgan misollarga qo'llaniladi.

Kubernetesda avtomatik o'lchashning uchta darajasi: ulardan qanday qilib samarali foydalanish
VPA kerakli miqdordagi resurslarni qo'shadi

VPA dan foydalanganda quyidagi fikrlarni yodda tuting:

  • Masshtabni o'zgartirish uchun podkastni majburiy qayta ishga tushirish kerak. Bu o'zgarishlardan keyin beqaror ishlashning oldini olish uchun kerak. Ishonchliligi uchun modullar qayta ishga tushiriladi va yangi ajratilgan resurslar asosida tugunlar bo'ylab taqsimlanadi.
  • VPA va HPA hali bir-biriga mos kelmaydi va bir xil podkastlarda ishlay olmaydi. Agar siz ikkala masshtablash mexanizmini bir xil klasterda ishlatayotgan bo'lsangiz, sozlamalaringiz ularni bir xil ob'ektlarda faollashishiga yo'l qo'ymasligiga ishonch hosil qiling.
  • VPA resurslar uchun konteyner so'rovlarini faqat o'tmish va joriy foydalanish asosida sozlaydi. U resurslardan foydalanish chegaralarini belgilamaydi. Ilovalar to'g'ri ishlamasligi va tobora ko'proq resurslarni egallashi bilan bog'liq muammolar bo'lishi mumkin, bu Kubernetesning ushbu podkastni o'chirib qo'yishiga olib keladi.
  • VPA hali rivojlanishning dastlabki bosqichida. Tizim yaqin kelajakda ba'zi o'zgarishlarga duch kelishi mumkinligiga tayyor bo'ling. haqida o'qishingiz mumkin ma'lum cheklovlar и rivojlanish rejalari. Shunday qilib, VPA va HPA ning birgalikdagi ishlashini amalga oshirish, shuningdek, modullarni vertikal avtomatik o'lchov siyosati bilan bir qatorda joylashtirish rejalashtirilgan (masalan, "VPA talab qiladi" maxsus yorlig'i).

Kubernetes klasterini avtomatik masshtablash

Cluster Autoscaler (CA) kutish podkastlari soniga qarab tugunlar sonini o'zgartiradi. Tizim vaqti-vaqti bilan kutilayotgan modullarni tekshiradi - va agar ko'proq resurslar kerak bo'lsa va klaster belgilangan chegaralardan oshmasa, klaster hajmini oshiradi. CA bulutli xizmat ko'rsatuvchi provayder bilan bog'lanadi, undan qo'shimcha tugunlarni so'raydi yoki bo'sh qolganlarini chiqaradi. CA ning birinchi umumiy versiyasi Kubernetes 1.8 da taqdim etilgan.

SA operatsiyasining yuqori darajadagi sxemasi:

  1. CA kutilayotgan modullarni sukut bo'yicha 10 soniya oralig'ida tekshiradi.
  2. Agar bir yoki bir nechta podkastlar kutish holatida bo'lsa, chunki klaster ularni ajratish uchun etarli resurslarga ega emas, u bir yoki bir nechta qo'shimcha tugunlarni ta'minlashga harakat qiladi.
  3. Bulutli xizmat ko'rsatuvchi provayder kerakli tugunni ajratganda, u klasterga qo'shiladi va podkastlarga xizmat ko'rsatishga tayyor bo'ladi.
  4. Kubernetes rejalashtiruvchisi kutilayotgan podlarni yangi tugunga tarqatadi. Agar bundan keyin ham ba'zi modullar kutish holatida qolsa, jarayon takrorlanadi va klasterga yangi tugunlar qo'shiladi.

Kubernetesda avtomatik o'lchashning uchta darajasi: ulardan qanday qilib samarali foydalanish
Bulutdagi klaster tugunlarini avtomatik ta'minlash

CA dan foydalanganda quyidagilarni e'tiborga oling:

  • CA protsessor yuklanishidan qat'iy nazar, klasterdagi barcha podslarda ishlash uchun joy borligini ta'minlaydi. Shuningdek, u klasterda keraksiz tugunlar yo'qligini ta'minlashga harakat qiladi.
  • CA taxminan 30 soniyadan keyin masshtablash zaruratini qayd etadi.
  • Tugunga ehtiyoj qolmasa, CA tizimni kengaytirishdan oldin 10 daqiqa kutishni belgilaydi.
  • Avtomatik o'lchov tizimi kengaytiruvchilar tushunchasiga ega. Bular yangi tugunlar qo'shiladigan tugunlar guruhini tanlashning turli strategiyalari.
  • Variantdan mas'uliyat bilan foydalaning cluster-autoscaler.kubernetes.io/safe-to-evict (to'g'ri). Agar siz ko'p podkastlarni o'rnatsangiz yoki ularning ko'plari barcha tugunlar bo'ylab tarqalib ketgan bo'lsa, siz klasterni kengaytirish qobiliyatini sezilarli darajada yo'qotasiz.
  • Foydalanish PodDisruptionBudgetsilovangizning baʼzi qismlari toʻliq ishdan chiqishiga olib kelishi mumkin boʻlgan podslarni oʻchirib tashlashning oldini olish uchun.

Kubernetes avtoskalyatorlari bir-biri bilan qanday o'zaro ta'sir qiladi

Mukammal uyg'unlik uchun avtomatik o'lchov pod darajasida (HPA/VPA) va klaster darajasida qo'llanilishi kerak. Ular bir-biri bilan nisbatan sodda munosabatda bo'lishadi:

  1. HPA yoki VPA pod replikalarini yoki mavjud podlarga ajratilgan resurslarni yangilaydi.
  2. Agar rejalashtirilgan masshtablash uchun tugunlar etarli bo'lmasa, CA kutish holatida podalar mavjudligini sezadi.
  3. CA yangi tugunlarni ajratadi.
  4. Modullar yangi tugunlarga taqsimlanadi.

Kubernetesda avtomatik o'lchashning uchta darajasi: ulardan qanday qilib samarali foydalanish
Birgalikda Kubernetes miqyosini kengaytirish tizimi

Kubernetes avtomatik o'lchovidagi keng tarqalgan xatolar

Avtomatik o'lchovni amalga oshirishga urinayotganda ishlab chiqaruvchilar duch keladigan bir nechta umumiy muammolar mavjud.

HPA va VPA ko'rsatkichlarga va ba'zi tarixiy ma'lumotlarga bog'liq. Agar resurslar yetarli bo'lmasa, modullar minimallashtiriladi va ko'rsatkichlarni ishlab chiqa olmaydi. Bunday holda, avtomatik o'lchov hech qachon sodir bo'lmaydi.

Masshtablash operatsiyasining o'zi vaqtga sezgir. Biz modullar va klasterning tez o'lchamlarini istaymiz - foydalanuvchilar muammolar yoki nosozliklarni sezmasdan oldin. Shuning uchun podalar va klaster uchun o'rtacha miqyoslash vaqtini hisobga olish kerak.

Ideal stsenariy - 4 daqiqa:

  1. 30 soniya. Maqsad ko'rsatkichlarini yangilash: 30−60 soniya.
  2. 30 soniya. HPA metrik qiymatlarni tekshiradi: 30 soniya.
  3. 2 soniyadan kam. Podlar yaratiladi va kutish holatiga o'tadi: 1 soniya.
  4. 2 soniyadan kam. CA kutish modullarini ko'radi va ta'minot tugunlariga qo'ng'iroqlarni yuboradi: 1 soniya.
  5. 3 daqiqa. Bulutli provayder tugunlarni ajratadi. K8s tayyor bo'lguncha kutadi: 10 daqiqagacha (bir nechta omillarga bog'liq).

Eng yomon holat (haqiqiyroq) stsenariy - 12 daqiqa:

  1. 30 soniya. Maqsad ko'rsatkichlarini yangilang.
  2. 30 soniya. HPA metrik qiymatlarni tekshiradi.
  3. 2 soniyadan kam. Podkalar yaratiladi va kutish holatiga kiradi.
  4. 2 soniyadan kam. CA kutish modullarini ko'radi va tugunlarni ta'minlash uchun qo'ng'iroqlarni amalga oshiradi.
  5. 10 daqiqa. Bulutli provayder tugunlarni ajratadi. K8s tayyor bo'lguncha kutadi. Kutish vaqti sotuvchining kechikishi, OS kechikishi va qo'llab-quvvatlash vositalari kabi bir qancha omillarga bog'liq.

Bulutli provayderlarning masshtablash mexanizmlarini bizning CA bilan aralashtirib yubormang. Ikkinchisi Kubernetes klasterida ishlaydi, bulutli provayder dvigateli esa tugunni tarqatish asosida ishlaydi. U sizning podlar yoki ilovangiz bilan nima sodir bo'layotganini bilmaydi. Ushbu tizimlar parallel ravishda ishlaydi.

Kubernetes-da masshtabni qanday boshqarish kerak

  1. Kubernetes - bu resurslarni boshqarish va orkestratsiya vositasi. Pod va klaster resurslarini boshqarish bo'yicha operatsiyalar Kubernetes-ni o'zlashtirishda muhim bosqichdir.
  2. HPA va VPA ni hisobga olgan holda pod miqyosidagi mantiqni tushuning.
  3. CA dan faqat podalar va idishlaringizning ehtiyojlarini yaxshi tushunsangiz ishlatilishi kerak.
  4. Klasterni optimal tarzda sozlash uchun siz turli masshtablash tizimlari birgalikda qanday ishlashini tushunishingiz kerak.
  5. Masshtablash vaqtini hisoblashda eng yomon va eng yaxshi stsenariylarni yodda tuting.

Manba: www.habr.com

a Izoh qo'shish