Kubernetes: aisea e taua tele ai le faʻatulagaina o le puleaina o punaoa?

I le avea ai o se tulafono, o loʻo i ai pea le manaʻoga e tuʻuina atu se vaitaele tuʻufaʻatasia o punaoa i se talosaga mo lona faʻagaioiga saʻo ma mautu. Ae fa'afefea pe a fai e tele ni talosaga o lo'o fa'agaoioi i le mana e tasi? E fa'afefea ona tu'uina atu ia i latou ta'ito'atasi mea aupito maualalo e mana'omia? E fa'afefea ona fa'atapula'aina le fa'aaogaina o punaoa? E fa'afefea ona fa'asoa sa'o le uta i le va o nodes? E fa'afefea ona fa'amautinoa e galue le masini fa'alava fa'ata'atia pe a fa'atupula'ia le uta o le talosaga?

Kubernetes: aisea e taua tele ai le faʻatulagaina o le puleaina o punaoa?

E tatau ona e amata i ituaiga autu o punaoa o loʻo i ai i totonu o le polokalama - o le mea moni, o le taimi o le gaosiga ma le RAM. I k8s fa'aalia o nei ituaiga punaoa o lo'o fuaina i iunite nei:

  • PPU - i totonu
  • RAM - i paita

E le gata i lea, mo punaoa taʻitasi e mafai ona faʻatulagaina ituaiga e lua o manaʻoga - talosaga и tapulaa. Talosaga - o loʻo faʻamatalaina ai le manaʻoga maualalo mo punaʻoa maua fua o se node e faʻatautaia ai se atigipusa (ma le pod atoa), aʻo faʻatapulaʻa e faʻatulagaina se tapulaa faigata i punaoa o loʻo avanoa i le pusa.

E taua le malamalama o le faʻaaliga e le tatau ona faʻamalamalamaina maʻoti ituaiga uma e lua, ae o le amio o le a faʻapea:

  • Afai e na'o tapula'a o se puna'oa o lo'o fa'ailoa manino mai, o talosaga mo lenei puna'oa e otometi lava ona ave se tau e tutusa ma tapula'a (e mafai ona e fa'amaonia lenei mea e ala i le vala'au i fa'amatalaga fa'alapotopotoga). O na. o le mea moni, o le container o le a faʻatapulaʻaina i le aofaʻi tutusa o punaoa e manaʻomia e tamoe ai.
  • Afai na'o talosaga e fa'ailoa manino mai mo se punaoa, ona leai lea o tapula'a pito i luga o lo'o fa'atulagaina i lenei punaoa - i.e. o le atigipusa e faʻatapulaʻa naʻo punaoa o le node lava ia.

E mafai foʻi ona faʻatulagaina le puleaina o punaʻoa e le gata i le tulaga o se pusa faʻapitoa, ae faʻapea foʻi i le igoa igoa e faʻaaoga ai vaega nei:

  • Limit Range - faʻamatalaina le tulafono faʻatapulaʻa i le atigipusa / pod tulaga i ns ma e manaʻomia ina ia faʻamatalaina le faʻatapulaʻaina o tapulaʻa i luga o le atigipusa/pod, faʻapea foʻi ma le puipuia o le fausiaina o pusa manino gaʻo / pods (poʻo le isi itu), faʻatapulaʻa latou numera ma fuafua le eseesega e mafai i le tau i tapulaʻa ma talosaga
  • PunaoaQuotas — fa'amatala le tulafono fa'atapula'a i tulaga lautele mo koneteina uma i ns ma fa'aaoga, e pei o se tulafono, e fa'agata ai punaoa i totonu o si'osi'omaga (fa'aoga pe a le fa'amaoti le va'aiga o si'osi'omaga i le tulaga o le node)

O fa'ata'ita'iga nei o fa'aaliga o lo'o fa'atulagaina tapula'a a'oa'oga:

  • I le tulaga fa'apitoa koneteina:

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

    O na. i lenei tulaga, e taʻavale se atigipusa ma le nginx, e te manaʻomia le itiiti ifo i le 1G o le RAM saoloto ma le 0.2 PPU i luga o le node, ae o le tele o le koneteina e mafai ona 'ai le 0.2 CPU ma RAM avanoa uma i luga o le node.

  • I le tulaga numera ns:

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

    O na. o le aofa'i o pusa talosaga uma i le faaletonu ns e le mafai ona sili atu i le 300m mo le PPU ma le 1G mo le OP, ma le aofa'i o tapula'a uma e 700m mo le PPU ma le 2G mo le OP.

  • Tapula'a masani mo pusa i 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

    O na. i le igoa fa'aletonu mo koneteina uma, talosaga o le a seti i le 100m mo le PPU ma le 1G mo le OP, fa'atapula'a - 1 PPU ma le 2G. I le taimi lava e tasi, o loʻo faʻatulagaina foʻi se tapulaʻa i luga o tau talafeagai i talosaga / tapulaʻa mo PPU (50m <x <2) ma le RAM (500M <x <4G).

  • tapu-tulaga tapu ns:

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

    O na. mo pusa taitasi i le faaletonu ns o le ai ai se tapulaa o le 4 vCPU ma le 1G.

O lea la ou te fia ta'u atu ia te oe po o le a le lelei o le setiina o nei tapula'a e mafai ona maua mai ia i matou.

Faiga fa'apaleni uta i le va o nodes

E pei ona e iloa, o le vaega k8s e nafa ma le tufatufaina o pods i nodes, pei o Faatulagana, lea e galue e tusa ai ma se algorithm patino. O lenei algorithm e alu i ni laasaga se lua pe a filifilia le node sili ona lelei e faʻalauiloa:

  1. faamamăina
  2. Va'aiga

O na. e tusa ai ma le faʻamatalaga faʻavae, o nodes e filifilia muamua lea e mafai ai ona faʻalauiloa se pod e faʻavae i luga o se seti predicates (e aofia ai ma le siakiina pe lava punaoa o le node e faʻatautaia ai le pod - PodFitsResources), ona sosoo ai lea ma nei pona taitasi, e tusa ai ma le mea e faamuamua 'ai e tu'uina atu (e aofia ai, o le tele o puna'oa maua fua o lo'o i ai i le pona, o le tele o togi e tu'uina atu - LeastResourceAllocation/LeastRequestedPriority/BalancedResourceAllocation) ma fa'alauiloa le pod i luga o le node ma le tele o togi (pe a fa'amalieina le tele o nodes i le taimi e tasi, ona ua filifilia se mea fa'afuase'i).

I le taimi lava e tasi, e tatau ona e malamalama o le faʻatulagaina, pe a suʻesuʻeina punaoa avanoa o se node, e taʻitaʻia e faʻamaumauga o loʻo teuina i etcd - i.e. mo le aofaʻi o le manaʻoga / faʻatapulaʻa punaoa o pusa taʻitasi o loʻo taʻavale i luga o lenei node, ae le mo le faʻaaogaina o punaoa. O lenei faʻamatalaga e mafai ona maua mai le faʻatonuga o galuega kubectl describe node $NODE, mo se faataitaiga:

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

O iinei tatou te vaʻai ai i pusa uma o loʻo taʻavale i luga o se node patino, faʻapea foʻi ma punaoa o loʻo talosagaina e pod taʻitasi. Ma o le mea lea e foliga mai ai le faʻasologa o ogalaau pe a faʻalauiloa le cronjob-cron-events-1573793820-xt6q9 pod (o lenei faʻamatalaga o le a faʻaalia i le faʻasologa o faʻamaumauga pe a e setiina le 10th logging level i le amataga o le faʻatonuga o finauga -v=10):

ogalaau

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

O iinei tatou te vaʻai ai i le taimi muamua e faʻapipiʻi ai e le tagata faʻatulagaina ma fatuina se lisi o 3 nodes e mafai ona faʻalauiloa (nxs-k8s-s8, nxs-k8s-s9, nxs-k8s-s10). Ona fa'atatauina lea o togi e fa'atatau i le tele o fa'amaufa'ailoga (e aofia ai le BalancedResourceAllocation, LeastResourceAllocation) mo nei pona ta'itasi ina ia iloa ai le pona e sili ona talafeagai. Mulimuli ane, o le pod o loʻo faʻatulagaina i luga o le node ma le numera sili ona maualuga o togi (o iinei e lua nodes e tutusa le numera o togi 100037, o lea e filifilia ai se mea faʻafuaseʻi - nxs-k8s-s10).

iʻuga: afai o se node e taʻavale pods e leai ni faʻatapulaʻaina o loʻo faʻatulagaina, ona mo k8s (mai le manatu o le faʻaaogaina o punaoa) o le a tutusa lea ma le leai o ni pusa i luga o lenei node. O le mea lea, afai o oe, faʻapitoa, e iai sau paʻu ma se faiga 'ai tele (mo se faʻataʻitaʻiga, wowza) ma e leai ni tapulaʻa e faʻatulagaina mo ia, ona tulaʻi mai lea o se tulaga pe a 'ai moni lava e lenei pod punaoa uma o le node, ae mo k8s lenei node ua manatu e le'i utaina ma o le a tu'uina atu le numera tutusa o togi pe a fa'avasegaina (i vaega tonu e iloilo ai punaoa avanoa) e pei o se node e leai ni pusa galue, lea e iu ai ina mafai ona o'o atu i le tufatufaina le tutusa o le uta i le va o pona.

Le tuliesea o Pod

E pei ona e iloa, o pusa taʻitasi e tuʻuina atu se tasi o vasega 3 QoS:

  1. fa'amaonia - e tuʻuina atu pe a mo atigipusa taʻitasi i totonu o le pod se talosaga ma tapulaa e faʻamaonia mo le manatua ma le CPU, ma o nei tau e tatau ona fetaui
  2. pa'u — a itiiti ifo ma le tasi le atigipusa i totonu o le pusa o loʻo i ai se talosaga ma se tapulaʻa, faʻatasi ai ma le talosaga < tapulaʻa
  3. sili taumafaiga - pe a leai se atigipusa e tasi i totonu o le pusa e faʻatapulaʻaina punaoa

I le taimi lava e tasi, pe a oʻo i le node le le lava o punaoa (disk, memory), e amata ona faʻavasega ma faʻateʻa e le kubelet pods e tusa ai ma se algorithm patino e amanaʻia ai le faamuamua o le pod ma lana vasega QoS. Mo se faʻataʻitaʻiga, afai o loʻo tatou talanoa e uiga i le RAM, ona faʻavae lea i luga o le QoS vasega, o togi e tuʻuina atu e tusa ai ma le mataupu faavae lenei:

  • Faamaonia:-998
  • Taumafaiga Sili: 1000
  • Pa'u: min(max(2, 1000 - (1000 * memoryRequestBytes) / machineMemoryCapacityBytes), 999)

O na. fa'atasi ai ma le fa'amuamua lava e tasi, o le kubelet o le a muamua fa'ate'a ese pods ma le taumafaiga sili QoS vasega mai le node.

iʻuga: afai e te manaʻo e faʻaitiitia le ono mafai ona faʻateʻaina le pod manaʻomia mai le node i le tulaga o le le lava o punaoa i luga, ona faʻatasi ai lea ma le faʻamuamua, e tatau foi ona e tausia le setiina o le talosaga / tapulaʻa mo ia.

Mechanism mo le fa'ata'atiaga fa'ata'atiaga fa'ata'atiaga o poti talosaga (HPA)

Afai o le galuega o le faʻateleina ma faʻaititia le numera o pods e faʻatatau i le faʻaogaina o punaoa (system - CPU / RAM poʻo le tagata faʻaoga - rps), e pei o le k8s faʻalapotopotoga e pei o HPA (Fa'asa'o Pod Autoscaler). O le algorithm lea e fa'apea:

  1. O faitauga o lo'o i ai nei o le puna'oa o lo'o matauina ua fa'amoemoeina (currentMetricValue)
  2. O tau manaʻomia mo le punaoa ua fuafuaina (manaʻomiaMetricValue), lea mo punaoa faʻaoga e faʻatulagaina e faʻaaoga ai le talosaga
  3. Le numera o lo'o iai nei o fa'atusa ua fa'amauina (currentReplicas)
  4. O le fua fa'atatau o lo'o i lalo e fa'atatauina le numera mana'omia o fa'atusa (mana'omiaReplicas)
    desiredReplicas = [ currentReplicas * ( currentMetricValue / desiredMetricValue )]

I lenei tulaga, o le a le tupu le fua pe a latalata le coefficient (currentMetricValue / desiredMetricValue) i le 1 (i lenei tulaga, e mafai ona tatou setiina le mea sese faʻatagaina i tatou lava; e ala i le faaletonu o le 0.1).

Sei o tatou vaʻavaʻai pe faʻafefea ona galue le hpa i le faʻaaogaina o le faʻataʻitaʻiga o le app-test application (faʻamatalaina o le Deployment), lea e manaʻomia ai le suia o le numera o faʻataʻitaʻiga e faʻatatau i le faʻaaogaina o le CPU:

  • Fa'aaliga o talosaga

    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

    O na. matou te vaʻaia o le talosaga pod o loʻo faʻalauiloaina muamua i ni tulaga se lua, o ia mea taʻitasi o loʻo i ai ni pusa nginx e lua ma nginx-faʻatau atu, mo ia mea taʻitasi e faʻamaonia. talosaga mo PPU.

  • Fa'aaliga 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

    O na. Na matou fatuina se hpa o le a mataʻituina le Deployment app-test ma fetuunai le numera o pods ma le talosaga e faʻavae i luga o le cpu indicator (matou te faʻamoemoe o le pod e tatau ona faʻaaogaina le 30% o le PPU o loʻo talosagaina), ma le numera o kopi o loʻo i totonu. le va o le 2-10.

    Ia, seʻi o tatou vaʻavaʻai i le faiga o le faʻaogaina o le hpa pe a tatou faʻaaogaina se uta i se tasi o afi:

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

I le aotelega o loʻo i ai a matou mea nei:

  • Le tau mana'omia (desiredMetricValue) - e tusa ai ma fa'atulagaga hpa, e 30% matou.
  • Tau o le taimi nei (currentMetricValue) - mo le faʻatusatusaga, e faʻatatau e le pule-pule le tau averesi o le faʻaaogaina o punaoa i%, i.e. fa'apea ona faia mea nei:
    1. Maua fa'atauaina atoatoa o metrics pod mai le metric server, i.e. 101m ma le 4m
    2. Fa'atatauina le averesi o le tau atoa, i.e. (101m + 4m) / 2 = 53m
    3. Maua le tau atoatoa mo le faʻaaogaina o punaoa manaʻomia (mo lenei, o talosaga a pusa uma e aoteleina) 60m + 30m = 90m
    4. Fa'atatauina le averesi pasene o le fa'aaogaina o le PPU e fa'atatau i le talosaga pod, i.e. 53m / 90m * 100% = 59%

O lea ua matou maua mea uma matou te manaʻomia e fuafua ai pe matou te manaʻomia le suia o le numera o faʻataʻitaʻiga e fai ai lenei mea, matou te faʻatusatusa le coefficient:

ratio = 59% / 30% = 1.96

O na. e tatau ona fa'aopoopo le numera o fa'atusa i le ~2 taimi ma le aofa'i i le [2 * 1.96] = 4.

Faaiuga: E pei ona mafai ona e vaʻaia, ina ia mafai ona galue lenei masini, o se tulaga talafeagai o le i ai lea o talosaga mo pusa uma i totonu o le pusa mataʻituina.

Mechanism mo le fa'a'ava'ava'a fa'ata'atiaga o nodes (Cluster Autoscaler)

Ina ia faʻaitiitia le aʻafiaga leaga i luga o le faiga i le taimi o le faʻatupuina o uta, e le lava le i ai o se HPa faʻatulagaina. Mo se faʻataʻitaʻiga, e tusa ai ma faʻatulagaga i le pule o le pule o le hpa, e filifili e tatau ona faʻateleina le numera o kopi i le 2 taimi, ae o le node e leai ni punaoa saoloto e faʻatautaia ai le tele o pods (e pei o le node e le mafai ona tuʻuina atu le talosagaina punaoa i le talosaga pod) ma o nei pods e sui i le tulaga o loʻo faʻatali.

I lenei tulaga, afai o loʻo i ai i le tagata tuʻuina atu se IaaS / PaaS tutusa (mo se faʻataʻitaʻiga, GKE / GCE, AKS, EKS, ma isi), o se meafaigaluega e pei o Node Autoscaler. E mafai ai ona e setiina le maualuga ma le laʻititi o numera o nodes i le fuifui ma faʻapipiʻi otometi le numera o loʻo i ai nei (e ala i le valaʻau i le cloud provider API e faʻatonu / aveese se node) pe a leai se punaoa i le fuifui ma le pods e le mafai ona fa'atulagaina (o lo'o i le tulaga Fa'atali).

Faaiuga: Ina ia mafai ona autoscale nodes, e tatau ona seti talosaga i totonu o pusa pusa ina ia mafai e k8s ona iloilo saʻo le uta i luga o nodes ma e tusa ai ma lipoti e leai ni punaoa i le fuifui e faʻalauiloa ai le isi pod.

iʻuga

E tatau ona maitauina o le faʻatulagaina o tapulaʻa punaoa pusa e le o se manaʻoga mo le talosaga e faʻagasolo manuia, ae sili atu le faia mo mafuaaga nei:

  1. Mo le faʻagaioiga saʻo o le faʻatulagaina i tulaga o le paleni o uta i le va o k8s nodes
  2. Ina ia fa'aitiitia le fa'alavelave o se mea e tupu mai i le "pod eviction".
  3. Mo le fa'ata'ita'i fa'ata'atiaga fa'ata'atiaga o mea fa'aoga (HPA) e galue
  4. Mo le fa'ata'atiaga fa'ata'amilo o nodes (Cluster Autoscaling) mo fa'aputuga o ao

Faitau foi isi tala i la matou blog:

puna: www.habr.com

Faaopoopo i ai se faamatalaga