Kubernetes ажилчдын зангилаа: олон жижиг эсвэл хэд хэдэн том уу?

Kubernetes ажилчдын зангилаа: олон жижиг эсвэл хэд хэдэн том уу?
Kubernetes кластер үүсгэх үед асуулт гарч ирж магадгүй: хэдэн ажилчны зангилаа, ямар төрлийг тохируулах вэ? Байшингийн кластерт юу илүү дээр вэ: хэд хэдэн хүчирхэг сервер худалдаж авах эсвэл дата төвд хэдэн арван хуучин машин ашиглах уу? Найман нэг цөмт эсвэл хоёр дөрвөн цөмт жишээг үүлэн дээр авах нь дээр үү?

Эдгээр асуултын хариултыг нийтлэлд оруулсан болно. Daniel Weibel, програм хангамжийн инженер, Learnk8s боловсролын төслийн багш тушаалын орчуулгад Mail.ru сайтаас Kubernetes aaS.

Кластерын багтаамж

Ерөнхийдөө Кубернетес кластерыг том "супер зангилаа" гэж ойлгож болно. Түүний нийт тооцоолох хүчин чадал нь түүнийг бүрдүүлэгч бүх зангилааны чадлын нийлбэр юм.

Хүссэн кластерын хүчин чадлын зорилтод хүрэх хэд хэдэн арга бий. Жишээлбэл, багц програмууд нь маш их нөөц шаарддаг тул 8 процессорын цөм, 32 GB RAM багтаамжтай кластер хэрэгтэй. Дараа нь та 16 ГБ санах ойтой хоёр зангилаа эсвэл 8 ГБ санах ойтой дөрвөн зангилаа, хоёр дөрвөн цөмт процессор эсвэл дөрвөн хоёр цөмт процессор суулгаж болно.

Кластер үүсгэх хоёр боломжит арга энд байна:

Kubernetes ажилчдын зангилаа: олон жижиг эсвэл хэд хэдэн том уу?
Хоёр сонголт хоёулаа ижил хүчин чадалтай кластер үүсгэдэг боловч доод тохиргоо нь дөрвөн жижиг зангилаа, дээд тохиргоо нь хоёр том зангилаатай.

Аль сонголт нь дээр вэ?

Энэ асуултад хариулахын тулд хоёр сонголтын давуу талыг харцгаая. Бид тэдгээрийг хүснэгтэд нэгтгэн харуулав.

Хэд хэдэн том зангилаа

Олон жижиг зангилаа

Кластерийн менежментийг илүү хялбар болгох (хэрэв энэ нь газар дээр байгаа бол)

Гөлгөр автомат масштаблалт

Илүү хямд (хэрэв газар дээр байгаа бол)

Үнэ нь арай өөр байна (үүл дээр)

Нөөц их шаарддаг програмуудыг ажиллуулах боломжтой

Бүрэн хуулбар

Нөөцийг илүү үр ашигтай ашигладаг (системийн демонуудын зардал бага
Кластерын алдааны тэсвэр тэвчээр

Бид зөвхөн ажилчдын зангилааны тухай ярьж байгааг анхаарна уу. Үндсэн зангилааны тоо, хэмжээг сонгох нь огт өөр сэдэв юм.

Тиймээс хүснэгтийн цэг бүрийг илүү нарийвчлан авч үзье.

Эхний сонголт: хэд хэдэн том зангилаа

Хамгийн туйлын сонголт бол кластерын багтаамжийн нэг ажилчны зангилаа юм. Дээрх жишээнд энэ нь 16 CPU цөм, 16 ГБ RAM бүхий нэг ажилчны зангилаа байх болно.

Плюсы

Дээрээс нь No 1. Удирдлагыг илүү хялбар болгоно
Бүхэл бүтэн флотыг удирдахаас хэд хэдэн машиныг удирдах нь илүү хялбар байдаг. Шинэчлэлтүүд болон засваруудыг гаргах нь илүү хурдан бөгөөд синхрончлоход хялбар байдаг. Үнэмлэхүй тоогоор бүтэлгүйтлийн тоо бас бага байна.

Дээрх бүх зүйл нь таны техник хангамж, серверт хамаарах бөгөөд үүлэн инстанцуудад хамаарахгүй гэдгийг анхаарна уу.

Үүлэнд байдал өөр байна. Тэнд менежментийг үүлэн үйлчилгээ үзүүлэгч хариуцдаг. Тиймээс үүлэн доторх арван зангилаа удирдах нь нэг зангилаа удирдахаас тийм ч их ялгаатай биш юм.

Траффикийн чиглүүлэлт ба үүлэн доторх pods хоорондын ачааллын хуваарилалт автоматаар гүйцэтгэнэ: Интернэтээс ирж буй траффикийг ачааллын үндсэн тэнцвэржүүлэгч рүү илгээдэг бөгөөд энэ нь урсгалыг аль нэг зангилааны порт руу шилжүүлдэг (NodePort үйлчилгээ нь портыг кластерийн зангилаа бүрт 30000-32767 мужид тохируулдаг). Kube-proxy-ийн тогтоосон дүрмүүд нь зангилаанаас pod руу урсгалыг дахин чиглүүлдэг. Хоёр зангилааны арван хонхорцог нь дараах байдалтай байна.

Kubernetes ажилчдын зангилаа: олон жижиг эсвэл хэд хэдэн том уу?
Pro #2: Нэг зангилаа бүрийн зардал бага
Хүчирхэг машин илүү үнэтэй боловч үнийн өсөлт нь шугаман байх албагүй. Өөрөөр хэлбэл, 10 ГБ санах ойтой арван цөмт сервер нь ижил хэмжээний санах ойтой арван нэг цөмт серверээс ихэвчлэн хямд байдаг.

Гэхдээ энэ дүрэм нь ихэвчлэн үүлэн үйлчилгээнд ажилладаггүй гэдгийг анхаарна уу. Бүх томоохон үүлэн үйлчилгээ үзүүлэгчдийн одоогийн үнийн схемд үнэ хүчин чадлаараа шугаман өсдөг.

Тиймээс, үүлэн дээр та ихэвчлэн илүү хүчирхэг сервер дээр хэмнэж чадахгүй.

Pro #3: Та нөөц их шаарддаг програмуудыг ажиллуулж болно
Зарим програмууд нь кластерт хүчирхэг сервер шаарддаг. Жишээлбэл, хэрэв машин сургалтын системд 8 ГБ санах ой шаардлагатай бол та үүнийг 1 ГБ-ын зангилаанууд дээр ажиллуулах боломжгүй, зөвхөн дор хаяж нэг том ажилчны зангилаатай байх болно.

Минусы

Сул тал No 1. Нэг зангилаанд олон хонхорхой
Хэрэв ижил ажлыг цөөн тооны зангилаанууд дээр гүйцэтгэдэг бол тэдгээр нь тус бүрдээ илүү олон хонхорхойтой байх болно.

Энэ нь асуудал байж болох юм.

Шалтгаан нь модуль бүр нь контейнерын ажиллах хугацаа (жишээ нь Docker), мөн kubelet болон cAdvisor-д зарим нэмэлт ачааллыг нэвтрүүлдэг.

Жишээлбэл, кубелет нь зангилаа дээрх бүх савыг амьд үлдэхийн тулд тогтмол шалгадаг - олон чингэлэг байх тусам кубелет илүү их ажил хийх ёстой.

CAdvisor нь зангилаа дээрх бүх контейнерийн нөөц ашиглалтын статистик мэдээллийг цуглуулдаг бөгөөд kubelet нь энэ мэдээллийг тогтмол асууж, API-ээр дамжуулан өгдөг. Дахин хэлэхэд, илүү олон контейнер нь cAdvisor болон kubelet-ийн аль алинд нь илүү их ажил гэсэн үг юм.

Хэрэв модулиудын тоо нэмэгдвэл энэ нь системийг удаашруулж, найдвартай байдлыг нь алдагдуулж болзошгүй юм.

Kubernetes ажилчдын зангилаа: олон жижиг эсвэл хэд хэдэн том уу?
Kubernetes хадгалах газарт зарим нь гомдолловЭнэ зангилаанууд Бэлэн/Белээгүй төлөв хооронд шилжинэ, учир нь зангилаа дээрх бүх контейнерийг кубелетээр тогтмол шалгахад хэтэрхий удаж байна.
Энэ шалтгааны улмаас Кубернетес зангилаа бүрт 110-аас илүүгүй хонхорцог байрлуулахыг зөвлөж байна. Зангилааны гүйцэтгэлээс хамааран та зангилаа тус бүрд илүү олон pod ажиллуулж болно, гэхдээ асуудал гарах эсвэл бүх зүйл хэвийн ажиллах эсэхийг таамаглахад хэцүү байдаг. Ажлыг урьдчилан турших нь зүйтэй.

Сул тал No 2. Хуулбарлах хязгаарлалт
Хэт цөөн тооны зангилаа нь програмын хуулбарлах үр дүнтэй цар хүрээг хязгаарладаг. Жишээлбэл, хэрэв та таван хуулбартай боловч зөвхөн хоёр зангилаатай өндөр боломжтой програмтай бол програмын үр дүнтэй хуулбарлах зэрэг хоёр болж буурна.

Таван хуулбарыг зөвхөн хоёр зангилаанд тараах боломжтой бөгөөд хэрэв тэдгээрийн аль нэг нь амжилтгүй болвол олон хуулбарыг нэг дор устгана.

Хэрэв танд тав буюу түүнээс дээш зангилаа байгаа бол хуулбар бүр тусдаа зангилаа дээр ажиллах бөгөөд нэг зангилаа бүтэлгүйтвэл хамгийн ихдээ нэг хуулбарыг устгана.

Тиймээс өндөр хүртээмжтэй байх шаардлага нь кластерт хамгийн бага тооны зангилаа шаардагдана.

Сул тал No 3. Бүтэлгүйтлийн үр дагавар илүү муу
Цөөн тооны зангилаатай бол бүтэлгүйтэл бүр нь илүү ноцтой үр дагавартай байдаг. Жишээлбэл, хэрэв танд зөвхөн хоёр зангилаа байгаа бөгөөд тэдгээрийн нэг нь бүтэлгүйтсэн бол таны модулиудын тал нь шууд алга болно.

Мэдээжийн хэрэг, Кубернетес бүтэлгүйтсэн зангилаанаас ажлын ачааллыг бусдад шилжүүлэх болно. Гэхдээ хэрэв тэдгээр нь цөөхөн байвал сул багтаамж хангалтгүй байж магадгүй юм. Үүний үр дүнд таныг бүтэлгүйтсэн зангилаа гарч ирэх хүртэл таны зарим програм ажиллахгүй болно.

Тиймээс, илүү олон зангилаа, тоног төхөөрөмжийн эвдрэлийн нөлөө бага байх болно.

Сул тал №4: Илүү автоматаар масштаблах алхамууд
Kubernetes нь үүлэн дэд бүтцэд зориулсан кластерийн автомат масштабын системтэй бөгөөд энэ нь танд одоогийн хэрэгцээ шаардлагаас хамааран автоматаар зангилаа нэмэх эсвэл устгах боломжийг олгодог. Том зангилаатай бол автоматаар масштаблах нь илүү огцом, бүдүүлэг болдог. Жишээлбэл, хоёр зангилаа дээр нэмэлт зангилаа нэмснээр кластерийн багтаамж 50% -иар нэмэгдэнэ. Мөн та эдгээр нөөцийг шаардлагагүй байсан ч төлөх шаардлагатай болно.

Тиймээс, хэрэв та автомат кластерийн масштабыг ашиглахаар төлөвлөж байгаа бол зангилаа бага байх тусам илүү уян хатан, хэмнэлттэй масштабыг авах болно.

Одоо олон тооны жижиг зангилааны давуу болон сул талуудыг авч үзье.

Хоёр дахь сонголт: олон жижиг зангилаа

Энэ аргын давуу тал нь үндсэндээ хэд хэдэн том зангилаа бүхий эсрэг хувилбарын сул талуудаас үүдэлтэй.

Плюсы

Pro №1: бүтэлгүйтлийн нөлөө бага
Зангилаа их байх тусам зангилаа тус бүр дээр цөөхөн хонхорцог болно. Жишээлбэл, хэрэв та арван зангилаа тутамд зуун модультай бол зангилаа бүр дунджаар арван модультай байх болно.

Ингэснээр аль нэг зангилаа бүтэлгүйтвэл ажлын ачааллын 10%-ийг л алддаг. Зөвхөн цөөн тооны хуулбарт өртөж, ерөнхий програм ажиллах боломжтой байх магадлалтай.

Нэмж дурдахад, үлдсэн зангилаанууд нь амжилтгүй болсон зангилааны ачааллыг зохицуулах хангалттай үнэгүй нөөцтэй байх тул Кубернетес нь хонхорцогуудын хуваарийг чөлөөтэй өөрчлөх боломжтой бөгөөд таны програмууд харьцангуй хурдан ажиллах төлөв рүү буцах болно.

Pro # 2: Сайн хуулбар
Хэрэв хангалттай зангилаа байгаа бол Kubernetes төлөвлөгч нь бүх хуулбарт өөр өөр цэгүүдийг оноож болно. Ингэснээр зангилаа бүтэлгүйтвэл зөвхөн нэг хуулбарт нөлөөлж, програм ашиглах боломжтой хэвээр үлдэнэ.

Минусы

Сул тал No 1. Хянахад хэцүү
Олон тооны зангилаа нь удирдахад илүү хэцүү байдаг. Жишээлбэл, Кубернетес зангилаа бүр бусадтай харилцах ёстой, өөрөөр хэлбэл холболтын тоо квадратаар нэмэгдэж, эдгээр бүх холболтыг хянах шаардлагатай.

Kubernetes Controller Manager дахь зангилаа хянагч нь эрүүл мэндийг шалгахын тулд кластерын бүх зангилаагаар тогтмол алхдаг - илүү олон зангилаа, хянагч дээр илүү их ачаалал өгдөг.

etcd мэдээллийн сангийн ачаалал нэмэгдэж байна - kubelet болон kube-proxy болгон дууддаг ажиглагч for etcd (API-р), үүнд etcd нь объектын шинэчлэлтийг дамжуулах ёстой.

Ерөнхийдөө ажилчны зангилаа бүр үндсэн зангилааны системийн бүрэлдэхүүн хэсгүүдэд нэмэлт ачаалал өгдөг.

Kubernetes ажилчдын зангилаа: олон жижиг эсвэл хэд хэдэн том уу?
Kubernetes нь кластеруудыг албан ёсоор дэмждэг зангилааны тоо 5000 хүртэл. Гэсэн хэдий ч практик дээр аль хэдийн 500 зангилаа байдаг өчүүхэн бус асуудал үүсгэж болно.

Олон тооны ажилчдын зангилаануудыг удирдахын тулд илүү хүчирхэг мастер зангилаа сонгох хэрэгтэй. Жишээлбэл, kube-up автоматаар суулгана ажилчдын зангилааны тооноос хамааран мастер зангилааны зөв VM хэмжээ. Өөрөөр хэлбэл, ажилчдын зангилаа их байх тусам мастер зангилаа илүү бүтээмжтэй байх ёстой.

Эдгээр тодорхой асуудлуудыг шийдвэрлэхийн тулд тусгай боловсруулалтууд байдаг Виртуал Kubelet. Энэхүү систем нь хязгаарлалтыг давж, олон тооны ажилчдын зангилаа бүхий кластеруудыг бий болгох боломжийг олгодог.

Сул тал №2: Илүү их зардал.
Ажилчны зангилаа бүр дээр Кубернетес системийн демонуудын багцыг ажиллуулдаг бөгөөд үүнд контейнер ажиллах хугацаа (Docker гэх мэт), kube-proxy болон kubelet, үүнд cAdvisor орно. Тэд хамтдаа тодорхой хэмжээний нөөцийг хэрэглэдэг.

Хэрэв та олон жижиг зангилаатай бол зангилаа тус бүрт энэ нэмэлт ачааллын эзлэх хувь илүү их байна. Жишээлбэл, нэг зангилаа дээрх бүх системийн демонууд хамтдаа 0,1 CPU цөм, 0,1 ГБ санах ой ашигладаг гэж төсөөлөөд үз дээ. Хэрэв танд 10 ГБ санах ойтой арван цөмт зангилаа байгаа бол демонууд кластерийн багтаамжийн 1% -ийг зарцуулдаг. Нөгөөтэйгүүр, 1 ГБ санах ойтой арван нэг цөмт зангилаа дээр демонууд кластерийн багтаамжийн 10% -ийг авна.

Тиймээс цөөн тооны зангилаа нь дэд бүтцийг илүү үр дүнтэй ашигладаг.

Сул тал No3. Нөөцийг үр ашиггүй ашиглах
Жижиг зангилаанууд дээр үлдсэн нөөцийн хэсгүүд нь ямар нэгэн ажлын ачааллыг хуваарилахад хэтэрхий жижиг байдаг тул ашиглагдаагүй хэвээр байж болно.

Жишээ нь, нэг pod нь 0,75 ГБ санах ой шаарддаг. Хэрэв танд тус бүр нь 1 ГБ санах ойтой арван зангилаа байгаа бол зангилаа бүрд 0,25 ГБ ашиглагдаагүй санах ой үлдээж арван pod ажиллуулж болно.

Энэ нь бүхэл кластерын санах ойн 25% нь дэмий үрэгдэж байна гэсэн үг.

10 ГБ санах ойтой том зангилаа дээр та эдгээр модулиудын 13-ыг ажиллуулж болно - зөвхөн 0,25 ГБ-ын ашиглагдаагүй нэг фрагмент байх болно.

Энэ тохиолдолд санах ойн зөвхөн 2,5% нь дэмий үрэгддэг.

Тиймээс нөөцийг том зангилаанууд дээр илүү оновчтой ашигладаг.

Хэд хэдэн том зангилаа эсвэл олон жижиг зангилаа юу?

Тэгэхээр аль нь илүү дээр вэ: кластерт хэд хэдэн том зангилаа эсвэл олон жижиг зангилаа юу? Ердийнх шиг тодорхой хариулт алга. Хэрэглээний төрлөөс их зүйл шалтгаална.

Жишээлбэл, хэрэв програм 10 ГБ санах ой шаарддаг бол илүү том зангилаанууд нь ойлгомжтой сонголт юм. Хэрэв програм нь өндөр хүртээмжтэй байхын тулд арав дахин хуулбарлах шаардлагатай бол зөвхөн хоёр зангилаа дээр хуулбарыг байрлуулах нь бараг үнэ цэнэтэй зүйл биш юм - кластерт хамгийн багадаа арван зангилаа байх ёстой.

Завсрын нөхцөл байдалд сонголт бүрийн давуу болон сул талуудыг харгалзан сонголтоо хийнэ үү. Магадгүй зарим аргумент таны нөхцөл байдалд бусдаас илүү хамааралтай байж болох юм.

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

Ганц жор байдаггүй бөгөөд нөхцөл байдал бүр өөрийн гэсэн нюанстай байдаг бөгөөд зөвхөн үйлдвэрлэл нь үнэнийг харуулах болно.

Cloud платформын баг бэлтгэсэн орчуулга Mail.ru үүлэн шийдэл.

Kubernetes-ийн талаар дэлгэрэнгүй: 25 Кластерыг удирдах, байрлуулахад хэрэгтэй хэрэгсэл.

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

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