соҳа resources.requested аз мушаххасоти Pod яке аз унсурҳои аст, ки барои пайдо кардани гиреҳ дилхоҳ истифода бурда мешавад. Шумо аллакай метавонед ҷойгиркунии Pod-ро барои он ба нақша гиред. Чӣ тавр шумо гиреҳи мувофиқро пайдо мекунед?
Kubernetes аз якчанд ҷузъҳо иборат аст, аз ҷумла гиреҳи асосӣ ё гиреҳи асосӣ (Ҳавопаймои назорати Kubernetes). Гиреҳи усто дорои якчанд равандҳо мебошад: kube-apiserver, kube-controller-meneger ва kube-scheduler.
Раванди банақшагирии kube барои баррасии паҳлӯҳои навтаъсис ва дарёфти гиреҳҳои эҳтимолии коргарӣ, ки ба ҳама дархостҳои подкӯҳӣ, аз ҷумла шумораи захираҳои дархостшуда мувофиқат мекунанд, масъул аст. Рӯйхати гиреҳҳое, ки аз ҷониби kube-scheduler пайдо шудаанд, гурӯҳбандӣ карда мешаванд. Под дар гиреҳ бо холҳои баландтарин ба нақша гирифта шудааст.
Поди арғувон дар куҷо гузошта мешавад?
Дар расм шумо мебинед, ки ҷадвали kube бояд як Pod нави арғувонро ба нақша гирад. Кластери Kubernetes дорои ду гиреҳ аст: A ва B. Тавре ки шумо мебинед, kube-нақшасоз наметавонад як Pod-ро дар гиреҳи A ба нақша гирад - захираҳои дастрас (бе дархост) ба дархостҳои Pod арғувон мувофиқат намекунанд. Ҳамин тавр, хотираи 1 ГБ, ки аз ҷониби Pod арғувон дархост шудааст, ба гиреҳи А мувофиқат намекунад, зеро хотираи дастрас 0,5 ГБ аст. Аммо гиреҳи В захираҳои кофӣ дорад. Дар натиҷа, ҷадвали кубе қарор мекунад, ки макони таъиноти Pod арғувон гиреҳи B мебошад.
Акнун мо медонем, ки захираҳои дархостшуда ба интихоби гиреҳ барои идора кардани Pod чӣ гуна таъсир мерасонанд. Аммо таъсири захираҳои ниҳоӣ чӣ гуна аст?
Маҳдудияти захираҳо сарҳадест, ки CPU/MEM убур карда наметавонад. Аммо, манбаи CPU чандир аст, аз ин рӯ контейнерҳое, ки ба ҳудуди CPU-и худ мерасанд, боиси баромадани Pod нахоҳанд шуд. Ба ҷои ин, танзими CPU оғоз мешавад. Агар ба маҳдудияти истифодаи MEM расида бошад, контейнер бо сабаби OOM-Killer қатъ карда мешавад ва агар аз ҷониби танзимоти RestartPolicy иҷозат дода шавад, аз нав оғоз карда мешавад.
Захираҳои дархостшуда ва ҳадди аксар ба таври муфассал
Муоширати захиравӣ байни Docker ва Kubernetes
Роҳи беҳтарини фаҳмонидани он, ки чӣ гуна дархостҳои захираҳо ва маҳдудиятҳои захираҳо кор мекунанд, ин ҷорӣ кардани муносибат байни Kubernetes ва Docker мебошад. Дар тасвири боло шумо мебинед, ки чӣ гуна майдонҳои Kubernetes ва парчамҳои оғозёбии Docker алоқаманданд.
Чӣ мешавад, агар шумо барои дархост хотираи нокифоя таъин кунед?
Агар контейнер ба ҳудуди хотираи дархостшуда расида бошад, пас Pod дар як гурӯҳи Подҳо ҷойгир карда мешавад, ки ҳангоми набудани хотира дар гиреҳ қатъ мешаванд.
Чӣ мешавад, агар шумо маҳдудияти хотираро хеле паст таъин кунед?
Агар контейнер аз маҳдудияти хотира зиёд бошад, он бо сабаби OOM-Killed қатъ карда мешавад. Ва агар имконпазир бошад, дар асоси RestartPolicy, ки арзиши пешфарз аст, аз нав оғоз мешавад Always.
Агар шумо хотираи дархостшударо муайян накунед, чӣ мешавад?
Дархости ядрои пурра (таносуб = 1024) маънои онро надорад, ки контейнери шумо онро қабул мекунад. Агар мошини мизбони шумо танҳо як ядро дошта бошад ва шумо зиёда аз як контейнерро кор карда истода бошед, пас ҳама контейнерҳо бояд CPU-и дастрасро байни онҳо мубодила кунанд. Ин чӣ гуна рӯй медиҳад? Биёед ба расм нигоҳ кунем.
Дархости CPU - Системаи ягонаи аслӣ
Биёед тасаввур кунем, ки шумо як системаи ягонаи ҳост доред, ки контейнерҳоро идора мекунад. Модар (Кубернетес) пирог (CPU) пухта ва мехоҳад онро байни кӯдакон (контейнерҳо) тақсим кунад. Се кӯдак пироги пурра (таносуб = 1024), кӯдаки дигар ним пирог (512) мехоҳанд. Модар мехоҳад, ки одилона бошад ва ҳисобҳои оддӣ кунад.
# Сколько пирогов хотят дети?
# 3 ребенка хотят по целому пирогу и еще один хочет половину пирога
cakesNumberKidsWant = (3 * 1) + (1 * 0.5) = 3.5
# Выражение получается так:
3 (ребенка/контейнера) * 1 (целый пирог/полное ядро) + 1 (ребенок/контейнер) * 0.5 (половина пирога/половина ядра)
# Сколько пирогов испечено?
availableCakesNumber = 1
# Сколько пирога (максимально) дети реально могут получить?
newMaxRequest = 1 / 3.5 =~ 28%
Аз руи хисобу китоб се кудак 28 фоизи махинро мегиранд, на тамоми ядро. Кӯдаки чорум 14% ядрои пурра мегирад, на нисфи. Аммо, агар шумо системаи бисёрсоҳавӣ дошта бошед, корҳо фарқ мекунанд.
Дархост CPU - Мулти-аслӣ (4) Системаи
Дар тасвири боло шумо мебинед, ки се кӯдак як пирожни пурра мехоҳанд ва як нафар нисфи онро мехоҳад. Азбаски модар чор пирожни пухтааст, ҳар як фарзандаш ҳар қадар, ки хоҳанд, мегиранд. Дар системаи бисёраслӣ, захираҳои протсессор дар тамоми ядроҳои протсессори мавҷуда тақсим карда мешаванд. Агар контейнер бо камтар аз як ядрои мукаммали CPU маҳдуд бошад, он метавонад онро то 100% истифода барад.
Ҳисобҳои дар боло овардашуда барои фаҳмидани он, ки CPU дар байни контейнерҳо чӣ гуна тақсим карда мешавад, содда карда шудаанд. Албатта, ба ғайр аз худи контейнерҳо, равандҳои дигаре мавҷуданд, ки захираҳои CPU-ро низ истифода мебаранд. Вақте ки равандҳо дар як контейнер бекоранд, дигарон метавонанд захираи онро истифода баранд. CPU: "200m" мувофиқат мекунад CPU: 0,2, ки тақрибан 20% як ядроро дорад.
Дар хотир доред: агар шумо аз CPU зиёдтар аз гиреҳҳо талаб кунед, Pod ба нақша гирифта намешавад. Requests.cpu - на арзиши ҳадди ақал, балки арзиши кофӣ барои оғоз кардани Pod ва бе нокомӣ кор кардан. Агар барнома ҳисобҳои мураккабро иҷро накунад, беҳтарин вариант насб кардан аст request.cpu <= 1 ва ба қадри зарурӣ нусхаҳои зиёдеро оғоз кунед.