Кубернетес дэх автомат масштабын гурван түвшин: Тэдгээрийг хэрхэн үр дүнтэй ашиглах вэ

Кубернетес дэх автомат масштабын гурван түвшин: Тэдгээрийг хэрхэн үр дүнтэй ашиглах вэ
Kubernetes-ийг бүрэн эзэмшихийн тулд та кластерийн нөөцийг масштаблах янз бүрийн аргуудыг мэдэх хэрэгтэй: by систем хөгжүүлэгчдийн үзэж байгаагаар, энэ бол Kubernetes-ийн гол ажлуудын нэг юм. Бид хэвтээ ба босоо автомат масштабын болон кластерын хэмжээг өөрчлөх механизмуудын талаар өндөр түвшний тойм, тэдгээрийг хэрхэн үр дүнтэй ашиглах зөвлөмжийг өгсөн.

Нийтлэл Kubernetes Autoscaling 101: Cluster Autoscaler, Horizontal Autoscaler болон Vertical Pod Autoscaler автомат масштабыг хэрэгжүүлсэн баг орчуулсан Mail.ru сайтаас Kubernetes aaS.

Томруулах талаар бодох нь яагаад чухал вэ?

Kubernetes - нөөцийн удирдлага, зохион байгуулалтад зориулсан хэрэгсэл. Мэдээж хэрэг, хонхорцог байрлуулах, хянах, удирдах зэрэг гайхалтай шинж чанаруудтай танилцах нь сайхан байдаг (под бол хүсэлтийн дагуу эхлүүлсэн сав юм).

Гэсэн хэдий ч та дараахь асуултуудын талаар бодох хэрэгтэй.

  1. Модуль болон програмуудыг хэрхэн масштаблах вэ?
  2. Савыг хэрхэн ажиллагаатай, үр ашигтай байлгах вэ?
  3. Хэрэглэгчээс ирж буй код болон ажлын ачаалал байнга өөрчлөгдөхөд хэрхэн хариу өгөх вэ?

Нөөц болон гүйцэтгэлийг тэнцвэржүүлэхийн тулд Kubernetes кластеруудыг тохируулах нь хэцүү байж болох бөгөөд Kubernetes-ийн дотоод үйл ажиллагааны талаар мэргэжлийн мэдлэг шаарддаг. Таны аппликейшн эсвэл үйлчилгээний ачаалал өдрийн турш эсвэл бүр нэг цагийн турш өөрчлөгдөж болох тул тэнцвэржүүлэх нь байнгын үйл явц гэж үзэх нь дээр.

Kubernetes автомат масштабын түвшин

Автомат масштабыг үр дүнтэй болгохын тулд хоёр түвшний зохицуулалт шаардлагатай:

  1. Хэвтээ (Хэвтээ Pod Autoscaler, HPA) болон босоо автомат масштаблагч (Vertical Pod Autoscaler, VPA) зэрэг Pod түвшин. Энэ нь таны чингэлэгт ашиглах боломжтой нөөцийг өргөжүүлж байна.
  2. Cluster Autoscaler (CA) удирддаг кластерын түвшин бөгөөд энэ нь кластер доторх зангилааны тоог нэмэгдүүлж эсвэл багасгадаг.

Хэвтээ автомат масштаблагч (HPA) модуль

Нэрнээс нь харахад HPA нь pod хуулбаруудын тоог хэмждэг. Ихэнх хөгжүүлэгчид CPU болон санах ойн ачааллыг хуулбарын тоог өөрчлөхөд ашигладаг. Гэсэн хэдий ч, энэ нь систем дээр тулгуурлан масштаблах боломжтой юм захиалгат хэмжүүрүүд, тэд хослолууд эсвэл бүр гадаад хэмжүүр.

Өндөр түвшний HPA үйлдлийн диаграмм:

  1. HPA нь суулгах явцад заасан хэмжигдэхүүнийг 30 секундын өгөгдмөл интервалаар тасралтгүй шалгадаг.
  2. Хэрэв заасан босго хэмжээнд хүрсэн бол HPA нь модулийн тоог нэмэгдүүлэхийг оролддог.
  3. HPA нь байршуулалт/хуулбарлах хянагч доторх хуулбарын тоог шинэчилдэг.
  4. Дараа нь байршуулах/хуулбарлах хянагч нь шаардлагатай нэмэлт модулиудыг байрлуулна.

Кубернетес дэх автомат масштабын гурван түвшин: Тэдгээрийг хэрхэн үр дүнтэй ашиглах вэ
Хэмжих босго хүрэх үед HPA модулийг байршуулах процессыг эхлүүлнэ

HPA ашиглахдаа дараахь зүйлийг анхаарч үзээрэй.

  • Анхдагч HPA шалгах интервал нь 30 секунд байна. Үүнийг туг далбаагаар тогтоодог хэвтээ-под-автомат масштабаар-синк-хугацаа хянагч менежер дээр.
  • Анхдагч харьцангуй алдаа нь 10% байна.
  • Модулийн тоог хамгийн сүүлд нэмэгдүүлсний дараа HPA хэмжүүрүүд гурван минутын дотор тогтворжино гэж найдаж байна. Энэ интервалыг тугаар тохируулна хэвтээ-pod-autoscaler-дээд зэрэглэлийн саатал.
  • Модулийн тоог хамгийн сүүлд бууруулсны дараа HPA тогтворжихын тулд таван минут хүлээдэг. Энэ интервалыг тугаар тохируулна хэвтээ-pod-autoscaler-багасгах саатал.
  • HPA нь хуулбарлах хянагч гэхээсээ илүү байршуулах объектуудтай хамгийн сайн ажилладаг. Хэвтээ автомат масштаб нь хуулбарлах хянагчдыг шууд удирддаг өнхрөх шинэчлэлттэй нийцэхгүй байна. Байршуулах үед хуулбарын тоо нь байршуулах объектуудаас шууд хамаарна.

Будгийн босоо автомат хэмжээс

Босоо автомат масштаблалт (VPA) нь одоо байгаа pods-д илүү их (эсвэл бага) CPU цаг эсвэл санах ойг хуваарилдаг. Төрийн мэдээлэлтэй эсвэл харьяалалгүй pods-д тохиромжтой, гэхдээ голчлон төлөв байдлын үйлчилгээнд зориулагдсан. Гэсэн хэдий ч, хэрэв та анх хуваарилагдсан нөөцийн хэмжээг автоматаар тохируулах шаардлагатай бол харьяалалгүй модулиудад VPA ашиглаж болно.

VPA нь мөн OOM (санах ойгүй) үйл явдалд хариу үйлдэл үзүүлдэг. CPU-ийн цаг болон санах ойг өөрчлөхийн тулд pods-ыг дахин эхлүүлэх шаардлагатай. Дахин эхлүүлэх үед VPA нь хуваарилалтын төсвийг хүндэтгэдэг (pods түгээх төсөв, PDB) шаардлагатай хамгийн бага тооны модулийг баталгаажуулах.

Та модуль бүрийн хамгийн бага ба хамгийн их нөөцийг тохируулж болно. Тиймээс та хуваарилсан санах ойн дээд хэмжээг 8 ГБ хүртэл хязгаарлаж болно. Хэрэв одоогийн зангилаанууд нэг саванд 8 ГБ-аас илүү санах ойг хуваарилж чадахгүй бол энэ нь ашигтай. Нарийвчилсан үзүүлэлтүүд болон үйл ажиллагааны механизмыг доор тайлбарласан болно албан ёсны VPA вики.

Үүнээс гадна VPA нь сонирхолтой зөвлөмж өгөх функцтэй (VPA Recommender). Энэ нь түүхэн хэмжигдэхүүн дээр суурилсан ухаалаг алгоритм дээр суурилсан шинэ санах ой болон CPU-ийн цагийн утгыг санал болгохын тулд бүх модулиудын нөөцийн ашиглалт болон OOM үйл явдлыг хянадаг. Мөн pod бариул авч, санал болгосон нөөцийн утгыг буцаадаг API байдаг.

VPA Recommender нь нөөцийн "хязгаарлалт"-ыг хянадаггүй гэдгийг тэмдэглэх нь зүйтэй. Энэ нь модуль нь зангилаа доторх нөөцийг монополчлоход хүргэж болзошгүй юм. Асар их санах ой эсвэл CPU зарцуулалтаас зайлсхийхийн тулд хязгаарыг нэрийн зайны түвшинд тохируулах нь дээр.

Өндөр түвшний VPA үйлдлийн схем:

  1. VPA нь суулгах явцад заасан хэмжигдэхүүнийг 10 секундын үндсэн интервалаар тасралтгүй шалгадаг.
  2. Хэрэв заасан босго хэмжээнд хүрсэн бол VPA нь хуваарилагдсан нөөцийн хэмжээг өөрчлөхийг оролддог.
  3. VPA нь байршуулалт/хуулбарлах хянагч доторх нөөцийн тоог шинэчилдэг.
  4. Модулиудыг дахин эхлүүлэх үед бүх шинэ нөөцийг үүсгэсэн тохиолдлуудад хэрэглэнэ.

Кубернетес дэх автомат масштабын гурван түвшин: Тэдгээрийг хэрхэн үр дүнтэй ашиглах вэ
VPA нь шаардлагатай хэмжээний нөөцийг нэмдэг

VPA ашиглахдаа дараах зүйлсийг анхаарна уу.

  • Томруулахын тулд pod-ыг заавал дахин эхлүүлэх шаардлагатай. Өөрчлөлт хийсний дараа тогтворгүй ажиллахаас зайлсхийхийн тулд энэ нь зайлшгүй шаардлагатай. Найдвартай байхын тулд модулиудыг дахин эхлүүлж, шинээр хуваарилагдсан нөөц дээр үндэслэн зангилаануудаар тараадаг.
  • VPA болон HPA нь бие биентэйгээ тохирохгүй байгаа бөгөөд нэг pods дээр ажиллах боломжгүй. Хэрэв та хоёр масштабын механизмыг нэг кластерт ашиглаж байгаа бол таны тохиргоо тэдгээрийг нэг объект дээр идэвхжүүлэхээс сэргийлж байгаа эсэхийг шалгаарай.
  • VPA нь зөвхөн өнгөрсөн болон одоогийн хэрэглээнд тулгуурлан нөөцийн хүсэлтийг тохируулдаг. Энэ нь нөөцийн ашиглалтын хязгаарыг тогтоодоггүй. Аппликешнүүд буруу ажиллаж, улам олон нөөцийг авч эхлэхэд асуудал гарч болзошгүй тул Кубернетес энэ подыг унтраахад хүргэнэ.
  • VPA нь хөгжлийн эхний шатандаа байна. Ойрын ирээдүйд системд зарим өөрчлөлт орж болзошгүй гэдэгт бэлэн байгаарай. Та тухай уншиж болно мэдэгдэж байгаа хязгаарлалтууд и хөгжлийн төлөвлөгөө. Тиймээс, VPA болон HPA-ийн хамтарсан ажиллагааг хэрэгжүүлэх, түүнчлэн модулиудыг босоо автоматаар масштаблах бодлогын хамт хэрэгжүүлэхээр төлөвлөж байна (жишээлбэл, тусгай шошго нь "VPA шаарддаг").

Kubernetes кластерыг автоматаар масштаблах

Cluster Autoscaler (CA) нь хүлээгдэж буй хонгилын тоонд тулгуурлан зангилааны тоог өөрчилдөг. Систем нь хүлээгдэж буй модулиудыг үе үе шалгаж, хэрэв илүү их нөөц шаардлагатай бол кластер тогтоосон хязгаараас хэтрээгүй бол кластерийн хэмжээг нэмэгдүүлдэг. CA нь үүлэн үйлчилгээ үзүүлэгчтэй харилцаж, түүнээс нэмэлт зангилаа хүсэлт гаргах эсвэл сул зогсолтыг гаргадаг. CA-ийн анхны нийтлэг хувилбарыг Kubernetes 1.8 дээр танилцуулсан.

SA үйл ажиллагааны өндөр түвшний схем:

  1. CA нь хүлээгдэж буй модулиудыг анхдагч 10 секундын интервалаар шалгадаг.
  2. Хэрэв кластерт хуваарилах хангалттай нөөц байхгүй тул нэг буюу хэд хэдэн pod нь зогсолтын төлөвт байгаа бол энэ нь нэг буюу хэд хэдэн нэмэлт зангилаа хангахыг оролддог.
  3. Үүлний үйлчилгээ үзүүлэгч шаардлагатай зангилааг хуваарилах үед энэ нь кластерт нэгдэж, pods-д үйлчлэхэд бэлэн болно.
  4. Kubernetes төлөвлөгч нь хүлээгдэж буй подсуудыг шинэ зангилаа руу тараадаг. Хэрэв үүний дараа зарим модулиуд хүлээгдэж буй төлөвт хэвээр байвал процесс давтагдаж, кластерт шинэ зангилаа нэмэгдэнэ.

Кубернетес дэх автомат масштабын гурван түвшин: Тэдгээрийг хэрхэн үр дүнтэй ашиглах вэ
Үүлэн дэх кластерийн зангилааг автоматаар хангах

CA ашиглахдаа дараахь зүйлийг анхаарч үзээрэй.

  • CA нь CPU-ийн ачааллаас үл хамааран кластер дахь бүх pods ажиллах зайтай байхыг баталгаажуулдаг. Мөн кластерт шаардлагагүй зангилаа байхгүй байхыг хичээдэг.
  • CA нь масштаблах хэрэгцээг ойролцоогоор 30 секундын дараа бүртгэдэг.
  • Нэгэнт зангилаа шаардлагагүй болсон тохиолдолд CA нь системийг өргөтгөхөөс өмнө 10 минут хүлээхийг өгөгдмөл болгож байна.
  • Автомат масштабын систем нь өргөтгөгч гэсэн ойлголттой байдаг. Эдгээр нь шинэ зангилаа нэмэгдэх зангилааны бүлгийг сонгох өөр өөр стратеги юм.
  • Сонголтыг хариуцлагатай ашигла cluster-autoscaler.kubernetes.io/safe-to-evict (үнэн). Хэрэв та олон тооны хонхорцог суулгасан бол эсвэл тэдгээрийн олонх нь бүх зангилаанууд дээр тархсан бол та кластерыг томруулах чадвараа ихээхэн алдах болно.
  • Ашиглах PodDisruptionBudgetsТаны програмын зарим хэсгийг бүрмөсөн эвдэхэд хүргэж болзошгүй pods-ыг устгахаас урьдчилан сэргийлэх.

Kubernetes-ийн автоscalers нь хоорондоо хэрхэн харилцдаг

Төгс зохицлыг бий болгохын тулд автомат масштабыг pod түвшин (HPA/VPA) болон кластер түвшинд хоёуланд нь ашиглах ёстой. Тэд бие биетэйгээ харьцангуй энгийн харьцдаг:

  1. HPA эсвэл VPA нь одоо байгаа pods-д хуваарилагдсан pod хуулбар эсвэл нөөцийг шинэчилдэг.
  2. Төлөвлөсөн масштабын хувьд хангалттай зангилаа байхгүй бол CA нь хүлээгдэж буй төлөвт хонхорцог байгааг анзаардаг.
  3. CA нь шинэ цэгүүдийг хуваарилдаг.
  4. Модулиудыг шинэ зангилаа руу тараадаг.

Кубернетес дэх автомат масштабын гурван түвшин: Тэдгээрийг хэрхэн үр дүнтэй ашиглах вэ
Хамтарсан Kubernetes-ийн өргөтгөлийн систем

Kubernetes-ийн автомат масштабын нийтлэг алдаа

Автомат масштабыг хэрэгжүүлэх гэж оролдох үед хөгжүүлэгчид тулгардаг хэд хэдэн нийтлэг асуудал байдаг.

HPA болон VPA нь хэмжүүр болон зарим түүхэн өгөгдлөөс хамаардаг. Хэрэв хангалттай нөөц хуваарилагдаагүй бол модулиудыг багасгаж, хэмжүүр үүсгэх боломжгүй болно. Энэ тохиолдолд автомат масштаб хэзээ ч болохгүй.

Масштабтай болгох үйл ажиллагаа нь өөрөө цаг хугацааны мэдрэмжтэй байдаг. Хэрэглэгчид ямар нэгэн асуудал, алдааг анзаарахаас өмнө модулиуд болон кластеруудыг хурдан өргөжүүлэхийг бид хүсч байна. Тиймээс хонхорцог болон кластерыг масштаблах дундаж хугацааг анхаарч үзэх хэрэгтэй.

Хамгийн тохиромжтой хувилбар - 4 минут:

  1. 30 секунд. Зорилтот хэмжигдэхүүнийг шинэчлэх: 30−60 секунд.
  2. 30 секунд. HPA хэмжүүрийн утгыг шалгадаг: 30 секунд.
  3. 2 секундээс бага. Подууд үүсгэгдэж, хүлээх төлөвт орно: 1 секунд.
  4. 2 секундээс бага. CA нь хүлээгдэж буй модулиудыг харж, хангамжийн зангилаа руу дуудлага илгээдэг: 1 секунд.
  5. 3 минут. Үүл үйлчилгээ үзүүлэгч нь зангилаа хуваарилдаг. K8s бэлэн болтол хүлээдэг: 10 минут хүртэл (хэд хэдэн хүчин зүйлээс хамаарч).

Хамгийн муу тохиолдол (илүү бодитой) хувилбар - 12 минут:

  1. 30 секунд. Зорилтот хэмжүүрүүдийг шинэчлэх.
  2. 30 секунд. HPA нь хэмжигдэхүүнийг шалгадаг.
  3. 2 секундээс бага. Дотор нь үүсгэгдэж, зогсолтын төлөвт орно.
  4. 2 секундээс бага. CA нь хүлээгдэж буй модулиудыг харж, зангилааг хангахын тулд дуудлага хийдэг.
  5. 10 минут. Үүл үйлчилгээ үзүүлэгч нь зангилаа хуваарилдаг. K8-ууд бэлэн болтол хүлээдэг. Хүлээх хугацаа нь үйлдвэрлэгчийн саатал, үйлдлийн системийн саатал, дэмжлэгийн хэрэгсэл зэрэг хэд хэдэн хүчин зүйлээс хамаарна.

Үүл үйлчилгээ үзүүлэгчдийн масштабын механизмыг манай CA-тай андуурч болохгүй. Сүүлийнх нь Kubernetes кластер дотор ажилладаг бол үүлэн үйлчилгээ үзүүлэгч хөдөлгүүр нь зангилааны түгээлтийн үндсэн дээр ажилладаг. Энэ нь таны pods эсвэл програмд ​​юу болж байгааг мэдэхгүй байна. Эдгээр системүүд зэрэгцээ ажилладаг.

Kubernetes дахь масштабыг хэрхэн удирдах вэ

  1. Kubernetes бол нөөцийн удирдлага, зохион байгуулалтын хэрэгсэл юм. Под болон кластерийн нөөцийг удирдах үйл ажиллагаа нь Кубернетесийг эзэмших гол үе шат юм.
  2. HPA болон VPA-г харгалзан pod scalability-ийн логикийг ойлгох.
  3. CA-г зөвхөн сав, савныхаа хэрэгцээг сайн ойлгосон тохиолдолд л ашиглах ёстой.
  4. Кластерыг оновчтой тохируулахын тулд янз бүрийн масштабын системүүд хэрхэн хамтран ажилладагийг ойлгох хэрэгтэй.
  5. Хуваарилах хугацааг тооцоолохдоо хамгийн муу болон хамгийн сайн тохиолдлын хувилбаруудыг санаарай.

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх