ProHoster > Blogs > AdministrÄcija > Kubernetes: kÄpÄc ir tik svarÄ«gi konfigurÄt sistÄmas resursu pÄrvaldÄ«bu?
Kubernetes: kÄpÄc ir tik svarÄ«gi konfigurÄt sistÄmas resursu pÄrvaldÄ«bu?
Parasti vienmÄr ir nepiecieÅ”ams nodroÅ”inÄt Ä«paÅ”u resursu kopumu lietojumprogrammai, lai tÄ darbotos pareizi un stabili. Bet ko darÄ«t, ja vairÄkas lietojumprogrammas darbojas ar vienu jaudu? KÄ nodroÅ”inÄt katru no tiem minimÄli nepiecieÅ”amos resursus? KÄ jÅ«s varat ierobežot resursu patÄriÅu? KÄ pareizi sadalÄ«t slodzi starp mezgliem? KÄ nodroÅ”inÄt horizontÄlÄ mÄrogoÅ”anas mehÄnisma darbÄ«bu, ja palielinÄs lietojumprogrammu slodze?
Jums jÄsÄk ar to, kÄdi galvenie resursu veidi pastÄv sistÄmÄ - tas, protams, ir procesora laiks un RAM. K8s manifestos Å”ie resursu veidi tiek mÄrÄ«ti Å”ÄdÄs vienÄ«bÄs:
CPU - kodolos
RAM - baitos
TurklÄt katram resursam ir iespÄjams noteikt divu veidu prasÄ«bas - pieprasÄ«jumi Šø ierobežojumi. PieprasÄ«jumi ā apraksta minimÄlÄs prasÄ«bas mezgla brÄ«vajiem resursiem, lai palaistu konteineru (un apkopi kopumÄ), savukÄrt ierobežojumi nosaka stingru konteineram pieejamo resursu ierobežojumu.
Ir svarÄ«gi saprast, ka manifestÄ nav skaidri jÄdefinÄ abi veidi, taÄu uzvedÄ«ba bÅ«s Å”Äda:
Ja ir skaidri norÄdÄ«ti tikai resursa ierobežojumi, Ŕī resursa pieprasÄ«jumi automÄtiski iegÅ«st vÄrtÄ«bu, kas vienÄda ar ierobežojumiem (to varat pÄrbaudÄ«t, izsaucot apraksta entÄ«tijas). Tie. faktiski konteiners tiks ierobežots lÄ«dz tÄdam paÅ”am resursu daudzumam, kas nepiecieÅ”ams tÄ darbÄ«bai.
Ja resursam ir skaidri norÄdÄ«ti tikai pieprasÄ«jumi, tad Å”im resursam netiek noteikti augÅ”Äjie ierobežojumi - t.i. konteineru ierobežo tikai paÅ”a mezgla resursi.
Ir iespÄjams arÄ« konfigurÄt resursu pÄrvaldÄ«bu ne tikai konkrÄta konteinera lÄ«menÄ«, bet arÄ« nosaukumvietas lÄ«menÄ«, izmantojot Å”Ädas entÄ«tijas:
LimitRange ā apraksta ierobežojumu politiku konteinera/podiÅu lÄ«menÄ« ns un ir nepiecieÅ”ama, lai aprakstÄ«tu noklusÄjuma ierobežojumus konteineram/podiÅam, kÄ arÄ« novÄrstu acÄ«mredzami treknu tvertÅu/podiÅu izveidi (vai otrÄdi), ierobežotu to skaitu un noteikt iespÄjamo robežu un pieprasÄ«jumu vÄrtÄ«bu atŔķirÄ«bu
Resursu kvotas ā vispÄrÄ«gi aprakstiet ierobežojumu politiku visiem ns konteineriem, un to parasti izmanto, lai norobežotu resursus starp vidÄm (noderÄ«ga, ja vide nav stingri norobežota mezgla lÄ«menÄ«)
TÄlÄk ir sniegti manifestu piemÄri, kas nosaka resursu ierobežojumus.
Tie. Å”ajÄ gadÄ«jumÄ, lai palaistu konteineru ar nginx, mezglÄ bÅ«s nepiecieÅ”ams vismaz 1 G brÄ«vas RAM un 0.2 CPU, savukÄrt konteiners var patÄrÄt ne vairÄk kÄ 0.2 CPU un visu mezglÄ pieejamo RAM.
Tie. visu pieprasÄ«jumu konteineru summa noklusÄjuma ns nevar pÄrsniegt 300 m CPU un 1 G operatoram, un visu ierobežojumu summa ir 700 m CPU un 2 G operatoram.
Tie. noklusÄjuma nosaukumvietÄ visiem konteineriem pieprasÄ«jums tiks iestatÄ«ts uz 100 m CPU un 1 G operatoram, ierobežojums ā 1 CPU un 2G. TajÄ paÅ”Ä laikÄ tiek iestatÄ«ts arÄ« ierobežojums iespÄjamÄm vÄrtÄ«bÄm CPU (50m < x < 2) un RAM (500M < x < 4G) pieprasÄ«jumÄ/limitÄ.
Tie. katram podam noklusÄjuma ns bÅ«s 4 vCPU un 1G ierobežojums.
Tagad es vÄlÄtos jums pastÄstÄ«t, kÄdas priekÅ”rocÄ«bas mums var sniegt Å”o ierobežojumu noteikÅ”ana.
Slodzes lÄ«dzsvaroÅ”anas mehÄnisms starp mezgliem
KÄ zinÄms, k8s komponents ir atbildÄ«gs par podiÅu sadali starp mezgliem, piemÄram plÄnotÄjs, kas darbojas pÄc noteikta algoritma. IzvÄloties optimÄlo palaiÅ”anas mezglu, Å”is algoritms iziet divus posmus:
filtrÄÅ”ana
RÄdÄ«Å”ana
Tie. saskaÅÄ ar aprakstÄ«to politiku sÄkotnÄji tiek atlasÄ«ti mezgli, uz kuriem ir iespÄjams palaist podziÅu, pamatojoties uz komplektu predikÄti (tostarp pÄrbaudi, vai mezglam ir pietiekami daudz resursu, lai palaistu podziÅu ā PodFitsResources), un pÄc tam katram no Å”iem mezgliem saskaÅÄ ar prioritÄtes tiek pieŔķirti punkti (tostarp, jo vairÄk mezglam ir brÄ«vu resursu, jo vairÄk punktu tam tiek pieŔķirts - LeastResourceAllocation/LeastRequestedPriority/BalancedResourceAllocation) un pods tiek palaists mezglÄ ar visvairÄk punktu (ja vairÄki mezgli vienlaikus atbilst Å”im nosacÄ«jumam, tad tiek izvÄlÄts nejauÅ”s).
TajÄ paÅ”Ä laikÄ jums ir jÄsaprot, ka plÄnotÄjs, novÄrtÄjot mezgla pieejamos resursus, vadÄs pÄc datiem, kas tiek glabÄti etcd - t.i. par pieprasÄ«tÄ/limita resursa apjomu katrÄ podÄ, kas darbojas Å”ajÄ mezglÄ, bet ne par faktisko resursu patÄriÅu. Å o informÄciju var iegÅ«t no komandas izejas kubectl describe node $NODE, piemÄram:
Å eit redzami visi podi, kas darbojas noteiktÄ mezglÄ, kÄ arÄ« resursi, ko katrs pods pieprasa. LÅ«k, kÄ izskatÄs plÄnotÄja žurnÄli, kad tiek palaists cronjob-cron-events-1573793820-xt6q9 pod (Ŕī informÄcija tiks parÄdÄ«ta plÄnotÄja žurnÄlÄ, kad startÄÅ”anas komandas argumentos -v=10 iestatÄ«siet 10. reÄ£istrÄÅ”anas lÄ«meni):
žurnÄls
I1115 07:57:21.637791 1 scheduling_queue.go:908] About to try and schedule pod nxs-stage/cronjob-cron-events-1573793820-xt6q9
I1115 07:57:21.637804 1 scheduler.go:453] Attempting to schedule pod: nxs-stage/cronjob-cron-events-1573793820-xt6q9
I1115 07:57:21.638285 1 predicates.go:829] Schedule Pod nxs-stage/cronjob-cron-events-1573793820-xt6q9 on Node nxs-k8s-s5 is allowed, Node is running only 16 out of 110 Pods.
I1115 07:57:21.638300 1 predicates.go:829] Schedule Pod nxs-stage/cronjob-cron-events-1573793820-xt6q9 on Node nxs-k8s-s6 is allowed, Node is running only 20 out of 110 Pods.
I1115 07:57:21.638322 1 predicates.go:829] Schedule Pod nxs-stage/cronjob-cron-events-1573793820-xt6q9 on Node nxs-k8s-s3 is allowed, Node is running only 20 out of 110 Pods.
I1115 07:57:21.638322 1 predicates.go:829] Schedule Pod nxs-stage/cronjob-cron-events-1573793820-xt6q9 on Node nxs-k8s-s4 is allowed, Node is running only 17 out of 110 Pods.
I1115 07:57:21.638334 1 predicates.go:829] Schedule Pod nxs-stage/cronjob-cron-events-1573793820-xt6q9 on Node nxs-k8s-s10 is allowed, Node is running only 16 out of 110 Pods.
I1115 07:57:21.638365 1 predicates.go:829] Schedule Pod nxs-stage/cronjob-cron-events-1573793820-xt6q9 on Node nxs-k8s-s12 is allowed, Node is running only 9 out of 110 Pods.
I1115 07:57:21.638334 1 predicates.go:829] Schedule Pod nxs-stage/cronjob-cron-events-1573793820-xt6q9 on Node nxs-k8s-s11 is allowed, Node is running only 11 out of 110 Pods.
I1115 07:57:21.638385 1 predicates.go:829] Schedule Pod nxs-stage/cronjob-cron-events-1573793820-xt6q9 on Node nxs-k8s-s1 is allowed, Node is running only 19 out of 110 Pods.
I1115 07:57:21.638402 1 predicates.go:829] Schedule Pod nxs-stage/cronjob-cron-events-1573793820-xt6q9 on Node nxs-k8s-s2 is allowed, Node is running only 21 out of 110 Pods.
I1115 07:57:21.638383 1 predicates.go:829] Schedule Pod nxs-stage/cronjob-cron-events-1573793820-xt6q9 on Node nxs-k8s-s9 is allowed, Node is running only 16 out of 110 Pods.
I1115 07:57:21.638335 1 predicates.go:829] Schedule Pod nxs-stage/cronjob-cron-events-1573793820-xt6q9 on Node nxs-k8s-s8 is allowed, Node is running only 18 out of 110 Pods.
I1115 07:57:21.638408 1 predicates.go:829] Schedule Pod nxs-stage/cronjob-cron-events-1573793820-xt6q9 on Node nxs-k8s-s13 is allowed, Node is running only 8 out of 110 Pods.
I1115 07:57:21.638478 1 predicates.go:1369] Schedule Pod nxs-stage/cronjob-cron-events-1573793820-xt6q9 on Node nxs-k8s-s10 is allowed, existing pods anti-affinity terms satisfied.
I1115 07:57:21.638505 1 predicates.go:1369] Schedule Pod nxs-stage/cronjob-cron-events-1573793820-xt6q9 on Node nxs-k8s-s8 is allowed, existing pods anti-affinity terms satisfied.
I1115 07:57:21.638577 1 predicates.go:1369] Schedule Pod nxs-stage/cronjob-cron-events-1573793820-xt6q9 on Node nxs-k8s-s9 is allowed, existing pods anti-affinity terms satisfied.
I1115 07:57:21.638583 1 predicates.go:829] Schedule Pod nxs-stage/cronjob-cron-events-1573793820-xt6q9 on Node nxs-k8s-s7 is allowed, Node is running only 25 out of 110 Pods.
I1115 07:57:21.638932 1 resource_allocation.go:78] cronjob-cron-events-1573793820-xt6q9 -> nxs-k8s-s10: BalancedResourceAllocation, capacity 39900 millicores 66620178432 memory bytes, total request 2343 millicores 9640186880 memory bytes, score 9
I1115 07:57:21.638946 1 resource_allocation.go:78] cronjob-cron-events-1573793820-xt6q9 -> nxs-k8s-s10: LeastResourceAllocation, capacity 39900 millicores 66620178432 memory bytes, total request 2343 millicores 9640186880 memory bytes, score 8
I1115 07:57:21.638961 1 resource_allocation.go:78] cronjob-cron-events-1573793820-xt6q9 -> nxs-k8s-s9: BalancedResourceAllocation, capacity 39900 millicores 66620170240 memory bytes, total request 4107 millicores 11307422720 memory bytes, score 9
I1115 07:57:21.638971 1 resource_allocation.go:78] cronjob-cron-events-1573793820-xt6q9 -> nxs-k8s-s8: BalancedResourceAllocation, capacity 39900 millicores 66620178432 memory bytes, total request 5847 millicores 24333637120 memory bytes, score 7
I1115 07:57:21.638975 1 resource_allocation.go:78] cronjob-cron-events-1573793820-xt6q9 -> nxs-k8s-s9: LeastResourceAllocation, capacity 39900 millicores 66620170240 memory bytes, total request 4107 millicores 11307422720 memory bytes, score 8
I1115 07:57:21.638990 1 resource_allocation.go:78] cronjob-cron-events-1573793820-xt6q9 -> nxs-k8s-s8: LeastResourceAllocation, capacity 39900 millicores 66620178432 memory bytes, total request 5847 millicores 24333637120 memory bytes, score 7
I1115 07:57:21.639022 1 generic_scheduler.go:726] cronjob-cron-events-1573793820-xt6q9_nxs-stage -> nxs-k8s-s10: TaintTolerationPriority, Score: (10)
I1115 07:57:21.639030 1 generic_scheduler.go:726] cronjob-cron-events-1573793820-xt6q9_nxs-stage -> nxs-k8s-s8: TaintTolerationPriority, Score: (10)
I1115 07:57:21.639034 1 generic_scheduler.go:726] cronjob-cron-events-1573793820-xt6q9_nxs-stage -> nxs-k8s-s9: TaintTolerationPriority, Score: (10)
I1115 07:57:21.639041 1 generic_scheduler.go:726] cronjob-cron-events-1573793820-xt6q9_nxs-stage -> nxs-k8s-s10: NodeAffinityPriority, Score: (0)
I1115 07:57:21.639053 1 generic_scheduler.go:726] cronjob-cron-events-1573793820-xt6q9_nxs-stage -> nxs-k8s-s8: NodeAffinityPriority, Score: (0)
I1115 07:57:21.639059 1 generic_scheduler.go:726] cronjob-cron-events-1573793820-xt6q9_nxs-stage -> nxs-k8s-s9: NodeAffinityPriority, Score: (0)
I1115 07:57:21.639061 1 interpod_affinity.go:237] cronjob-cron-events-1573793820-xt6q9 -> nxs-k8s-s10: InterPodAffinityPriority, Score: (0)
I1115 07:57:21.639063 1 selector_spreading.go:146] cronjob-cron-events-1573793820-xt6q9 -> nxs-k8s-s10: SelectorSpreadPriority, Score: (10)
I1115 07:57:21.639073 1 interpod_affinity.go:237] cronjob-cron-events-1573793820-xt6q9 -> nxs-k8s-s8: InterPodAffinityPriority, Score: (0)
I1115 07:57:21.639077 1 selector_spreading.go:146] cronjob-cron-events-1573793820-xt6q9 -> nxs-k8s-s8: SelectorSpreadPriority, Score: (10)
I1115 07:57:21.639085 1 interpod_affinity.go:237] cronjob-cron-events-1573793820-xt6q9 -> nxs-k8s-s9: InterPodAffinityPriority, Score: (0)
I1115 07:57:21.639088 1 selector_spreading.go:146] cronjob-cron-events-1573793820-xt6q9 -> nxs-k8s-s9: SelectorSpreadPriority, Score: (10)
I1115 07:57:21.639103 1 generic_scheduler.go:726] cronjob-cron-events-1573793820-xt6q9_nxs-stage -> nxs-k8s-s10: SelectorSpreadPriority, Score: (10)
I1115 07:57:21.639109 1 generic_scheduler.go:726] cronjob-cron-events-1573793820-xt6q9_nxs-stage -> nxs-k8s-s8: SelectorSpreadPriority, Score: (10)
I1115 07:57:21.639114 1 generic_scheduler.go:726] cronjob-cron-events-1573793820-xt6q9_nxs-stage -> nxs-k8s-s9: SelectorSpreadPriority, Score: (10)
I1115 07:57:21.639127 1 generic_scheduler.go:781] Host nxs-k8s-s10 => Score 100037
I1115 07:57:21.639150 1 generic_scheduler.go:781] Host nxs-k8s-s8 => Score 100034
I1115 07:57:21.639154 1 generic_scheduler.go:781] Host nxs-k8s-s9 => Score 100037
I1115 07:57:21.639267 1 scheduler_binder.go:269] AssumePodVolumes for pod "nxs-stage/cronjob-cron-events-1573793820-xt6q9", node "nxs-k8s-s10"
I1115 07:57:21.639286 1 scheduler_binder.go:279] AssumePodVolumes for pod "nxs-stage/cronjob-cron-events-1573793820-xt6q9", node "nxs-k8s-s10": all PVCs bound and nothing to do
I1115 07:57:21.639333 1 factory.go:733] Attempting to bind cronjob-cron-events-1573793820-xt6q9 to nxs-k8s-s10
Å eit mÄs redzam, ka sÄkotnÄji plÄnotÄjs filtrÄ un Ä£enerÄ sarakstu ar 3 mezgliem, kuros to var palaist (nxs-k8s-s8, nxs-k8s-s9, nxs-k8s-s10). PÄc tam tas aprÄÄ·ina punktus, pamatojoties uz vairÄkiem parametriem (tostarp BalancedResourceAllocation, LeastResourceAllocation) katram no Å”iem mezgliem, lai noteiktu vispiemÄrotÄko mezglu. Galu galÄ pods tiek ieplÄnots mezglÄ ar lielÄko punktu skaitu (Å”eit diviem mezgliem vienlaikus ir vienÄds punktu skaits 100037, tÄpÄc tiek izvÄlÄts nejauÅ”s - nxs-k8s-s10).
secinÄjums: ja mezglÄ darbojas podi, kuriem nav noteikti ierobežojumi, tad k8s (no resursu patÄriÅa viedokļa) tas bÅ«s lÄ«dzvÄrtÄ«gi tam, it kÄ uz Ŕī mezgla Å”Ädu podiÅu nebÅ«tu vispÄr. TÄpÄc, ja jums nosacÄ«ti ir pods ar rijÄ«gu procesu (piemÄram, wowza) un tam nav noteikti ierobežojumi, tad var rasties situÄcija, kad Å”is pods faktiski apÄda visus mezgla resursus, bet k8s Å”is mezgls tiek uzskatÄ«ts par nenoslogotu, un tam tiks pieŔķirts vienÄds punktu skaits, klasificÄjot (precÄ«zi punktos, novÄrtÄjot pieejamos resursus) kÄ mezglu, kuram nav strÄdÄjoÅ”u podiÅu, kas galu galÄ var izraisÄ«t nevienmÄrÄ«gu slodzes sadalÄ«jumu starp mezgliem.
Podas izlikŔana
KÄ jÅ«s zinÄt, katram podam ir pieŔķirta viena no 3 QoS klasÄm:
garantÄta ā tiek pieŔķirts, ja katram podÄ esoÅ”ajam konteineram ir norÄdÄ«ts pieprasÄ«jums un ierobežojums atmiÅai un centrÄlajam procesoram, un Ŕīm vÄrtÄ«bÄm ir jÄsakrÄ«t
pÄrsprÄgstoÅ”s ā vismaz vienam konteineram podÄ ir pieprasÄ«jums un ierobežojums ar pieprasÄ«jumu < limits
labÄkÄs pÅ«les ā ja nevienam podam esoÅ”ajam konteineram nav ierobežoti resursi
TajÄ paÅ”Ä laikÄ, kad mezglam trÅ«kst resursu (diska, atmiÅas), kubelet sÄk ranžÄt un izlikt podi saskaÅÄ ar noteiktu algoritmu, kas Åem vÄrÄ pod prioritÄti un tÄ QoS klasi. PiemÄram, ja mÄs runÄjam par RAM, tad, pamatojoties uz QoS klasi, punkti tiek pieŔķirti pÄc Å”Äda principa:
Tie. ar tÄdu paÅ”u prioritÄti, kubelet vispirms izliks no mezgla apvidus ar vislabÄko QoS klasi.
secinÄjums: ja vÄlaties samazinÄt iespÄju, ka vÄlamais pods tiks izlikts no mezgla, ja tam trÅ«kst resursu, tad lÄ«dzÄs prioritÄtei ir jÄparÅ«pÄjas arÄ« par pieprasÄ«juma/limita iestatÄ«Å”anu tam.
Kad uzdevums ir automÄtiski palielinÄt un samazinÄt podiÅu skaitu atkarÄ«bÄ no resursu izmantoÅ”anas (sistÄma - CPU/RAM vai lietotÄjs - rps), tÄda k8s entÄ«tija kÄ HPA (Horizontal Pod Autoscaler). Kuras algoritms ir Å”Äds:
Tiek noteikti novÄrotÄ resursa paÅ”reizÄjie rÄdÄ«jumi (currentMetricValue)
Resursam tiek noteiktas vÄlamÄs vÄrtÄ«bas (desiredMetricValue), kuras sistÄmas resursiem tiek iestatÄ«tas, izmantojot pieprasÄ«jumu
Ir noteikts paÅ”reizÄjais repliku skaits (currentReplicas)
Å Ä« formula aprÄÄ·ina vÄlamo repliku skaitu (vÄlamÄs replikas)
wishReplicas = [ currentReplicas * ( currentMetricValue / wishMetricValue )]
Å ajÄ gadÄ«jumÄ mÄrogoÅ”ana nenotiks, ja koeficients (currentMetricValue / wishMetricValue) ir tuvu 1 (Å”ajÄ gadÄ«jumÄ mÄs paÅ”i varam iestatÄ«t pieļaujamo kļūdu; pÄc noklusÄjuma tÄ ir 0.1).
ApskatÄ«sim, kÄ hpa darbojas, izmantojot lietotÅu testa lietojumprogrammas piemÄru (aprakstÄ«ts kÄ Deployment), kur nepiecieÅ”ams mainÄ«t repliku skaitu atkarÄ«bÄ no CPU patÄriÅa:
Tie. mÄs redzam, ka lietojumprogrammu komplekts sÄkotnÄji tiek palaists divos gadÄ«jumos, no kuriem katrÄ ir divi nginx un nginx-eksportÄtÄja konteineri, kuriem katram ir norÄdÄ«ts pieprasÄ«jumi CPU.
Tie. MÄs izveidojÄm hpa, kas uzraudzÄ«s izvietoÅ”anas lietotnes testu un pielÄgos aplikÄciju skaitu ar lietojumprogrammu, pamatojoties uz CPU indikatoru (mÄs sagaidÄm, ka podam vajadzÄtu patÄrÄt 30% no tÄ pieprasÄ«tÄ CPU), reprodukciju skaitam ir diapazons no 2-10.
Tagad apskatÄ«sim hpa darbÄ«bas mehÄnismu, ja vienam no pavardiem pieliekam slodzi:
# kubectl top pod
NAME CPU(cores) MEMORY(bytes)
app-test-78559f8f44-pgs58 101m 243Mi
app-test-78559f8f44-cj4jz 4m 240Mi
KopumÄ mums ir Å”Ädas lietas:
VÄlamÄ vÄrtÄ«ba (desiredMetricValue) - saskaÅÄ ar hpa iestatÄ«jumiem mums ir 30%
PaÅ”reizÄjÄ vÄrtÄ«ba (currentMetricValue) - aprÄÄ·inam kontrolieris-pÄrzinis aprÄÄ·ina resursu patÄriÅa vidÄjo vÄrtÄ«bu %, t.i. nosacÄ«ti veic Å”Ädas darbÄ«bas:
SaÅem absolÅ«tÄs apvidus metrikas vÄrtÄ«bas no metrikas servera, t.i. 101m un 4m
AprÄÄ·ina vidÄjo absolÅ«to vÄrtÄ«bu, t.i. (101 m + 4 m) / 2 = 53 m
IegÅ«st absolÅ«to vÄrtÄ«bu vÄlamajam resursu patÄriÅam (tam tiek summÄti visu konteineru pieprasÄ«jumi) 60m + 30m = 90m
AprÄÄ·ina vidÄjo CPU patÄriÅa procentuÄlo daļu attiecÄ«bÄ pret pieprasÄ«jumu pod, t.i. 53 m / 90 m * 100% = 59%
Tagad mums ir viss nepiecieÅ”amais, lai noteiktu, vai mums ir jÄmaina kopiju skaits; lai to izdarÄ«tu, mÄs aprÄÄ·inÄm koeficientu:
ratio = 59% / 30% = 1.96
Tie. kopiju skaits jÄpalielina ~2 reizes un jÄsasniedz [2 * 1.96] = 4.
SecinÄjums: KÄ redzat, lai Å”is mehÄnisms darbotos, nepiecieÅ”ams nosacÄ«jums ir pieprasÄ«jumu klÄtbÅ«tne visiem konteineriem novÄrotajÄ podÄ.
Lai neitralizÄtu negatÄ«vo ietekmi uz sistÄmu slodzes pieauguma laikÄ, nepietiek ar konfigurÄtu hpa. PiemÄram, saskaÅÄ ar hpa kontrollera pÄrvaldnieka iestatÄ«jumiem tas nolemj, ka reprodukciju skaits ir jÄpalielina 2 reizes, bet mezgliem nav brÄ«vu resursu, lai palaistu tik daudz podiÅu (t.i., mezgls nevar nodroÅ”inÄt pieprasÄ«tie resursi uz pieprasÄ«jumu aplikumu), un Å”ie aplikumi pÄrslÄdzas uz gaidÄ«Å”anas stÄvokli.
Å ajÄ gadÄ«jumÄ, ja pakalpojumu sniedzÄjam ir atbilstoÅ”s IaaS/PaaS (piemÄram, GKE/GCE, AKS, EKS utt.), rÄ«ks, piemÄram, Node Autoscaler. Tas ļauj iestatÄ«t maksimÄlo un minimÄlo mezglu skaitu klasterÄ« un automÄtiski pielÄgot paÅ”reizÄjo mezglu skaitu (izsaucot mÄkoÅa pakalpojumu sniedzÄja API, lai pasÅ«tÄ«tu/noÅemtu mezglu), ja klasterÄ« un podiÅos trÅ«kst resursu. nevar ieplÄnot (ir gaidÄ«Å”anas stÄvoklÄ«).
SecinÄjums: Lai varÄtu veikt mezglu automÄtisko mÄrogoÅ”anu, ir jÄiestata pieprasÄ«jumi pod konteineros, lai k8s varÄtu pareizi novÄrtÄt mezglu slodzi un attiecÄ«gi ziÅot, ka klasterÄ« nav resursu, lai palaistu nÄkamo pod.
SecinÄjums
JÄÅem vÄrÄ, ka konteinera resursu ierobežojumu iestatÄ«Å”ana nav obligÄta prasÄ«ba, lai lietojumprogramma darbotos veiksmÄ«gi, taÄu labÄk to darÄ«t Å”Ädu iemeslu dÄļ:
PrecÄ«zÄkai plÄnotÄja darbÄ«bai slodzes lÄ«dzsvaroÅ”anas ziÅÄ starp k8s mezgliem
Lai samazinÄtu iespÄjamÄ«bu, ka notiks āpodiÅu izlikÅ”anaā.