Kubernetes: chifukwa chiyani kuli kofunikira kukhazikitsa kasamalidwe kazinthu zamakina?

Monga lamulo, nthawi zonse pamakhala kufunikira kopereka dziwe lodzipatulira lazinthu ku pempho la ntchito yake yolondola komanso yokhazikika. Koma bwanji ngati mapulogalamu angapo akugwiritsa ntchito mphamvu yomweyo? Kodi angapereke bwanji aliyense wa iwo ndi osachepera zofunika chuma? Kodi mungachepetse bwanji kugwiritsa ntchito zinthu? Momwe mungagawire katunduyo moyenera pakati pa node? Kodi mungawonetse bwanji kuti njira yolumikizira yopingasa ikugwira ntchito ngati kuchuluka kwa ntchito kukuwonjezeka?

Kubernetes: chifukwa chiyani kuli kofunikira kukhazikitsa kasamalidwe kazinthu zamakina?

Muyenera kuyamba ndi mitundu iti yazinthu zomwe zilipo mu dongosolo - izi, ndithudi, ndi nthawi ya purosesa ndi RAM. Mu k8s ikuwonetsa mitundu yazinthu izi imayesedwa m'magawo awa:

  • CPU - mu cores
  • RAM - mu mabayiti

Komanso, pazithandizo zilizonse ndizotheka kukhazikitsa mitundu iwiri ya zofunika - zopempha ΠΈ Malire. Zopempha - zimafotokoza zofunikira zochepa zazinthu zaulere za node yoyendetsa chidebe (ndi pod yonse), pamene malire amaika malire okhwima pazinthu zomwe zilipo ku chidebecho.

Ndikofunika kumvetsetsa kuti chiwonetserochi sichiyenera kutanthauzira momveka bwino mitundu yonse iwiri, koma khalidwe lidzakhala motere:

  • Ngati malire a chinthu afotokozedwa momveka bwino, ndiye kuti zopempha zachinthuchi zimangotengera mtengo wofanana ndi malire (mutha kutsimikizira izi poyimba mafotokozedwe azinthu). Iwo. m'malo mwake, chidebecho chidzangokhala ndi kuchuluka komweko komwe kumafunikira kuti muyendetse.
  • Ngati zopempha zafotokozedwa momveka bwino pazachithandizo, ndiye kuti palibe zoletsa zazikulu zomwe zimayikidwa pazithandizozi - i.e. chidebecho chimachepetsedwa ndi zinthu za node yokha.

Ndizothekanso kukonza kasamalidwe kazinthu osati pamlingo wa chidebe china, komanso pamlingo wamalo ogwiritsa ntchito izi:

  • LimitRange - limafotokoza ndondomeko yoletsa pa chidebe / pod mu ns ndipo ikufunika kuti mufotokoze malire osakhazikika pa chidebe / poto, komanso kupewa kupangidwa kwa zotengera zodziwikiratu zamafuta (kapena mosemphanitsa), kuchepetsa kuchuluka kwawo ndikuwona kusiyana komwe kungatheke pazabwino zomwe zili mumalire ndi zopempha
  • ResourceQuotas - fotokozani mfundo zoletsa zonse zomwe zili mu ns ndipo zimagwiritsidwa ntchito, monga lamulo, kugawa zinthu pakati pamadera (zothandiza ngati malo sanasinthidwe pamlingo wa node)

Izi ndi zitsanzo za zowonetsera zomwe zimayika malire azinthu:

  • Pa mulingo wa chidebe chapadera:

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

    Iwo. Pankhaniyi, kuti muthamangitse chidebe chokhala ndi nginx, mufunika osachepera 1G ya RAM yaulere ndi 0.2 CPU pa node, pomwe chidebecho chimatha kudya 0.2 CPU ndi RAM yonse yomwe ilipo pa mfundo.

  • Pa chiwerengero cha ns:

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

    Iwo. kuchuluka kwa zopempha zonse zomwe zili mu ns zosasinthika sizingadutse 300m kwa CPU ndi 1G kwa OP, ndipo kuchuluka kwa malire onse ndi 700m kwa CPU ndi 2G kwa OP.

  • Malire osasinthika a zotengera mu 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

    Iwo. m'malo osasinthika a mayina a zotengera zonse, pempho lidzakhazikitsidwa ku 100m kwa CPU ndi 1G ya OP, malire - 1 CPU ndi 2G. Nthawi yomweyo, malire amayikidwanso pazomwe zingatheke popempha / malire a CPU (50m <x <2) ndi RAM (500M <x <4G).

  • Zoletsa pamlingo wa Pod ns:

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

    Iwo. pa pod iliyonse muzosasintha ns padzakhala malire a 4 vCPU ndi 1G.

Tsopano ndikufuna ndikuuzeni ubwino wokhazikitsa ziletsozi kungatipatse.

Katundu woyezera njira pakati pa node

Monga mukudziwa, gawo la k8s limayang'anira kugawa ma pod pakati pa ma node, monga wolemba ndandanda, yomwe imagwira ntchito motsatira ndondomeko yeniyeni. Algorithm iyi imadutsa magawo awiri posankha node yoyenera kukhazikitsa:

  1. zosefera
  2. Kuyenda

Iwo. malinga ndi ndondomeko yofotokozedwayo, node zimasankhidwa poyamba zomwe zingatheke kukhazikitsa pod potengera seti maulosi (kuphatikiza kuwona ngati node ili ndi zida zokwanira zoyendetsera pod - PodFitsResources), ndiyeno pa chilichonse mwa node, malinga ndi zinthu zofunika kwambiri mfundo zimaperekedwa (kuphatikiza, zida zaulere zomwe node ili nazo, ndipamenenso amapatsidwa mfundo zambiri - LeastResourceAllocation/LeastRequestedPriority/BalancedResourceAllocation) ndipo pod imayambika pa node ndi mfundo zambiri (ngati mfundo zingapo zimakwaniritsa izi nthawi imodzi, ndiye chosankhidwa mwachisawawa) .

Panthawi imodzimodziyo, muyenera kumvetsetsa kuti ndondomekoyi, poyang'ana zomwe zilipo za node, imatsogoleredwa ndi deta yomwe imasungidwa etcd - i.e. pa kuchuluka kwa zomwe mwapemphedwa / malire a pod iliyonse yomwe ikuyenda pa node iyi, koma osati pakugwiritsa ntchito zinthu zenizeni. Chidziwitso ichi chikhoza kupezeka kuchokera ku lamulo lotulutsa kubectl describe node $NODE, mwachitsanzo:

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

Apa tikuwona ma pod onse akuyenda pa node inayake, komanso zinthu zomwe pod iliyonse imapempha. Ndipo izi ndi zomwe zipika za scheduler zimawoneka ngati cronjob-cron-events-1573793820-xt6q9 pod ikhazikitsidwa (chidziwitsochi chidzawonekera mu chipika cholembera mukakhazikitsa mulingo wa 10 wodula mitengo poyambira -v=10):

chipika

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

Apa tikuwona kuti poyambira zosefera za scheduler ndikupanga mndandanda wa node 3 zomwe zitha kukhazikitsidwa (nxs-k8s-s8, nxs-k8s-s9, nxs-k8s-s10). Kenako imawerengera zigoli potengera magawo angapo (kuphatikiza BalancedResourceAllocation, LeastResourceAllocation) pa iliyonse ya nodeyi kuti mudziwe malo oyenera kwambiri. Pamapeto pake, pod imakonzedwa pa mfundo ndi chiwerengero chapamwamba kwambiri (pano mfundo ziwiri nthawi imodzi zimakhala ndi chiwerengero chofanana cha 100037, kotero kuti chisawawa chimasankhidwa - nxs-k8s-s10).

Pomaliza: ngati node ikuyendetsa ma pods omwe palibe zoletsa zomwe zimayikidwa, ndiye kuti k8s (kuchokera kumalo ogwiritsira ntchito zothandizira) izi zidzakhala zofanana ndi ngati panalibe ma pods oterowo pa node iyi nkomwe. Chifukwa chake, ngati inu, mokhazikika, muli ndi poto yosusuka (mwachitsanzo, wowza) ndipo palibe zoletsa zomwe zakhazikitsidwa, ndiye kuti zinthu zitha kuchitika pamene pod iyi idadyadi zida zonse za node, koma kwa k8s mfundo iyi. imaonedwa ngati yotsitsidwa ndipo idzapatsidwa chiwerengero chofanana cha mfundo pamene kusanja (momwemo mu mfundo zowunika zinthu zomwe zilipo) monga mfundo yomwe ilibe ma pods ogwira ntchito, zomwe pamapeto pake zingayambitse kugawa kosagwirizana kwa katundu pakati pa mfundo.

Kuthamangitsidwa kwa Pod

Monga mukudziwa, pod iliyonse imapatsidwa imodzi mwamagulu atatu a QoS:

  1. wotsimikizika - amapatsidwa pamene chidebe chilichonse mu pod pempho ndi malire amatchulidwa kukumbukira ndi cpu, ndipo izi ziyenera kufanana
  2. chophulika - osachepera chidebe chimodzi mu pod ali ndi pempho ndi malire, ndi pempho <malire
  3. khama kwambiri - pomwe palibe chidebe chimodzi chomwe chili m'bokosi chomwe chili ndi malire

Nthawi yomweyo, node ikakumana ndi kusowa kwazinthu (disk, memory), kubelet imayamba kuyika ndikutulutsa ma pods molingana ndi algorithm inayake yomwe imaganizira zoyambira za pod ndi gulu lake la QoS. Mwachitsanzo, ngati tikulankhula za RAM, ndiye kutengera gulu la QoS, mfundo zimaperekedwa molingana ndi mfundo iyi:

  • Kutsimikiziridwa-998
  • BestEffort: 1000
  • Kuphulika: min(max(2, 1000 - (1000 * memoryRequestBytes) / machineMemoryCapacityBytes), 999)

Iwo. ndikuyika patsogolo komweko, kubelet iyamba kutulutsa ma pod ndi khama labwino kwambiri la QoS pamfundo.

Pomaliza: ngati mukufuna kuchepetsa mwayi wa pod wofunidwa kuthamangitsidwa kuchokera ku node ngati kusowa kwazinthu pa izo, ndiye pamodzi ndi chofunika kwambiri, muyeneranso kusamalira kukhazikitsa pempho / malire ake.

Njira yopangira ma horizontal autoscaling of application pods (HPA)

Ntchito ikangowonjezera ndikuchepetsa kuchuluka kwa ma pod kutengera kugwiritsa ntchito zinthu (dongosolo - CPU/RAM kapena wosuta - rps), gulu la k8s monga HPA (Horizontal Pod Autoscaler). Algorithm yake ndi iyi:

  1. Kuwerenga kwaposachedwa kwazomwe zawonedwa kumatsimikiziridwa (currentMetricValue)
  2. Zomwe zimafunidwa pazachuma zimatsimikiziridwa (desiredMetricValue), zomwe pamakina azinthu zimayikidwa pogwiritsa ntchito pempho.
  3. Nambala yamakono ya zofananira zatsimikiziridwa (currentReplicas)
  4. Njira yotsatirayi imawerengera nambala yofunidwa ya replicas (desiredReplicas)
    wishdReplicas = [ currentReplicas * ( currentMetricValue / desiredMetricValue )]

Pamenepa, kukulitsa sikungachitike pamene coefficient (currentMetricValue / desiredMetricValue) ili pafupi ndi 1 (panthawiyi, tikhoza kukhazikitsa tokha cholakwika chovomerezeka; mwachisawawa ndi 0.1).

Tiyeni tiwone momwe hpa imagwirira ntchito pogwiritsa ntchito chitsanzo cha pulogalamu yoyeserera (yotchedwa Deployment), komwe kuli kofunikira kusintha kuchuluka kwa ma replicas kutengera kugwiritsa ntchito CPU:

  • Chiwonetsero cha ntchito

    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

    Iwo. tikuwona kuti poda yogwiritsira ntchito imayambitsidwa muzochitika ziwiri, iliyonse yomwe ili ndi zotengera ziwiri za nginx ndi nginx-exporter, zomwe zimatchulidwa. zopempha za 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

    Iwo. Tidapanga hpa yomwe imayang'anira kuyesa kwa pulogalamu ya Deployment ndikusintha kuchuluka kwa ma pod ndi pulogalamuyo kutengera chizindikiro cha cpu (tikuyembekeza kuti pod iyenera kudya 30% ya CPU yomwe ikufuna), ndi kuchuluka kwa zofananira zomwe zilimo. kutalika kwa 2-10.

    Tsopano, tiyeni tiwone momwe hpa imagwirira ntchito ngati tiyika katundu pa imodzi mwamalo:

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

Pazonse tili ndi izi:

  • Mtengo wofunidwa (desiredMetricValue) - malinga ndi makonda a hpa, tili ndi 30%
  • Mtengo wapano (currentMetricValue) - powerengera, woyang'anira-woyang'anira amawerengera kuchuluka kwa zinthu zomwe zimagwiritsidwa ntchito mu%, i.e. conditionally amachita izi:
    1. Imalandila mayendedwe otsimikizika a pod metrics kuchokera pa seva ya metric, i.e. 101m ndi 4m
    2. Amawerengera mtengo wokwanira, i.e. (101m + 4m) / 2 = 53m
    3. Imapeza mtengo wokwanira pazogwiritsa ntchito zomwe mukufuna (chifukwa cha izi, zopempha za zotengera zonse zikufotokozedwa mwachidule) 60m + 30m = 90m
    4. Kuwerengera kuchuluka kwa ma CPU omwe amadya poyerekeza ndi pempho la pempho, i.e. 53m / 90m * 100% = 59%

Tsopano tili ndi zonse zomwe tingafune kuti tiwone ngati tikufunika kusintha kuchuluka kwa zolemba; kuti tichite izi, timawerengera coefficient:

ratio = 59% / 30% = 1.96

Iwo. chiwerengero cha zofananira chiyenera kuchulukitsidwa ndi ~ 2 nthawi ndi kuchuluka kwa [2 * 1.96] = 4.

Kutsiliza: Monga mukuonera, kuti makinawa agwire ntchito, chofunikira ndi kupezeka kwa zopempha zonse zomwe zili mu pod.

Njira yolumikizira ma node opingasa (Cluster Autoscaler)

Kuti muchepetse zovuta zoyipa pamakina panthawi yonyamula katundu, kukhala ndi hpa yokonzedwa sikokwanira. Mwachitsanzo, malinga ndi makonda omwe ali mu hpa controller manager, amasankha kuti chiwerengero cha replicas chiyenera kuchulukitsidwa ndi 2 nthawi, koma ma node alibe zipangizo zaulere zogwiritsira ntchito ma pod angapo (ie, node sangathe kupereka adapempha zothandizira pazopempha) ndi ma pods awa amasinthira ku Pending state.

Pankhaniyi, ngati woperekayo ali ndi IaaS/PaaS yofananira (mwachitsanzo, GKE/GCE, AKS, EKS, etc.), chida ngati Node Autoscaler. Zimakulolani kuti muyike chiwerengero chokwanira komanso chocheperako cha node mumagulu ndikusintha mosavuta chiwerengero cha node (poyitana API wothandizira mtambo kuti ayitanitsa / kuchotsa node) pamene pali kusowa kwazinthu mumagulu ndi ma pod. sizingakonzedwe (zili mu Pending state).

Kutsiliza: Kuti muthe kuwongolera ma node, ndikofunikira kukhazikitsa zopempha muzotengera zapodo kuti ma k8 athe kuwunika moyenera katundu pa node ndipo potero anene kuti palibe zothandizira pagulu kuti muyambitse pod yotsatira.

Pomaliza

Zindikirani kuti kukhazikitsa malire a chidebe sikofunikira kuti pulogalamuyo iziyenda bwino, komabe ndibwino kutero pazifukwa izi:

  1. Kuti mugwiritse ntchito molondola kwambiri za scheduler potengera kusanja katundu pakati pa ma k8s node
  2. Kuchepetsa mwayi wa "kuthamangitsidwa kwa pod" kuchitika
  3. Kuti ma horizontal autoscaling of application pods (HPA) agwire ntchito
  4. Kwa opingasa autoscaling ya node (Cluster Autoscaling) kwa opereka mitambo

Werenganinso zolemba zina pa blog yathu:

Source: www.habr.com

Kuwonjezera ndemanga