Kubernetes: waa maxay sababta ay muhiim u tahay in la habeeyo nidaamka maareynta kheyraadka?

Sida caadiga ah, waxaa had iyo jeer loo baahan yahay in la siiyo barkad kheyraad ah oo loogu talagalay codsiga hawlgalkiisa saxda ah ee xasilloon. Laakiin maxaa dhacaya haddii dhowr codsi ay ku shaqeeyaan awood isku mid ah? Sidee loo siiyaa mid kasta oo iyaga ka mid ah ilaha ugu yar ee lagama maarmaanka ah? Sideed u xaddidi kartaa isticmaalka kheyraadka? Sidee si sax ah loogu qaybiyaa culeyska u dhexeeya noodaha? Sidee loo hubin karaa in habka cabbirka toosan uu shaqeeyo haddii culeyska codsigu kordho?

Kubernetes: waa maxay sababta ay muhiim u tahay in la habeeyo nidaamka maareynta kheyraadka?

Waxaad u baahan tahay inaad ku bilowdo noocyada ugu muhiimsan ee kheyraadka ka jira nidaamka - tani, dabcan, waa waqtiga processor-ka iyo RAM. K8-yada waxa ka muuqda noocyadan kheyraadka waxa lagu cabbiraa cutubyada soo socda:

  • CPU - in xudunta
  • RAM - in bytes

Intaa waxaa dheer, kheyraad kasta waxaa suurtagal ah in la dejiyo laba nooc oo shuruudo ah - Codsiyada ΠΈ xadka. Codsiyada - waxay qeexaysaa shuruudaha ugu yar ee ilaha lacag la'aanta ah ee noodhka si loo socodsiiyo weelka (iyo pod guud ahaan), iyada oo xaddidaaddu ay dejinayso xaddid adag ilaha la heli karo weelka.

Waxaa muhiim ah in la fahmo in muujintu aysan ahayn inay si cad u qeexdo labada nooc, laakiin habdhaqanku wuxuu noqon doonaa sidan soo socota:

  • Haddii kaliya xuduudka kheyraadka si cad loo cayimay, markaas codsiyada kheyraadkan waxay si toos ah u qaadanayaan qiime u dhigma xadka (waxaad taas ku xaqiijin kartaa adigoo wacaya hay'adaha sharraxa). Kuwaas. dhab ahaantii, weelku wuxuu ku koobnaan doonaa isla qaddarka kheyraadka uu u baahan yahay inuu ku shaqeeyo.
  • Haddii codsiyada kaliya si cad loo cayimay kheyraadka, markaa wax xaddidaad ah laguma dejin kheyraadkan - i.e. weelka waxaa xaddidaya oo kaliya ilaha qanjidhka laftiisa.

Waxa kale oo suurtogal ah in lagu habeeyo maareynta kheyraadka ma aha oo kaliya heerka weel gaar ah, laakiin sidoo kale heerka magaca magaca iyadoo la adeegsanayo hay'adaha soo socda:

  • Xadid Range - wuxuu qeexayaa siyaasadda xaddidaadda ee heerka weelka / boodhka ee ns waxaana loo baahan yahay si loo qeexo xannibaadaha caadiga ah ee weelka / boodhka, iyo sidoo kale ka hortagga abuurista weelal baruur ah oo cad (ama lid ku ah), xaddid tiradooda oo go'aamiyo kala duwanaanshaha suurtogalka ah ee qiyamka xuduudaha iyo codsiyada
  • KheyraadkaKootas - qeex siyaasadda xaddidaadda guud ahaan dhammaan weelasha ku jira ns waxaana loo isticmaalaa, sida caadiga ah, si loo xaddido kheyraadka deegaanka (waxtar leh marka deegaanku aan si adag loo xadayn heerka noode)

Kuwan soo socdaa waa tusaalayaal muujineyaal dejiya xadka kheyraadka:

  • Heerka weelka gaarka ah:

    containers:
    - name: app-nginx
      image: nginx
      resources:
        requests:
          memory: 1Gi
        limits:
          cpu: 200m

    Kuwaas. Xaaladdan oo kale, si aad u socodsiiso weel leh nginx, waxaad u baahan doontaa ugu yaraan 1G oo RAM ah oo bilaash ah iyo 0.2 CPU xagga noodhka, halka ugu badnaan weelku uu cuni karo 0.2 CPU iyo dhammaan RAM la heli karo ee noode.

  • Marka la eego heerka isugeynta ns:

    apiVersion: v1
    kind: ResourceQuota
    metadata:
      name: nxs-test
    spec:
      hard:
        requests.cpu: 300m
        requests.memory: 1Gi
        limits.cpu: 700m
        limits.memory: 2Gi

    Kuwaas. Wadarta dhammaan weelasha codsiyada ee ku jira default ns kama badnaan karaan 300m CPU iyo 1G ee OP, wadarta dhammaan xadka waa 700m CPU iyo 2G ee OP.

  • Xadka caadiga ah ee weelasha ns:

    apiVersion: v1
    kind: LimitRange
    metadata:
      name: nxs-limit-per-container
    spec:
     limits:
       - type: Container
         defaultRequest:
           cpu: 100m
           memory: 1Gi
         default:
           cpu: 1
           memory: 2Gi
         min:
           cpu: 50m
           memory: 500Mi
         max:
           cpu: 2
           memory: 4Gi

    Kuwaas. Meesha magaca caadiga ah ee dhammaan weelasha, codsiga waxaa loo dejin doonaa 100m CPU iyo 1G ee OP, xadka - 1 CPU iyo 2G. Isla mar ahaantaana, xadka ayaa sidoo kale lagu dejiyay qiyamka suurtagalka ah ee codsiga/ xaddidnaanta CPU (50m <x <2) iyo RAM (500M <x <4G).

  • Xayiraadaha heerka-korka ns:

    apiVersion: v1
    kind: LimitRange
    metadata:
     name: nxs-limit-pod
    spec:
     limits:
     - type: Pod
       max:
         cpu: 4
         memory: 1Gi

    Kuwaas. Bood kasta oo ku jirta default ns waxaa jiri doona xad ah 4 vCPU iyo 1G.

Hadda waxaan jeclaan lahaa inaan kuu sheego faa'iidooyinka dejinta xannibaadahan ayaa na siin kara.

Habka isku dheelitirka ee u dhexeeya qanjidhada

Sidaad ogtahay, qaybta k8s waxay mas'uul ka tahay qaybinta boodhka dhexdooda, sida jadwalka, kaas oo u shaqeeya si waafaqsan algorithm gaar ah. Algorithm-kani waxa uu maraa laba marxaladood marka la dooranayo noodhka ugu fiican ee la bilaabayo:

  1. shaandhaynta
  2. Kala duwanaansho

Kuwaas. sida ku cad siyaasadda la sharraxay, qanjidhada ayaa marka hore la doortaa kuwaas oo ay suurtagal tahay in la bilaabo boodh ku salaysan go'an saadaaliyay (oo ay ku jirto hubinta in noodhka uu leeyahay ilo ku filan oo uu ku socodsiiyo boodhka - PodFitsResources), ka dibna mid kasta oo ka mid ah noodhkan, marka loo eego mudnaanta Dhibcaha waa la bixiyaa (oo ay ku jiraan, kheyraadka badan ee lacag-la'aanta ah ee noodu haysto, dhibco badan ayaa loo qoondeeyaa - LeastResourceAllocation/LeastRequestedPriority/BalancedResourceAllocation) iyo boodhka waxaa lagu soo bandhigay noodhka dhibcaha ugu badan (haddii dhowr noodes ay qanciyaan xaaladdan hal mar, ka dibna mid aan kala sooc lahayn ayaa la doortaa) .

Isla mar ahaantaana, waxaad u baahan tahay inaad fahamto in jadwaleeyaha, marka la qiimeynayo ilaha la heli karo ee noode, uu hagayo xogta lagu kaydiyo iwm - i.e. Qadarka kheyraadka la codsaday/ xaddidan ee boodh kasta oo ku shaqeeya noodhkan, laakiin maaha isticmaalka kheyraadka dhabta ah. Macluumaadkan waxaa laga heli karaa soo-saarka amarka kubectl describe node $NODE, tusaale ahaan:

# kubectl describe nodes nxs-k8s-s1
..
Non-terminated Pods:         (9 in total)
  Namespace                  Name                                         CPU Requests  CPU Limits  Memory Requests  Memory Limits  AGE
  ---------                  ----                                         ------------  ----------  ---------------  -------------  ---
  ingress-nginx              nginx-ingress-controller-754b85bf44-qkt2t    0 (0%)        0 (0%)      0 (0%)           0 (0%)         233d
  kube-system                kube-flannel-26bl4                           150m (0%)     300m (1%)   64M (0%)         500M (1%)      233d
  kube-system                kube-proxy-exporter-cb629                    0 (0%)        0 (0%)      0 (0%)           0 (0%)         233d
  kube-system                kube-proxy-x9fsc                             0 (0%)        0 (0%)      0 (0%)           0 (0%)         233d
  kube-system                nginx-proxy-k8s-worker-s1                    25m (0%)      300m (1%)   32M (0%)         512M (1%)      233d
  nxs-monitoring             alertmanager-main-1                          100m (0%)     100m (0%)   425Mi (1%)       25Mi (0%)      233d
  nxs-logging                filebeat-lmsmp                               100m (0%)     0 (0%)      100Mi (0%)       200Mi (0%)     233d
  nxs-monitoring             node-exporter-v4gdq                          112m (0%)     122m (0%)   200Mi (0%)       220Mi (0%)     233d
Allocated resources:
  (Total limits may be over 100 percent, i.e., overcommitted.)
  Resource           Requests           Limits
  --------           --------           ------
  cpu                487m (3%)          822m (5%)
  memory             15856217600 (2%)  749976320 (3%)
  ephemeral-storage  0 (0%)             0 (0%)

Halkan waxaan ku aragnaa dhammaan boodhadhka ku shaqeeya nood gaar ah, iyo sidoo kale agabka uu boodh kastaa codsado. Oo waa kuwan waxa jadwal-hayeyaashu u eg yihiin marka cronjob-cron-events-1573793820-xt6q9 pod la bilaabay (macluumaadkani waxay ka soo muuqan doonaan jadwalka jadwalka markaad dejiso heerka 10-aad ee gelitaanka doodaha bilowga -v=10):

log

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

Halkan waxaan ku aragnaa in marka hore jadwalku uu shaandheeyo oo uu soo saaro liiska 3 nodes kaas oo lagu bilaabi karo (nxs-k8s-s8, nxs-k8s-s9, nxs-k8s-s10). Kadib waxay xisaabinaysaa buundooyinka iyadoo lagu saleynayo dhowr cabbir (ay ku jiraan BalancedResourceAllocation, LeastResourceAllocation) mid kasta oo ka mid ah noodhkan si loo go'aamiyo noodhka ugu habboon. Ugu dambeyntii, boodhka waxaa lagu qorsheeyey noodhka oo leh tirada ugu badan ee dhibcaha (halkan laba nodes waxay leeyihiin tiro isku mid ah dhibcaha 100037, markaa mid aan kala sooc lahayn ayaa la doortay - nxs-k8s-s10).

gunaanad: haddii qanjidhku ku socdo boodhyo kuwaas oo aan wax xaddidaad ah loo samayn, ka dibna k8s (marka laga eego aragtida isticmaalka kheyraadka) tani waxay u dhigantaa sidii haddii aysan jirin boodhyo noocan oo kale ah oo ku yaala noodhkan gabi ahaanba. Sidaa darteed, haddii aad, shuruud ahaan, haysato boodh leh geeddi-socod qashin ah (tusaale, wowza) oo aan wax xaddidaad ah loo samayn, markaa xaalad ayaa laga yaabaa inay soo baxdo marka boodhkani uu dhab ahaantii cunay dhammaan kheyraadka qanjirada, laakiin k8s qanjidhadan waxa loo tixgalinayaa in aan la rarin waxaana la siin doonaa isla tiro dhibco ah marka la qiimeeyo (si sax ah dhibcaha qiimaynaya agabka la heli karo) sida udub aan lahayn gabo shaqaynaysa, taas oo ugu danbayn keeni karta in culayska loo qaybiyo qanjidhada dhexdooda.

Ka saarida boodhka

Sidaad ogtahay, boodh kasta waxaa loo qoondeeyay mid ka mid ah 3 fasal QoS:

  1. dammaanad qaaday - waxaa loo qoondeeyay marka weel kasta oo ku jira sanduuqa codsiga iyo xadka loo cayimay xusuusta iyo cpu, oo qiimayaashani waa inay iswaafaqaan
  2. qarxin kara - ugu yaraan hal weel oo ku jira boodhka ayaa leh codsi iyo xaddid, oo leh codsi < xad
  3. dadaalka ugu fiican - marka aan hal weel oo ku jira boodhka uu yahay mid xaddidan

Isla mar ahaantaana, marka qanjirada ay la kulmaan la'aanta kheyraad (disk, xusuusta), kubelet wuxuu bilaabaa inuu darajo sare u qaado oo ka saaro tubooyinka iyadoo la raacayo algorithm gaar ah oo tixgelinaya mudnaanta podska iyo fasalka QoS. Tusaale ahaan, haddii aan ka hadleyno RAM, ka dibna ku saleysan fasalka QoS, dhibcood waxaa lagu abaalmariyey mabda'a soo socda:

  • Dammaanad:-998
  • Dadaalka ugu Fiican: 1000
  • Bursable: min (ugu badnaan (2, 1000 - (1000 * memoryRequestBytes) / machineMemoryCapacityBytes), 999)

Kuwaas. Isla mudnaan la mid ah, kubelet-ku wuxuu marka hore ka saari doonaa tubooyinka iyadoo la raacayo dadaalka ugu wanaagsan ee fasalka QoS ee noodhka.

gunaanad: haddii aad rabto in aad hoos u dhigto suurtogalnimada in bacda la rabo laga saaro qanjidhada haddii ay dhacdo la'aanta kheyraadka, ka dibna iyada oo la raacayo mudnaanta, waxaad sidoo kale u baahan tahay inaad daryeesho dejinta codsiga / xadka.

Mechanism for horizontal autoscaling of Application pods (HPA)

Marka hawshu ay tahay in si toos ah loo kordhiyo oo loo yareeyo tirada boodhka iyadoo ku xiran isticmaalka ilaha (nidaamka - CPU / RAM ama isticmaale - rps), sida k8s HPA (Horizontal Pod Autoscaler). Algorithm waa sida soo socota:

  1. Akhrinta hadda ee ilaha la arkay waa la go'aamiyay (currentMetricValue)
  2. Qiimaha la rabo ee kheyraadka ayaa la go'aamiyaa (desiredMetricValue), kaas oo loogu talagalay kheyraadka nidaamka waxaa lagu dejiyay codsi.
  3. Tirada hadda ee nuqul ka mid ah ayaa la go'aamiyay (currentReplicas)
  4. Qaabka soo socdaa wuxuu xisaabiyaa tirada la rabo ee nuqullada (desiredReplicas)
    la doonayoReplicas = [ currentReplicas * ( currentMetricValue / wantedMetricValue)]

Xaaladdan oo kale, miisaanku ma dhici doono marka isugeynta (currentMetricValue / wantedMetricValue) ay ku dhowdahay 1 (xaaladdan, waxaan dejin karnaa qaladka la oggol yahay nafteena; marka la eego waa 0.1).

Aynu eegno sida hpa uu u shaqeeyo anagoo adeegsanayna tusaalaha arjiga-imtixaanka app-ka (oo lagu tilmaamay Deployment), halkaasoo ay lagama maarmaan tahay in la beddelo tirada nuqullada iyadoo ku xiran isticmaalka CPU:

  • Codsiga caddaynta

    kind: Deployment
    apiVersion: apps/v1beta2
    metadata:
    name: app-test
    spec:
    selector:
    matchLabels:
    app: app-test
    replicas: 2
    template:
    metadata:
    labels:
    app: app-test
    spec:
    containers:
    - name: nginx
    image: registry.nixys.ru/generic-images/nginx
    imagePullPolicy: Always
    resources:
    requests:
    cpu: 60m
    ports:
    - name: http
    containerPort: 80
    - name: nginx-exporter
    image: nginx/nginx-prometheus-exporter
    resources:
    requests:
    cpu: 30m
    ports:
    - name: nginx-exporter
    containerPort: 9113
    args:
    - -nginx.scrape-uri
    - http://127.0.0.1:80/nginx-status

    Kuwaas. Waxaan aragnaa in boodhka codsiga markii hore lagu bilaabay laba xaaladood, mid kasta oo ka mid ah wuxuu ka kooban yahay laba weel oo nginx iyo nginx- dhoofiye ah, mid kasta oo ka mid ah oo cayiman. Codsiyada ee CPU.

  • HPA Manifesto

    apiVersion: autoscaling/v2beta2
    kind: HorizontalPodAutoscaler
    metadata:
    name: app-test-hpa
    spec:
    maxReplicas: 10
    minReplicas: 2
    scaleTargetRef:
    apiVersion: extensions/v1beta1
    kind: Deployment
    name: app-test
    metrics:
    - type: Resource
    resource:
    name: cpu
    target:
    type: Utilization
    averageUtilization: 30

    Kuwaas. Waxaan abuurnay hpa kaas oo la socon doona Imtixaanka Deployment app-ka oo ku hagaajin doona tirada boodhka arjiga ku saleysan tusiyaha cpu (waxaan fileynaa in boodhku uu cuno 30% CPU ay codsato), iyadoo tirada nuqullada ay ku jiraan inta u dhaxaysa 2-10.

    Hadda, aynu eegno habka hawlgalka hpa haddii aynu culays saarno mid ka mid ah kuwa qumbaha:

     # kubectl top pod
    NAME                                                   CPU(cores)   MEMORY(bytes)
    app-test-78559f8f44-pgs58            101m         243Mi
    app-test-78559f8f44-cj4jz            4m           240Mi

Guud ahaan waxaan haynaa kuwa soo socda:

  • Qiimaha la rabo (desiredMetricValue) - marka loo eego goobaha hpa, waxaan haynaa 30%
  • Qiimaha hadda (currentMetricValue) - xisaabinta, maamulaha-maareeyaha wuxuu xisaabiyaa celceliska qiimaha isticmaalka kheyraadka %, i.e. shardi ahaan waxa uu sameeyaa waxyaabaha soo socda:
    1. Wuxuu ka helaa qiyamka saxda ah ee cabbirka pod-mitirka ee seerfarka, i.e. 101m iyo 4m
    2. Wuxuu xisaabiyaa celceliska qiimaha saxda ah, i.e. (101m + 4m) / 2 = 53m
    3. Wuxuu helaa qiimaha saxda ah ee isticmaalka kheyraadka la rabo (tan, codsiyada dhammaan weelasha waa la soo koobay) 60m + 30m = 90m
    4. Wuxuu xisaabiyaa celceliska boqolkiiba isticmaalka CPU marka loo eego sanduuqa codsiga, i.e. 53m / 90m * 100% = 59%

Hadda waxaan haynaa wax kasta oo aan u baahanahay si aan u go'aamino haddii aan u baahanahay inaan beddelno tirada nuqullada; si tan loo sameeyo, waxaan xisaabineynaa isku-dhafka:

ratio = 59% / 30% = 1.96

Kuwaas. tirada nuqulada waa in lagu kordhiyaa ~ 2 jeer iyo qadarka [2 * 1.96] = 4.

Π’Ρ‹Π²ΠΎΠ΄: Sida aad arki karto, si habkani u shaqeeyo, xaalad lagama maarmaan ah waa joogitaanka codsiyada dhammaan weelasha ku jira boodhka la arkay.

Farsamaynta autoscaler toosan ee noodhka (Cluster Autoscaler)

Si looga takhaluso saameynta xun ee nidaamka inta lagu jiro culeyska culeyska, haysashada hpa habaysan kuma filna. Tusaale ahaan, marka loo eego goobaha ku jira maareeyaha xakamaynta hpa, waxay go'aansataa in tirada nuqullada loo baahan yahay in lagu kordhiyo 2 jeer, laakiin noodhadhku ma haystaan ​​ilo lacag la'aan ah si ay u socodsiiyaan tiro caynkaas ah (ie. node ma bixin karo agabka la codsaday in loo gudbiyo codsiyada)

Xaaladdan oo kale, haddii bixiyaha uu leeyahay IaaS/PaaS u dhigma (tusaale, GKE/GCE, AKS, EKS, iwm.), qalab sida Node Autoscaler. Waxay kuu ogolaanaysaa inaad dejiso tirada ugu badan iyo ugu yar ee qanjidhada ee kutlada oo si toos ah u hagaajiso tirada hadda jirta (adiga oo wacaya bixiyaha daruuraha API si aad u dalbato/ka saarto noodhka) marka ay jirto wax la'aan ah kutlada iyo boodhka lama jadwalsan karo (waxay ku jiraan gobolka Sugi).

Π’Ρ‹Π²ΠΎΠ΄: Si aad awood ugu yeelatid qanjidhada autoscale, waa lagama maarmaan in codsiyada lagu dhejiyo weelasha boodhka si ay k8s si sax ah u qiimeeyaan culeyska qanjidhada iyo si waafaqsan warbixinta in aysan jirin wax agab ah oo ku jira kooxda si ay u bilaabaan boodhka xiga.

gunaanad

Waa in la ogaadaa in dejinta xaddidaadda kheyraadka weelka aysan ahayn wax looga baahan yahay arjiga inuu si guul leh u shaqeeyo, laakiin weli way fiican tahay in sidaas la sameeyo sababaha soo socda awgood:

  1. Si loo helo hawl qabad sax ah oo badan oo jadwaleeyaha ah marka la eego isku dheelitirka culeyska u dhexeeya qanjidhada k8s
  2. Si loo yareeyo suurtagalnimada inay dhacdo "ka saarista boodhka"
  3. Si toos ah autoscaling of Application pods (HPA) si ay u shaqeyso
  4. Si toos ah autoscaling of noodes (Cluster Autoscaling) ee bixiyayaasha daruuraha

Sidoo kale akhri maqaallo kale oo ku jira blog-keena:

Source: www.habr.com

Add a comment