Kubernetes: ke hobane'ng ha ho le bohlokoa ho theha tsamaiso ea lisebelisoa tsa tsamaiso?

E le molao, kamehla ho na le tlhokahalo ea ho fana ka letamo le inehetseng la lisebelisoa ho kopo bakeng sa ts'ebetso ea eona e nepahetseng le e tsitsitseng. Empa ho thoe'ng haeba lisebelisoa tse 'maloa li sebetsa ka matla a tšoanang? Joang ho fana ka e mong le e mong oa bona ka bonyane ba lisebelisoa tse hlokahalang? U ka fokotsa tšebeliso ea lisebelisoa joang? Joang ho aba mojaro ka nepo lipakeng tsa li-node? U ka etsa bonnete ba hore mochini o otlolohileng o sebetsa joang haeba mojaro oa kopo o eketseha?

Kubernetes: ke hobane'ng ha ho le bohlokoa ho theha tsamaiso ea lisebelisoa tsa tsamaiso?

U hloka ho qala ka hore na ke mefuta efe ea mantlha ea lisebelisoa tse teng tsamaisong - ena, ehlile, ke nako ea processor le RAM. Ho k8s e bonts'a mefuta ena ea lisebelisoa e lekantsoe ka likarolo tse latelang:

  • CPU - ka li-cores
  • RAM - ka li-byte

Ho feta moo, bakeng sa mohloli o mong le o mong hoa khoneha ho beha mefuta e 'meli ea litlhoko - likopo и Meeli. Likopo - e hlalosa litlhoko tse fokolang tsa lisebelisoa tsa mahala tsa node ho tsamaisa setshelo (le pod ka kakaretso), ha meeli e beha moeli o thata ho lisebelisoa tse fumanehang ho setshelo.

Ke habohlokoa ho utloisisa hore ponahalo ha ea tlameha ho hlalosa mefuta ka bobeli ka ho hlaka, empa boitšoaro bo tla ba ka tsela e latelang:

  • Haeba feela meeli ea sesebelisoa e hlalositsoe ka ho hlaka, likopo tsa sesebelisoa sena li nka boleng bo lekanang le meeli (o ka netefatsa sena ka ho letsetsa mekhatlo e hlalosang). Tseo. ha e le hantle, setshelo se tla lekanyetsoa ho palo e lekanang ea lisebelisoa tseo e li hlokang ho sebetsa.
  • Haeba feela likopo li hlalositsoe ka ho hlaka bakeng sa mohlodi, ha ho na lithibelo tse kaholimo tse behiloeng mohloling ona - ke hore. setshelo se lekanyelitsoe feela ke lisebelisoa tsa node ka boeona.

Hape hoa khoneha ho hlophisa taolo ea lisebelisoa eseng feela boemong ba setshelo se itseng, empa hape le boemong ba sebaka sa mabitso ho sebelisa mekhatlo e latelang:

  • LimitRange - e hlalosa leano la thibelo boemong ba setshelo / pod ho ns mme e hlokahala bakeng sa ho hlalosa meeli ea kamehla ho setshelo / pod, hammoho le ho thibela ho thehoa ha lijana / li-pods tse hlakileng (kapa ka tsela e fapaneng), fokotsa palo ea tsona le ho fumana phapang e ka bang teng ho litekanyetso tsa meeli le likopo
  • ResourceQuotas - hlalosa leano la lithibelo ka kakaretso bakeng sa lijana tsohle tse ho ns mme e sebelisoa, joalo ka molao, ho arola lisebelisoa lipakeng tsa tikoloho (e thusa ha tikoloho e sa aroloa ka thata maemong a node)

E latelang ke mehlala ea lipontšo tse behang meeli ea lisebelisoa:

  • Boemong bo khethehileng ba setshelo:

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

    Tseo. tabeng ena, ho tsamaisa setshelo se nang le nginx, o tla hloka bonyane 1G ea RAM e sa lefelloeng le 0.2 CPU ho node, ha ka ho fetisisa setshelo se ka ja 0.2 CPU le RAM eohle e fumanehang node.

  • Boemong bo felletseng ns:

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

    Tseo. kakaretso ea lijana tsohle tsa kopo ho ns ea kamehla e ke ke ea feta 300m bakeng sa CPU le 1G bakeng sa OP, 'me kakaretso ea moeli kaofela ke 700m bakeng sa CPU le 2G bakeng sa OP.

  • Meeli ea kamehla ea linkho tse ho 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

    Tseo. sebakeng sa mabitso sa lijana tsohle, kopo e tla beoa ho 100m bakeng sa CPU le 1G bakeng sa OP, moeli - 1 CPU le 2G. Ka nako e ts'oanang, moeli o boetse o behiloe ho litekanyetso tse ka khonehang ka kopo / moeli oa CPU (50m <x <2) le RAM (500M <x <4G).

  • Lithibelo tsa boemo ba Pod ns:

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

    Tseo. bakeng sa pod ka 'ngoe ho ns ea kamehla ho tla ba le moeli oa 4 vCPU le 1G.

Joale ke rata ho u bolella hore na ho beha lithibelo tsena ho ka re fa melemo efe.

Mechini ea ho leka-lekanya mojaro lipakeng tsa li-node

Joalo ka ha u tseba, karolo ea k8s e ikarabella bakeng sa kabo ea li-pods har'a li-node, joalo ka Scheduler, e sebetsang ho latela algorithm e itseng. Algorithm ena e tsamaea ka mekhahlelo e 'meli ha u khetha node e nepahetseng ho qala:

  1. filtara
  2. Ranging

Tseo. ho ea ka pholisi e hlalositsoeng, li-node li khethiloe qalong moo ho ka khonehang ho hlahisa pod e thehiloeng ho sete dikeletso (ho kenyeletsoa ho hlahloba hore na node e na le lisebelisoa tse lekaneng ho tsamaisa pod - PodFitsResources), ebe bakeng sa e 'ngoe le e' ngoe ea li-node tsena, ho latela tse tlang pele bophelong lintlha li fanoa (ho kenyeletsoa, ​​lisebelisoa tsa mahala tsa node li na le lintlha tse ngata, li abeloa lintlha tse ngata - LeastResourceAllocation/LeastRequestedPriority/BalancedResourceAllocation) 'me pod e qalisoa sebakeng se nang le lintlha tse ngata (haeba li-node tse ngata li khotsofatsa boemo bona hang-hang, joale ho khethiloe e sa lebelloang) .

Ka nako e ts'oanang, o hloka ho utloisisa hore mohlophisi, ha a hlahloba lisebelisoa tse fumanehang tsa node, o tataisoa ke data e bolokiloeng ho etcd - i.e. bakeng sa palo ea mohloli o kopiloeng / moeli oa pod e 'ngoe le e' ngoe e sebetsang sebakeng sena, empa eseng bakeng sa tšebeliso ea sebele ea lisebelisoa. Boitsebiso bona bo ka fumanoa ho tsoa ho taelo ea taelo kubectl describe node $NODEmohlala:

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

Mona re bona li-pods tsohle li sebetsa sebakeng se itseng, hammoho le lisebelisoa tseo pod e 'ngoe le e 'ngoe e li kopang. Mona ke hore na li-logs tsa kemiso li shebahala joang ha cronjob-cron-events-1573793820-xt6q9 pod e qala (tsebiso ena e tla hlaha ho logi ea kemiso ha u beha boemo ba 10 ba ho rema lifate ka mabaka a taelo ea ho qala -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

Mona re bona hore qalong bahlophisi ba li-filters 'me ba hlahisa lethathamo la li-node tse 3 tseo ho tsona li ka qalisoang (nxs-k8s-s8, nxs-k8s-s9, nxs-k8s-s10). Ebe e bala lintlha ho latela liparamente tse 'maloa (ho kenyeletsoa BalancedResourceAllocation, LeastResourceAllocation) bakeng sa node e' ngoe le e 'ngoe ea tsena e le ho fumana node e loketseng ka ho fetisisa. Qetellong, pod e reriloe ho node e nang le palo e phahameng ka ho fetisisa ea lintlha (mona li-node tse peli li na le palo e lekanang ea lintlha 100037, kahoo ho khethoa e sa tloaelehang - nxs-k8s-s10).

fihlela qeto e: haeba node e tsamaisa li-pods tseo ho seng lithibelo tse behiloeng ho tsona, joale bakeng sa k8s (ho tloha ponong ea tšebeliso ea lisebelisoa) sena se tla lekana le joalokaha eka ho ne ho se na li-pods tse joalo ho node ena ho hang. Ka hona, haeba uena, ka maemo, u na le pod e nang le ts'ebetso ea bonyollo (mohlala, wowza) mme ha ho lithibelo tse behiloeng bakeng sa eona, joale boemo bo ka hlaha ha pod ena e hlile e ja lisebelisoa tsohle tsa node, empa bakeng sa k8s node ena. e nkoa e sa laoloe 'me e tla fuoa palo e lekanang ea lintlha ha e behiloe (hantle-ntle lintlheng tse hlahlobang mehloli e fumanehang) e le node e se nang li-pods tse sebetsang, tse qetellang li ka lebisa ho aroleng ho sa lekanang ha mojaro pakeng tsa li-node.

Ho lelekoa ha Pod

Joalo ka ha u tseba, pod e 'ngoe le e' ngoe e abeloa e 'ngoe ea lihlopha tse 3 tsa QoS:

  1. tiisitsoe - e abeloa ha setshelo se seng le se seng se ka har'a pod kopo le moeli li hlalositsoe bakeng sa memori le cpu, 'me litekanyetso tsena li tlameha ho lumellana
  2. phatloha - bonyane setshelo se le seng ka har'a pod se na le kopo le moeli, ka kopo <moeli
  3. mosebetsi o motle ka ho fetisisa - ha ho se na sets'oants'o se le seng ka har'a pod se nang le lisebelisoa tse fokolang

Ka nako e ts'oanang, ha node e e-na le khaello ea lisebelisoa (disk, memori), kubelet e qala ho beha maemo le ho leleka li-pods ho latela algorithm e itseng e nahanang ka pele ho pod le sehlopha sa eona sa QoS. Ka mohlala, haeba re bua ka RAM, joale ho itšetlehile ka sehlopha sa QoS, lintlha li fanoa ho latela molao-motheo o latelang:

  • E tiisitsoe:-998
  • Molemo ka ho Fetisisa: 1000
  • Burstable: min(max(2, 1000 - (1000 * memoryRequestBytes) / machineMemoryCapacityBytes), 999)

Tseo. ka bohlokoa bo ts'oanang, kubelet e tla qala ho leleka li-pods ka boiteko bo matla ba sehlopha sa QoS ho tloha node.

fihlela qeto e: haeba u batla ho fokotsa monyetla oa hore pod e lakatsehang e lelekoe ho node ha ho e-na le khaello ea lisebelisoa ho eona, joale hammoho le ntho e tlang pele, u boetse u lokela ho hlokomela ho beha kopo / moeli bakeng sa eona.

Mokhoa oa ho pharalla o otlolohileng oa li-pods tsa kopo (HPA)

Ha mosebetsi e le ho eketsa le ho fokotsa palo ea li-pods ka bo eona ho latela ts'ebeliso ea lisebelisoa (system - CPU/RAM kapa mosebelisi - rps), mokhatlo o joalo oa k8s joalo ka HPA (Horizontal Pod Autoscaler). Algorithm ea eona ke e latelang:

  1. Lipalo tsa hajoale tsa sesebelisoa se hlokometsoeng li lekantsoe (currentMetricValue)
  2. Litheko tse lakatsehang tsa sesebelisoa li khethoa (desiredMetricValue), eo bakeng sa lisebelisoa tsa sistimi e behiloeng ho sebelisoa kopo.
  3. Palo ea hajoale ea likopi e lekantsoe (currentReplicas)
  4. Foromo e latelang e bala palo e lakatsehang ea likopi (desiredReplicas)
    wishdReplicas = [ currentReplicas * ( currentMetricValue / wishdMetricValue )]

Tabeng ena, ho lekanya ho ke ke ha etsahala ha coefficient (currentMetricValue / wishdMetricValue) e le haufi le 1 (tabeng ena, re ka ipehela phoso e amohelehang; ka ho sa feleng ke 0.1).

Ha re shebeng hore na hpa e sebetsa joang ho sebelisa mohlala oa ts'ebeliso ea tlhahlobo ea app (e hlalosoang e le Deployment), moo ho hlokahalang ho fetola palo ea likopi ho latela ts'ebeliso ea CPU:

  • Pontšo ea ts'ebeliso

    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

    Tseo. rea bona hore kopo ea kopo e qalile ka makhetlo a mabeli, e 'ngoe le e' ngoe e na le lijana tse peli tsa nginx le nginx-exporter, bakeng sa e 'ngoe le e' ngoe e boletsoeng. likopo bakeng sa CPU.

  • Manifesto ea HPA

    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

    Tseo. Re thehile hpa e tla beha leihlo tlhahlobo ea app ea Deployment le ho lokisa palo ea li-pods ka ts'ebeliso e ipapisitse le sesupo sa cpu (re lebelletse hore pod e lokela ho ja 30% ea CPU eo e e kopang), ka palo ea likopi tse teng. bolelele ba limithara tse 2-10.

    Joale, ha re shebeng mochini oa ts'ebetso ea hpa haeba re kenya mojaro ho e 'ngoe ea li-hearths:

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

Ka kakaretso re na le tse latelang:

  • Boleng bo lakatsehang (desiredMetricValue) - ho latela litlhophiso tsa hpa, re na le 30%
  • Boleng ba hajoale (currentMetricValue) - bakeng sa lipalo, molaoli-mookameli o lekanya palohare ea boleng ba tšebeliso ea lisebelisoa ho %, ke hore. ka ho khetheha e etsa tse latelang:
    1. E amohela boleng bo felletseng ba metrics ea pod ho tsoa ho seva ea metric, i.e. 101m le 4m
    2. E bala palohare ea boleng bo felletseng, i.e. (101m + 4m) / 2 = 53m
    3. E fumana boleng bo felletseng ba tšebeliso e lakatsehang ea lisebelisoa (bakeng sa sena, likopo tsa lijana tsohle li akaretsoa) 60m + 30m = 90m
    4. E lekanya liperesente tse tloaelehileng tsa tšebeliso ea CPU e amanang le kopo ea kopo, ke hore. 53m / 90m * 100% = 59%

Hona joale re na le sohle seo re se hlokang ho tseba hore na re hloka ho fetola palo ea likopi; ho etsa sena, re bala coefficient:

ratio = 59% / 30% = 1.96

Tseo. palo ea likopi e lokela ho eketsoa ka ~ linako tse 2 le palo ea [2 * 1.96] = 4.

Qetello: Joalokaha u ka bona, e le hore mochine ona o sebetse, boemo bo hlokahalang ke boteng ba likōpo tsa lijana tsohle tse ka har'a pod e hlokometsoeng.

Mokhoa oa ho tsamaisa li-node tse otlolohileng (Cluster Autoscaler)

E le ho fokotsa tšusumetso e mpe tsamaisong nakong ea ho phahama ha mojaro, ho ba le hpa e hlophisitsoeng ha hoa lekana. Ka mohlala, ho ea ka litlhophiso ho mookameli oa molaoli oa hpa, e etsa qeto ea hore palo ea likopi e lokela ho eketsoa ka makhetlo a 2, empa li-node ha li na lisebelisoa tsa mahala tsa ho tsamaisa li-pods tse joalo (ke hore, node ha e khone ho fana ka e kopile lisebelisoa ho likopo tsa likopo) le li-pods tsena li fetohela ho Pending state.

Tabeng ena, haeba mofani a e-na le IaaS/PaaS e lumellanang (mohlala, GKE/GCE, AKS, EKS, joalo-joalo), sesebelisoa se kang Node Autoscaler. E u lumella ho beha palo e kholo le e fokolang ea li-node ka har'a sehlopha 'me u fetole palo ea hona joale ea li-node (ka ho bitsa API ea mofani oa leru ho laela / ho tlosa node) ha ho na le khaello ea lisebelisoa sehlopheng le li-pods. ha e khone ho hlophisoa (li maemong a ntseng a le teng).

Qetello: Ho khona ho etsa li-node tsa autoscale, hoa hlokahala ho beha likōpo ka har'a li-container tsa pod e le hore li-k8 li ka hlahloba ka nepo mojaro oa li-node 'me ka hona li tlalehe hore ha ho na lisebelisoa sehlopheng sa ho qala pod e latelang.

fihlela qeto e

Ho lokela ho hlokomeloa hore ho beha meeli ea lisebelisoa tsa lisebelisoa ha se ntho e hlokahalang hore kopo e sebetse ka katleho, empa ho ntse ho le molemo ho etsa joalo ka mabaka a latelang:

  1. Bakeng sa ts'ebetso e nepahetseng haholoanyane ea kemiso mabapi le ho leka-lekanya mojaro lipakeng tsa node tsa k8s
  2. Ho fokotsa monyetla oa hore ho be le ketsahalo ea "pod eviction".
  3. Bakeng sa "autoscaling" ea "application pods" (HPA) ho sebetsa
  4. Bakeng sa autoscaling e otlolohileng ea li-node (Cluster Autoscaling) bakeng sa bafani ba maru

Hape bala lingoliloeng tse ling ho blog ea rona:

Source: www.habr.com

Eketsa ka tlhaloso