Kubernetes: kilode ti o ṣe pataki lati tunto iṣakoso awọn orisun eto?

Gẹgẹbi ofin, iwulo nigbagbogbo wa lati pese adagun omi ti awọn orisun si ohun elo kan fun ṣiṣe deede ati iduroṣinṣin. Ṣugbọn kini ti awọn ohun elo pupọ ba nṣiṣẹ lori agbara kanna? Bii o ṣe le pese ọkọọkan wọn pẹlu awọn orisun pataki to kere julọ? Bawo ni o ṣe le ṣe idinwo lilo awọn orisun? Bii o ṣe le pin kaakiri fifuye ni deede laarin awọn apa? Bii o ṣe le rii daju pe ẹrọ igbelowọn petele ṣiṣẹ ti fifuye ohun elo ba pọ si?

Kubernetes: kilode ti o ṣe pataki lati tunto iṣakoso awọn orisun eto?

O nilo lati bẹrẹ pẹlu kini awọn oriṣi akọkọ ti awọn orisun wa ninu eto - eyi, nitorinaa, jẹ akoko ero isise ati Ramu. Ni awọn k8s ṣafihan awọn iru orisun wọnyi ni iwọn ni awọn iwọn wọnyi:

  • Sipiyu - ni ohun kohun
  • Ramu - ni awọn baiti

Pẹlupẹlu, fun orisun kọọkan o ṣee ṣe lati ṣeto awọn oriṣi meji ti awọn ibeere - ibeere и ifilelẹ lọ. Awọn ibeere - ṣapejuwe awọn ibeere to kere julọ fun awọn orisun ọfẹ ti oju ipade kan lati ṣiṣẹ eiyan kan (ati podu lapapọ), lakoko ti awọn opin ṣeto opin lile lori awọn orisun ti o wa si eiyan naa.

O ṣe pataki lati ni oye pe ifihan ko ni lati ṣalaye awọn iru mejeeji ni gbangba, ṣugbọn ihuwasi yoo jẹ bi atẹle:

  • Ti o ba jẹ pe awọn opin ti orisun nikan ni pato ni pato, lẹhinna awọn ibeere fun orisun yii yoo gba iye kan laifọwọyi ti o dọgba si awọn opin (o le jẹrisi eyi nipa pipe awọn ile-iṣẹ apejuwe). Awon. ni otitọ, eiyan naa yoo ni opin si iye kanna ti awọn ohun elo ti o nilo lati ṣiṣẹ.
  • Ti o ba jẹ pe awọn ibeere nikan ni pato ni pato fun orisun kan, lẹhinna ko si awọn ihamọ oke ti a ṣeto lori orisun yii - i.e. eiyan ti wa ni opin nikan nipasẹ awọn oro ti awọn ipade ara.

O tun ṣee ṣe lati tunto iṣakoso awọn orisun kii ṣe ni ipele ti eiyan kan pato, ṣugbọn tun ni ipele aaye orukọ ni lilo awọn nkan wọnyi:

  • Iwọn Iwọn - ṣapejuwe eto imulo ihamọ ni ipele eiyan / podu ni ns ati pe o nilo lati ṣe apejuwe awọn opin aiyipada lori eiyan / podu, bakannaa ṣe idiwọ ẹda ti o han gedegbe awọn apoti / podds (tabi idakeji), ṣe opin nọmba wọn. ati pinnu iyatọ ti o ṣeeṣe ninu awọn iye ni awọn opin ati awọn ibeere
  • ResourceQuotas - ṣapejuwe eto imulo ihamọ ni gbogbogbo fun gbogbo awọn apoti ni ns ati pe a lo, gẹgẹbi ofin, lati ṣe iyasọtọ awọn orisun laarin awọn agbegbe (wulo nigbati awọn agbegbe ko ba ni iyasọtọ ni muna ni ipele ipade)

Awọn atẹle jẹ awọn apẹẹrẹ ti awọn ifihan ti o ṣeto awọn opin orisun:

  • Ni ipele apoti kan pato:

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

    Awon. Ni ọran yii, lati ṣiṣẹ eiyan kan pẹlu nginx, iwọ yoo nilo o kere ju 1G ti Ramu ọfẹ ati 0.2 Sipiyu lori ipade, lakoko pupọ julọ eiyan le jẹ 0.2 Sipiyu ati gbogbo Ramu ti o wa lori ipade.

  • Ni ipele odidi ns:

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

    Awon. apao gbogbo awọn apoti ibeere ni aiyipada ns ko le kọja 300m fun Sipiyu ati 1G fun OP, ati apapọ gbogbo opin jẹ 700m fun Sipiyu ati 2G fun OP.

  • Awọn ifilelẹ aiyipada fun awọn apoti ni 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

    Awon. ni aaye orukọ aiyipada fun gbogbo awọn apoti, ibeere yoo ṣeto si 100m fun Sipiyu ati 1G fun OP, opin - 1 Sipiyu ati 2G. Ni akoko kanna, iye kan tun ṣeto lori awọn iye to ṣeeṣe ni ibeere / opin fun Sipiyu (50m <x <2) ati Ramu (500M <x <4G).

  • Awọn ihamọ ipele-podu ns:

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

    Awon. fun adarọ ese kọọkan ninu aiyipada ns yoo jẹ opin ti 4 vCPU ati 1G.

Bayi Emi yoo fẹ lati sọ fun ọ kini awọn anfani ti ṣeto awọn ihamọ wọnyi le fun wa.

Fifuye iwọntunwọnsi siseto laarin awọn apa

Bi o ṣe mọ, paati k8s jẹ iduro fun pinpin awọn adarọ-ese laarin awọn apa, bii oluṣeto eto, eyi ti o ṣiṣẹ gẹgẹbi algorithm kan pato. Algoridimu yii lọ nipasẹ awọn ipele meji nigbati o ba yan oju ipade ti o dara julọ lati ṣe ifilọlẹ:

  1. Sisẹ
  2. Ibiti o wa

Awon. ni ibamu si eto imulo ti a ṣalaye, awọn apa ti yan ni ibẹrẹ lori eyiti o ṣee ṣe lati ṣe ifilọlẹ podu kan ti o da lori eto kan asọtẹlẹ (pẹlu ṣiṣe ayẹwo boya ipade naa ni awọn orisun to lati ṣiṣẹ adarọ-ese - PodFitsResources), ati lẹhinna fun ọkọọkan awọn apa wọnyi, ni ibamu si awọn ayo Awọn aaye ni a fun ni (pẹlu, awọn orisun ọfẹ diẹ sii ni ipade kan, awọn aaye diẹ sii ti o pin si - LeastResourceAllocation/LeastRequestedPriority/BalancedResourceAllocation) ati pe a ṣe ifilọlẹ podu naa lori ipade pẹlu awọn aaye pupọ julọ (ti ọpọlọpọ awọn apa ba ni itẹlọrun ipo yii ni ẹẹkan, lẹhinna a yan laileto).

Ni akoko kanna, o nilo lati ni oye pe oluṣeto, nigbati o ba ṣe ayẹwo awọn ohun elo ti o wa ti oju ipade, ni itọsọna nipasẹ data ti a fipamọ sinu etcd - i.e. fun iye awọn oluşewadi ti a beere / aropin ti adarọ ese kọọkan ti nṣiṣẹ lori ipade yii, ṣugbọn kii ṣe fun agbara awọn orisun gangan. Alaye yi le ti wa ni gba lati awọn pipaṣẹ o wu kubectl describe node $NODEfun apẹẹrẹ:

# 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%)

Nibi ti a rii gbogbo awọn adarọ-ese ti n ṣiṣẹ lori ipade kan pato, bakanna bi awọn orisun ti adarọ ese kọọkan n beere. Ati pe eyi ni ohun ti awọn akọọlẹ iṣeto ṣe dabi nigbati cronjob-cron-events-1573793820-xt6q9 pod ti ṣe ifilọlẹ (alaye yii yoo han ninu akọọlẹ iṣeto nigbati o ṣeto ipele gedu 10th ni awọn ariyanjiyan aṣẹ ibẹrẹ -v=10):

wọle

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

Nibi a rii pe ni ibẹrẹ oluṣeto ṣe asẹ ati ṣe ipilẹṣẹ atokọ ti awọn apa 3 lori eyiti o le ṣe ifilọlẹ (nxs-k8s-s8, nxs-k8s-s9, nxs-k8s-s10). Lẹhinna o ṣe iṣiro awọn ikun ti o da lori ọpọlọpọ awọn paramita (pẹlu BalancedResourceAllocation, LeastResourceAllocation) fun ọkọọkan awọn apa wọnyi lati le pinnu ipade ti o dara julọ. Ni ipari, a ti ṣeto podu lori ipade pẹlu nọmba ti o ga julọ ti awọn aaye (nibi awọn apa meji ni ẹẹkan ni nọmba kanna ti awọn aaye 100037, nitorinaa a yan ọkan laileto - nxs-k8s-s10).

ipari: ti ipade kan ba nṣiṣẹ awọn adarọ-ese fun eyiti ko si awọn ihamọ ti a ṣeto, lẹhinna fun k8s (lati oju-ọna ti lilo awọn orisun) eyi yoo jẹ deede si bi ẹnipe ko si iru awọn podu lori ipade yii rara. Nitorinaa, ti o ba, ni majemu, ni adarọ-ese pẹlu ilana ijẹun (fun apẹẹrẹ, wowza) ati pe ko si awọn ihamọ ti a ṣeto fun rẹ, lẹhinna ipo kan le dide nigbati adarọ ese yii jẹ gbogbo awọn orisun ti ipade naa, ṣugbọn fun k8s ipade yii. ti wa ni ka unloaded ati awọn ti o yoo wa ni fun un awọn nọmba kanna ti ojuami nigba ti ipo (gangan ni awọn ojuami iṣiro awọn orisun ti o wa) bi a ipade ti ko ni ṣiṣẹ pods, eyi ti o be le ja si uneven pinpin fifuye laarin awọn apa.

Pod ká ilekuro

Bi o ṣe mọ, adarọ-ese kọọkan jẹ ipin ọkan ninu awọn kilasi QoS 3:

  1. ẹri - ti yan nigbati fun apoti kọọkan ninu podu ibeere ati opin ti wa ni pato fun iranti ati Sipiyu, ati pe awọn iye wọnyi gbọdọ baamu
  2. ti nwaye — o kere ju eiyan kan ninu podu ni ibeere ati opin kan, pẹlu ibeere <ipin
  3. iṣẹ ti o dara julọ - nigbati kii ṣe apoti ẹyọkan ninu podu ti awọn orisun lopin

Ni akoko kanna, nigbati ipade kan ba ni iriri aini awọn orisun (disk, iranti), kubelet bẹrẹ lati ṣe ipo ati yọ awọn adarọ-ese jade ni ibamu si algorithm kan pato ti o ṣe akiyesi pataki ti podu ati kilasi QoS rẹ. Fun apẹẹrẹ, ti a ba n sọrọ nipa Ramu, lẹhinna da lori kilasi QoS, awọn aaye ni a fun ni ni ibamu si ipilẹ atẹle:

  • Ẹri:-998
  • Ti o dara ju akitiyan: 1000
  • Burstable: min (max (2, 1000 - (1000 * memoryRequestBytes) / machineMemoryCapacityBytes), 999)

Awon. pẹlu ayo kanna, kubelet yoo kọkọ jade awọn adarọ-ese pẹlu igbiyanju QoS ti o dara julọ lati oju ipade.

ipari: ti o ba fẹ lati dinku o ṣeeṣe ti podu ti o fẹ ni a yọ kuro lati oju ipade ni iṣẹlẹ ti aini awọn ohun elo lori rẹ, lẹhinna pẹlu ayo, o tun nilo lati ṣe abojuto ti ṣeto ibere / opin fun rẹ.

Imọ-ẹrọ fun adaṣe adaṣe petele ti awọn pods ohun elo (HPA)

Nigbati iṣẹ-ṣiṣe naa ba ni lati pọ si laifọwọyi ati dinku nọmba awọn adarọ-ese da lori lilo awọn orisun (eto – Sipiyu/Ramu tabi olumulo-rps), iru nkan k8s bii HPA (Horizontal Pod Autoscaler). Algorithm ti eyiti o jẹ bi atẹle:

  1. Awọn kika lọwọlọwọ ti orisun ti a ṣe akiyesi ni ipinnu (currentMetricValue)
  2. Awọn iye ti o fẹ fun orisun ni ipinnu (desiredMetricValue), eyiti o ṣeto fun awọn orisun eto nipa lilo ibeere
  3. Nọmba lọwọlọwọ ti awọn ẹda ti pinnu (awọn ẹda lọwọlọwọ)
  4. Ilana ti o tẹle yii ṣe iṣiro nọmba ti o fẹ fun awọn ẹda-iwe (desiredReplicas)
    fẹReplicas = [ currentReplicas * ( currentMetricValue / wantedMetricValue)]

Ni ọran yii, wiwọn kii yoo waye nigbati iyeida (currentMetricValue / fẹMetricValue) sunmọ 1 (ninu ọran yii, a le ṣeto aṣiṣe iyọọda funrararẹ; nipasẹ aiyipada o jẹ 0.1).

Jẹ ki a wo bii hpa ṣe n ṣiṣẹ nipa lilo apẹẹrẹ ti ohun elo idanwo app (ti a ṣe apejuwe bi Imuṣiṣẹ), nibiti o jẹ dandan lati yi nọmba awọn ẹda ti o da lori agbara Sipiyu:

  • Ohun elo farahan

    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

    Awon. a rii pe adarọ-ese ohun elo jẹ ifilọlẹ ni ibẹrẹ ni awọn iṣẹlẹ meji, ọkọọkan eyiti o ni awọn apoti nginx meji ati nginx-exporter, fun ọkọọkan eyiti o ni pato. ibeere fun Sipiyu.

  • 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

    Awon. A ṣẹda hpa kan ti yoo ṣe atẹle idanwo ohun elo imuṣiṣẹ ati ṣatunṣe nọmba awọn adarọ-ese pẹlu ohun elo ti o da lori atọka cpu (a nireti pe podu yẹ ki o jẹ 30% ti Sipiyu ti o beere), pẹlu nọmba awọn ẹda ti o wa ninu awọn ibiti o ti 2-10.

    Bayi, jẹ ki a wo ẹrọ ti iṣiṣẹ hpa ti a ba lo ẹru kan si ọkan ninu awọn hearths:

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

Ni apapọ, a ni awọn atẹle wọnyi:

  • Iye ti o fẹ (desiredMetricValue) - ni ibamu si awọn eto hpa, a ni 30%
  • Iye lọwọlọwọ (currentMetricValue) - fun iṣiro, oludari-oluṣakoso ṣe iṣiro iye apapọ ti agbara orisun ni%, i.e. ni majemu ṣe awọn wọnyi:
    1. Ngba awọn iye pipe ti awọn metiriki podu lati ọdọ olupin metiriki, i.e. 101m ati 4m
    2. Ṣe iṣiro apapọ idiye iye, i.e. (101m + 4m) / 2 = 53m
    3. Gba iye pipe fun agbara orisun ti o fẹ (fun eyi, awọn ibeere ti gbogbo awọn apoti ni akopọ) 60m + 30m = 90m
    4. Ṣe iṣiro iwọn apapọ ti agbara Sipiyu ni ibatan si adarọ-ese ibeere, i.e. 53m / 90m * 100% = 59%

Bayi a ni ohun gbogbo ti a nilo lati pinnu boya a nilo lati yi nọmba awọn ẹda pada; lati ṣe eyi, a ṣe iṣiro iye-iye:

ratio = 59% / 30% = 1.96

Awon. Nọmba awọn ẹda yẹ ki o pọsi nipasẹ ~2 igba ati iye si [2 * 1.96] = 4.

Ipari: Bii o ti le rii, ni ibere fun ẹrọ yii lati ṣiṣẹ, ipo pataki ni wiwa awọn ibeere fun gbogbo awọn apoti ninu adarọ ese ti a ṣe akiyesi.

Ẹ̀rọ-iṣẹ́ fún àdáwòkọ aládàáṣe ti àwọn apá (Cluster Autoscaler)

Ni ibere lati yomi ipa odi lori eto lakoko awọn iṣan fifuye, nini hpa tunto ko to. Fun apẹẹrẹ, ni ibamu si awọn eto inu oluṣakoso hpa, o pinnu pe nọmba awọn ẹda ti o nilo lati pọ si nipasẹ awọn akoko 2, ṣugbọn awọn apa ko ni awọn orisun ọfẹ lati ṣiṣẹ iru nọmba awọn adarọ-ese (ie ipade ko le pese awọn Awọn orisun ti a beere si awọn adarọ-ese awọn ibeere) ati awọn adarọ-ese wọnyi yipada si ipo isunmọtosi.

Ni ọran yii, ti olupese ba ni IaaS/PaaS ti o baamu (fun apẹẹrẹ, GKE/GCE, AKS, EKS, ati bẹbẹ lọ), ohun elo bii Node Autoscaler. O gba ọ laaye lati ṣeto nọmba ti o pọju ati ti o kere julọ ti awọn apa inu iṣupọ ati ṣatunṣe nọmba awọn apa lọwọlọwọ laifọwọyi (nipa pipe olupese API lati paṣẹ / yọ ipade kuro) nigbati aini awọn orisun wa ninu iṣupọ ati awọn adarọ-ese ko le wa ni eto (wa ni isunmọtosi ni ipinle).

Ipari: Lati ni anfani lati ṣe awọn apa adaṣe, o jẹ dandan lati ṣeto awọn ibeere ni awọn apoti podu ki k8s le ṣe ayẹwo ni deede fifuye lori awọn apa ati ni ibamu si ijabọ pe ko si awọn orisun ninu iṣupọ lati ṣe ifilọlẹ adarọ ese atẹle.

ipari

O yẹ ki o ṣe akiyesi pe ṣeto awọn opin orisun orisun eiyan kii ṣe ibeere fun ohun elo lati ṣiṣẹ ni aṣeyọri, ṣugbọn o tun dara julọ lati ṣe bẹ fun awọn idi wọnyi:

  1. Fun iṣẹ ṣiṣe deede diẹ sii ti oluṣeto ni awọn ofin ti iwọntunwọnsi fifuye laarin awọn apa k8s
  2. Lati dinku o ṣeeṣe ti iṣẹlẹ “iyọkuro podu” kan ti o ṣẹlẹ
  3. Fun petele autoscaling ti ohun elo pods (HPA) lati ṣiṣẹ
  4. Fun petele autoscaling ti awọn apa (Cluster Autoscaling) fun awọn olupese awọsanma

Tun ka awọn nkan miiran lori bulọọgi wa:

orisun: www.habr.com

Fi ọrọìwòye kun