Kubernetes: carson a tha e cho cudromach riaghladh ghoireasan siostam a rèiteachadh?

Mar riaghailt, tha feum an-còmhnaidh air cruinneachadh sònraichte de ghoireasan a thoirt do thagradh airson a obrachadh ceart agus seasmhach. Ach dè ma tha grunn thagraidhean a’ ruith air an aon chumhachd? Ciamar a bheir thu na goireasan as lugha a tha riatanach do gach fear dhiubh? Ciamar as urrainn dhut caitheamh stòrais a chuingealachadh? Ciamar a roinneas tu an luchd gu ceart eadar nodan? Ciamar a nì thu cinnteach gu bheil an uidheamachd sgèileachaidh chòmhnard ag obair ma dh’ èiricheas an luchd tagraidh?

Kubernetes: carson a tha e cho cudromach riaghladh ghoireasan siostam a rèiteachadh?

Feumaidh tu tòiseachadh leis na prìomh sheòrsaichean de ghoireasan a tha san t-siostam - is e seo, gu dearbh, ùine pròiseasar agus RAM. Ann an taisbeanadh k8s tha na seòrsaichean ghoireasan sin air an tomhas anns na h-aonadan a leanas:

  • CPU - ann an cores
  • RAM - ann am bytes

A bharrachd air an sin, airson gach goireas tha e comasach dà sheòrsa riatanas a shuidheachadh - iarrtasan и crìochan. Iarrtasan - a 'toirt cunntas air na riatanasan as ìsle airson goireasan an-asgaidh de nód airson soitheach a ruith (agus pod gu h-iomlan), fhad' sa tha crìochan a 'suidheachadh crìoch cruaidh air na goireasan a tha rim faotainn don ghobhar.

Tha e cudromach tuigsinn nach fheum am follaiseach an dà sheòrsa a mhìneachadh gu soilleir, ach bidh an giùlan mar a leanas:

  • Mura h-eil ach crìochan stòrais air an sònrachadh gu soilleir, bidh iarrtasan airson a’ ghoireas seo gu fèin-ghluasadach a’ gabhail luach co-ionann ri crìochan (faodaidh tu seo a dhearbhadh le bhith a’ gairm cunntas air buidhnean). An fheadhainn sin. gu dearbh, bidh an soitheach air a chuingealachadh ris an aon uiread de ghoireasan a dh’ fheumas e airson a ruith.
  • Mura h-eil ach iarrtasan air an sònrachadh gu soilleir airson goireas, chan eil bacadh àrd sam bith air a’ ghoireas seo - i.e. tha an soitheach air a chuingealachadh a-mhàin le goireasan an nód fhèin.

Tha e comasach cuideachd riaghladh ghoireasan a rèiteachadh chan ann a-mhàin aig ìre soitheach sònraichte, ach cuideachd aig ìre namespace a’ cleachdadh na buidhnean a leanas:

  • Raon Crìochan - a’ toirt cunntas air a’ phoileasaidh cuibhreachaidh aig ìre container/pod ann an ns agus a tha a dhìth gus cunntas a thoirt air na crìochan bunaiteach air a’ ghobhar/pod, a bharrachd air casg a chuir air cruthachadh shoithichean/pods a tha follaiseach reamhar (no a chaochladh), cuingealaich an àireamh aca agus a 'dearbhadh an eadar-dhealachadh a dh'fhaodadh a bhith anns na luachan ann an crìochan agus iarrtasan
  • Quota Stòrais - thoir cunntas air a’ phoileasaidh cuibhreachaidh san fharsaingeachd airson a h-uile inneal ann an ns agus tha e air a chleachdadh, mar riaghailt, gus goireasan a chuingealachadh am measg àrainneachdan (feumail nuair nach eil àrainneachdan air an comharrachadh gu teann aig ìre nód)

Tha na leanas nan eisimpleirean de thaisbeanaidhean a shuidhich crìochan stòrais:

  • Aig ìre sònraichte container:

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

    An fheadhainn sin. anns a 'chùis seo, gus soitheach a ruith le nginx, bidh feum agad air co-dhiù 1G de RAM an-asgaidh agus 0.2 CPU air an nód, agus aig a' char as motha faodaidh an soitheach ithe 0.2 CPU agus a h-uile RAM a tha ri fhaighinn air an nód.

  • Aig ìre an t-slànaighear ns:

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

    An fheadhainn sin. chan fhaod suim a h-uile inneal-iarrtais anns na ns bunaiteach a bhith nas àirde na 300m airson an CPU agus 1G airson an OP, agus is e suim na crìche gu lèir 700m airson an CPU agus 2G airson an OP.

  • Crìochan bunaiteach airson soithichean ann an 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

    An fheadhainn sin. anns an ainm-àite bunaiteach airson a h-uile soitheach, thèid iarrtas a shuidheachadh gu 100m airson CPU agus 1G airson OP, crìoch - 1 CPU agus 2G. Aig an aon àm, tha crìoch cuideachd air a shuidheachadh air na luachan a dh’ fhaodadh a bhith ann an iarrtas / crìoch airson CPU (50m < x < 2) agus RAM (500M < x < 4G).

  • Cuingeachaidhean ìre pod ns:

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

    An fheadhainn sin. airson gach pod anns na ns bunaiteach bidh crìoch de 4 vCPU agus 1G.

A-nis bu mhath leam innse dhut dè na buannachdan a bheir suidheachadh nan cuingeadan sin dhuinn.

Uidheam cothromachaidh luchdan eadar nodan

Mar a tha fios agad, tha am pàirt k8s an urra ri sgaoileadh pods am measg nodan, leithid clàr-ama, a tha ag obair a rèir algairim sònraichte. Bidh an algorithm seo a’ dol tro dhà ìre nuair a thaghas tu an nód as fheàrr airson a chuir air bhog:

  1. criathradh
  2. Rangachadh

An fheadhainn sin. a rèir a’ phoileasaidh a chaidh a mhìneachadh, thèid nodan a thaghadh an toiseach far am faodar pod a chuir air bhog stèidhichte air seata ro-aithris (a’ toirt a-steach sgrùdadh a bheil goireasan gu leòr aig an nód gus am pod a ruith - PodFitsResources), agus an uairsin airson gach aon de na nodan sin, a rèir prìomhachasan tha puingean air an toirt seachad (a’ toirt a-steach, mar as motha de ghoireasan an-asgaidh a tha aig nód, is ann as motha de phuingean a thèid a shònrachadh - LeastResourceAllocation/Priority RequestedPriority/CothromaichteResourceAllocation) agus thèid am pod a chuir air bhog air an nód leis na puingean as motha (ma tha grunn nodan a’ sàsachadh a’ chumha seo aig an aon àm, an uairsin thèid fear air thuaiream a thaghadh).

Aig an aon àm, feumaidh tu tuigsinn gu bheil an clàr-ama, nuair a bhios tu a ’measadh nan goireasan a tha rim faighinn aig nód, air a stiùireadh leis an dàta a tha air a stòradh ann am msaa - i.e. airson na tha de ghoireas iarraidh/crìochnachaidh de gach pod a’ ruith air an nód seo, ach chan ann airson a’ chaitheamh stòrais fhèin. Faodar am fiosrachadh seo fhaighinn bhon toradh àithne kubectl describe node $NODEmar eisimpleir:

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

An seo chì sinn na pods gu lèir a’ ruith air nód sònraichte, a bharrachd air na goireasan a dh’ iarras gach pod. Agus seo cò ris a bhios na logaichean clàr-ama coltach nuair a thèid am pod cronjob-cron-events-1573793820-xt6q9 a chuir air bhog (nochdaidh am fiosrachadh seo ann an loga a’ chlàr-ama nuair a shuidhicheas tu an ìre logaidh 10th anns na h-argamaidean àithne tòiseachaidh -v = 10):

loga

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

An seo chì sinn gu bheil an clàr-ama an toiseach a’ sìoladh agus a’ gineadh liosta de 3 nodan air am faodar a chuir air bhog (nxs-k8s-s8, nxs-k8s-s9, nxs-k8s-s10). An uairsin bidh e a’ tomhas sgòran stèidhichte air grunn pharaimearan (a’ gabhail a-steach BalancedResourceAllocation, LeastResourceAllocation) airson gach aon de na nodan sin gus an nód as freagarraiche a dhearbhadh. Aig a 'cheann thall, tha am pod air a chlàradh air an nód leis an àireamh as àirde de phuingean (an seo tha an aon àireamh de phuingean 100037 aig dà nod aig an aon àm, agus mar sin tha fear air thuaiream air a thaghadh - nxs-k8s-s10).

co-dhùnadh: ma tha nód a’ ruith pods far nach eil bacadh sam bith air a shuidheachadh, an uairsin airson k8s (bho shealladh caitheamh ghoireasan) bidh seo co-ionann ri mar nach biodh pods mar sin air an nód seo idir. Mar sin, ma tha pod agad, le cumhachan, le pròiseas gluttonous (mar eisimpleir, wowza) agus nach eil bacadh sam bith air a shon, faodaidh suidheachadh èirigh nuair a dh’ ith am pod seo goireasan an nód gu lèir, ach airson k8s an nód seo Thathas den bheachd gu bheil e gun luchdachadh agus gheibh e an aon àireamh de phuingean nuair a thèid a rangachadh (gu dìreach ann am puingean a’ measadh nan goireasan a tha rim faighinn) mar nód aig nach eil pods obrach, a dh’ fhaodadh leantainn gu cuairteachadh neo-chothromach den luchd eadar nodan.

Fuadach Pod

Mar a tha fios agad, thèid aon de 3 clasaichean QoS a thoirt do gach pod:

  1. barantaichte - air a shònrachadh nuair a tha iarrtas agus crìoch air a shònrachadh airson gach soitheach sa pod airson cuimhne agus cpu, agus feumaidh na luachan sin a bhith co-ionnan
  2. burstach - tha iarrtas agus crìoch aig co-dhiù aon shoitheach sa pod, le iarrtas < crìoch
  3. oidhirp as fheàrr - nuair nach eil aon shoitheach anns a’ phoit cuibhrichte le goireasan

Aig an aon àm, nuair a dh'fhiosraicheas nód dìth ghoireasan (diosg, cuimhne), bidh kubelet a 'tòiseachadh a' rangachadh agus a 'fuadach pods a rèir algorithm sònraichte a bheir aire do phrìomhachas a' pod agus a chlas QoS. Mar eisimpleir, ma tha sinn a 'bruidhinn mu dheidhinn RAM, an uairsin stèidhichte air a' chlas QoS, thèid puingean a thoirt seachad a rèir a 'phrionnsapail a leanas:

  • Air a dhearbhadh:-998
  • An oidhirp as fheàrr: 1000
  • Burstable: min (max (2, 1000 - (1000 * memoryRequestBytes)) / innealMemoryCapacityBytes), 999)

An fheadhainn sin. leis an aon phrìomhachas, cuiridh an kubelet pods fhuadach leis an oidhirp as fheàrr clas QoS bhon nód.

co-dhùnadh: ma tha thu airson lùghdachadh a dhèanamh air an coltas gun tèid am pod a tha thu ag iarraidh fhuadach bhon nód ma tha gainnead ghoireasan ann, an uairsin còmhla ris a’ phrìomhachas, feumaidh tu cuideachd aire a thoirt don iarrtas / crìoch air a shon a shuidheachadh.

Uidheam airson fèin-sgèileadh còmhnard air pods tagraidh (HPA)

Nuair a tha an obair gu bhith ag àrdachadh agus a’ lughdachadh gu fèin-ghluasadach an àireamh de pods a rèir cleachdadh ghoireasan (siostam - CPU / RAM no neach-cleachdaidh - rps), leithid eintiteas k8s mar HPA (Còmhnard Pod Autoscaler). Tha an algairim mar a leanas:

  1. Tha na leughaidhean a th’ ann an-dràsta den ghoireas a chaidh fhaicinn air an co-dhùnadh (currentMetricValue)
  2. Tha na luachan a tha a dhìth airson a’ ghoireas air an co-dhùnadh (deiredMetricValue), a tha airson goireasan siostam air an suidheachadh a’ cleachdadh iarrtas
  3. Thathas a’ dearbhadh an àireamh de mhac-samhail a th’ ann an-dràsta (Maceamhail gnàthach)
  4. Tha an fhoirmle a leanas a’ tomhas an àireamh de mhac-samhail a tha thu ag iarraidh (DeiredReplicas)
    DesireReplicas = [ currentReplicas * ( currentMetricValue / DesireMetricValue )]

Anns a 'chùis seo, cha tachair sgèileadh nuair a tha an co-èifeachd (gnàthachMetricValue / DesireMetricValue) faisg air 1 (anns a' chùis seo, is urrainn dhuinn a 'mhearachd ceadaichte a shuidheachadh sinn fhìn; mar as trice is e 0.1 a th' ann).

Bheir sinn sùil air mar a tha hpa ag obair a’ cleachdadh eisimpleir an tagraidh app-test (air a mhìneachadh mar Cleachdadh), far a bheil e riatanach an àireamh de mhac-samhail atharrachadh a rèir caitheamh CPU:

  • Iarrtas follaiseach

    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

    An fheadhainn sin. chì sinn gu bheil am pod tagraidh air a chuir air bhog an toiseach ann an dà shuidheachadh, agus anns gach fear tha dà ghobhar nginx agus nginx-exporter, airson gach fear dhiubh iarrtasan airson CPU.

  • Manifesto 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

    An fheadhainn sin. Chruthaich sinn hpa a nì sùil air an deuchainn app Cleachdadh agus atharraichidh sinn an àireamh de pods leis an tagradh stèidhichte air a’ chomharra cpu (tha sinn an dùil gum bu chòir don pod ithe 30% den CPU a tha e ag iarraidh), leis an àireamh de mhac-samhail a bhith ann. an raon de 2-10.

    A-nis, leig dhuinn sùil a thoirt air uidheamachd gnìomhachd hpa ma chuireas sinn luchd air aon de na cagailt:

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

Gu h-iomlan tha na leanas againn:

  • An luach a tha thu ag iarraidh (Luach Metric ion-mhiannaichte) - a rèir nan roghainnean hpa, tha 30% againn
  • Luach gnàthach (gnàthachMetricValue) - airson àireamhachadh, bidh manaidsear-smachd a’ tomhas luach cuibheasach caitheamh ghoireasan ann an %, i.e. le cumhachan a’ dèanamh na leanas:
    1. A’ faighinn luachan iomlan de pod metrics bhon t-seirbheisiche meatrach, i.e. 101m agus 4m
    2. Obraich a-mach an luach iomlan cuibheasach, i.e. (101m + 4m) / 2 = 53m
    3. A’ faighinn an luach iomlan airson an caitheamh stòrais a tha thu ag iarraidh (airson seo, tha iarrtasan nan soithichean uile air an geàrr-chunntas) 60m + 30m = 90m
    4. Obraich a-mach an àireamh sa cheud cuibheasach de chaitheamh CPU an coimeas ris a’ phod iarrtas, i.e. 53m / 90m * 100% = 59%

A-nis tha a h-uile dad a dh ’fheumas sinn gus faighinn a-mach am feum sinn an àireamh de mhac-samhail atharrachadh; gus seo a dhèanamh, bidh sinn a’ tomhas a ’cho-èifeachd:

ratio = 59% / 30% = 1.96

An fheadhainn sin. bu chòir an àireamh de mhac-samhail àrdachadh ~2 uair agus an àireamh gu [2 * 1.96] = 4.

Co-dhùnadh: Mar a chì thu, gus an obraich an uidheamachd seo, is e suidheachadh riatanach a th ’ann gu bheil iarrtasan airson a h-uile inneal anns a’ pod a chaidh fhaicinn.

Uidheam airson fèin-sgèileadh còmhnard de nodan (Cluster Autoscaler)

Gus an droch bhuaidh air an t-siostam a neodachadh aig àm àrdachadh luchd, chan eil hpa rèiteachaidh gu leòr. Mar eisimpleir, a rèir nan roghainnean ann am manaidsear smachd hpa, tha e a’ co-dhùnadh gum feumar an àireamh de mhac-samhail a mheudachadh 2 uair, ach chan eil goireasan an-asgaidh aig na nodan gus an leithid de pods a ruith (ie chan urrainn don nód an t-seirbheis a thoirt seachad. goireasan iarraidh don pod iarrtasan) agus bidh na pods sin ag atharrachadh gu staid a tha ri thighinn.

Anns a ’chùis seo, ma tha IaaS / PaaS co-fhreagarrach aig an t-solaraiche (mar eisimpleir, GKE / GCE, AKS, EKS, msaa), inneal mar Inneal-sgàilean node. Leigidh e leat an àireamh as motha agus as ìsle de nodan a shuidheachadh anns a’ bhuidheann agus atharrachadh gu fèin-ghluasadach air an àireamh de nodan a th’ ann an-dràsta (le bhith a’ gairm API an t-solaraiche sgòthan gus nód òrdachadh / a thoirt air falbh) nuair a tha gainnead ghoireasan anns a’ bhuidheann agus na pods. chan urrainnear a chlàradh (tha iad ann an staid ri thighinn).

Co-dhùnadh: Gus a bhith comasach air nodan a dhèanamh fèin-ghluasadach, feumar iarrtasan a shuidheachadh anns na soithichean pod gus an urrainn dha k8n measadh ceart a dhèanamh air an luchd air na nodan agus mar sin aithris nach eil goireasan anns a’ bhuidheann gus an ath pod a chuir air bhog.

co-dhùnadh

Bu chòir a thoirt fa-near nach eil suidheachadh crìochan ghoireasan container riatanach airson an tagradh a ruith gu soirbheachail, ach tha e fhathast nas fheàrr sin a dhèanamh airson na h-adhbharan a leanas:

  1. Airson obrachadh nas cruinne den chlàr-ama a thaobh cothromachadh luchdan eadar nodan k8s
  2. Gus lùghdachadh a dhèanamh air an coltas gun tachair tachartas “fuadachadh pod”.
  3. Airson fèin-sgèileadh còmhnard de pods tagraidh (HPA) a bhith ag obair
  4. Airson fèin-sgèileadh còmhnard de nodan (Cluster Autoscaling) airson solaraichean sgòthan

Leugh cuideachd artaigilean eile air ar blog:

Source: www.habr.com

Cuir beachd ann