Cruthú cube-sceidealóir breise le sraith saincheaptha de rialacha sceidealaithe

Cruthú cube-sceidealóir breise le sraith saincheaptha de rialacha sceidealaithe

Is cuid dhílis de Kubernetes é Kube-scheduler, atá freagrach as pods a sceidealú thar nóid de réir na mbeartas sonraithe. Go minic, le linn oibriú braisle Kubernetes, ní gá dúinn smaoineamh ar na beartais a úsáidtear chun pods a sceidealú, ós rud é go bhfuil sraith polasaithe an réamhshocraithe kube-sceidealóir oiriúnach don chuid is mó de na tascanna laethúla. Mar sin féin, tá cásanna ann ina bhfuil sé tábhachtach dúinn an próiseas a bhaineann le pods a leithdháileadh a mhionchoigeartú, agus tá dhá bhealach ann chun an tasc seo a chur i gcrích:

  1. Cruthaigh cube-sceidealóir le sraith saincheaptha rialacha
  2. Scríobh do sceidealóir féin agus é a mhúineadh chun oibriú le hiarratais ar fhreastalaí API

San Airteagal seo, déanfaidh mé cur síos ar chur i bhfeidhm an chéad phointe chun an fhadhb a bhaineann le sceidealú míchothrom teallaigh a réiteach ar cheann dár dtionscadail.

Tá réamhrá gairid ar conas a oibríonn kube-sceidealóir....

Is fiú a thabhairt faoi deara go háirithe nach bhfuil kube-scheduler freagrach as pods a sceidealú go díreach - níl sé freagrach ach as a chinneadh an nód ar a gcuirfear an pod. I bhfocail eile, is é toradh obair kube-scheduler ainm an nód, a fhilleann sé ar an bhfreastalaí API le haghaidh iarratas sceidealaithe, agus sin an áit a gcríochnaíonn a chuid oibre.

Gcéad dul síos, tiomsaíonn kube-scheduler liosta de na nóid ar ar féidir an pod a sceidealú de réir na mbeartas predicate. Ansin, faigheann gach nód ón liosta seo líon áirithe pointí de réir na mbeartas tosaíochtaí. Mar thoradh air sin, roghnaítear an nód leis an líon uasta pointí. Má tá nóid ann a bhfuil an t-uasscór céanna acu, roghnaítear ceann randamach. Tá liosta agus cur síos ar na beartais tuar (scagadh) agus tosaíochtaí (scórála) le fáil i doiciméadú.

Cur síos ar an gcomhlacht fadhbach

In ainneoin an líon mór braislí Kubernetes éagsúla a bhí á gcoimeád ag Nixys, tháinig muid ar an gcéad dul síos ar fhadhb na pods sceidealaithe le déanaí, nuair a bhí gá le ceann dár dtionscadail líon mór tascanna tréimhsiúla a rith (~100 eintiteas CronJob). Chun an cur síos ar an bhfadhb a shimpliú a oiread agus is féidir, glacfaimid mar shampla microservice amháin, ina seolfar tasc cron uair sa nóiméad, ag cruthú roinnt ualach ar an LAP. Chun an tasc cron a rith, leithdháileadh trí nód le tréithe comhionanna go hiomlán (24 vCPU ar gach ceann acu).

Ag an am céanna, ní féidir a rá go beacht cé chomh fada agus a thógfaidh an CronJob é a fhorghníomhú, ós rud é go bhfuil méid na sonraí ionchuir ag athrú i gcónaí. Ar an meán, le linn gnáthoibriú an kube-scheduler, ritheann gach nód 3-4 chás poist, rud a chruthaíonn ~20-30% den ualach ar LAP gach nód:

Cruthú cube-sceidealóir breise le sraith saincheaptha de rialacha sceidealaithe

Is í an fhadhb féin ná gur stop pods tasc cron a bheith sceidealaithe uaireanta ar cheann de na trí nód. Is é sin, ag am éigin, níor beartaíodh aon phod amháin do cheann amháin de na nóid, agus ar an dá nód eile bhí 6-8 cóip den tasc ar siúl, rud a chruthaigh ~40-60% den ualach LAP:

Cruthú cube-sceidealóir breise le sraith saincheaptha de rialacha sceidealaithe

Tháinig an fhadhb chun solais arís le minicíocht iomlán randamach agus ó am go chéile comhghaolaíodh é leis an nóiméad a cuireadh leagan nua den chód i bhfeidhm.

Trí leibhéal logála an kube-sceidil a mhéadú go leibhéal 10 (-v=10), thosaíomar ag taifead cé mhéad pointe a ghnóthaigh gach nód le linn an phróisis mheastóireachta. Le linn gnáthoibríochta pleanála, d’fhéadfaí an fhaisnéis seo a leanas a fheiceáil sna logaí:

resource_allocation.go:78] cronjob-1574828880-mn7m4 -> Node03: BalancedResourceAllocation, capacity 23900 millicores 67167186944 memory bytes, total request 1387 millicores 4161694720 memory bytes, score 9
resource_allocation.go:78] cronjob-1574828880-mn7m4 -> Node02: BalancedResourceAllocation, capacity 23900 millicores 67167186944 memory bytes, total request 1347 millicores 4444810240 memory bytes, score 9
resource_allocation.go:78] cronjob-1574828880-mn7m4 -> Node03: LeastResourceAllocation, capacity 23900 millicores 67167186944 memory bytes, total request 1387 millicores 4161694720 memory bytes, score 9
resource_allocation.go:78] cronjob-1574828880-mn7m4 -> Node01: BalancedResourceAllocation, capacity 23900 millicores 67167186944 memory bytes, total request 1687 millicores 4790840320 memory bytes, score 9
resource_allocation.go:78] cronjob-1574828880-mn7m4 -> Node02: LeastResourceAllocation, capacity 23900 millicores 67167186944 memory bytes, total request 1347 millicores 4444810240 memory bytes, score 9
resource_allocation.go:78] cronjob-1574828880-mn7m4 -> Node01: LeastResourceAllocation, capacity 23900 millicores 67167186944 memory bytes, total request 1687 millicores 4790840320 memory bytes, score 9
generic_scheduler.go:726] cronjob-1574828880-mn7m4_project-stage -> Node01: NodeAffinityPriority, Score: (0)                                                                                       
generic_scheduler.go:726] cronjob-1574828880-mn7m4_project-stage -> Node02: NodeAffinityPriority, Score: (0)                                                                                       
generic_scheduler.go:726] cronjob-1574828880-mn7m4_project-stage -> Node03: NodeAffinityPriority, Score: (0)                                                                                       
interpod_affinity.go:237] cronjob-1574828880-mn7m4 -> Node01: InterPodAffinityPriority, Score: (0)                                                                                                        
generic_scheduler.go:726] cronjob-1574828880-mn7m4_project-stage -> Node01: TaintTolerationPriority, Score: (10)                                                                                   
interpod_affinity.go:237] cronjob-1574828880-mn7m4 -> Node02: InterPodAffinityPriority, Score: (0)                                                                                                        
generic_scheduler.go:726] cronjob-1574828880-mn7m4_project-stage -> Node02: TaintTolerationPriority, Score: (10)                                                                                   
selector_spreading.go:146] cronjob-1574828880-mn7m4 -> Node01: SelectorSpreadPriority, Score: (10)                                                                                                        
interpod_affinity.go:237] cronjob-1574828880-mn7m4 -> Node03: InterPodAffinityPriority, Score: (0)                                                                                                        
generic_scheduler.go:726] cronjob-1574828880-mn7m4_project-stage -> Node03: TaintTolerationPriority, Score: (10)                                                                                   
selector_spreading.go:146] cronjob-1574828880-mn7m4 -> Node02: SelectorSpreadPriority, Score: (10)                                                                                                        
selector_spreading.go:146] cronjob-1574828880-mn7m4 -> Node03: SelectorSpreadPriority, Score: (10)                                                                                                        
generic_scheduler.go:726] cronjob-1574828880-mn7m4_project-stage -> Node01: SelectorSpreadPriority, Score: (10)                                                                                    
generic_scheduler.go:726] cronjob-1574828880-mn7m4_project-stage -> Node02: SelectorSpreadPriority, Score: (10)                                                                                    
generic_scheduler.go:726] cronjob-1574828880-mn7m4_project-stage -> Node03: SelectorSpreadPriority, Score: (10)                                                                                    
generic_scheduler.go:781] Host Node01 => Score 100043                                                                                                                                                                        
generic_scheduler.go:781] Host Node02 => Score 100043                                                                                                                                                                        
generic_scheduler.go:781] Host Node03 => Score 100043

Iad siúd. Ag breith ar an eolas a fuarthas ó na logaí, scóráil gach ceann de na nóid an líon céanna pointí deiridh agus roghnaíodh ceann randamach le haghaidh pleanála. Ag am na pleanála fadhbanna, bhí cuma mar seo ar na logaí:

resource_allocation.go:78] cronjob-1574211360-bzfkr -> Node02: BalancedResourceAllocation, capacity 23900 millicores 67167186944 memory bytes, total request 1587 millicores 4581125120 memory bytes, score 9
resource_allocation.go:78] cronjob-1574211360-bzfkr -> Node03: BalancedResourceAllocation, capacity 23900 millicores 67167186944 memory bytes, total request 1087 millicores 3532549120 memory bytes, score 9
resource_allocation.go:78] cronjob-1574211360-bzfkr -> Node02: LeastResourceAllocation, capacity 23900 millicores 67167186944 memory bytes, total request 1587 millicores 4581125120 memory bytes, score 9
resource_allocation.go:78] cronjob-1574211360-bzfkr -> Node01: BalancedResourceAllocation, capacity 23900 millicores 67167186944 memory bytes, total request 987 millicores 3322833920 memory bytes, score 9
resource_allocation.go:78] cronjob-1574211360-bzfkr -> Node01: LeastResourceAllocation, capacity 23900 millicores 67167186944 memory bytes, total request 987 millicores 3322833920 memory bytes, score 9 
resource_allocation.go:78] cronjob-1574211360-bzfkr -> Node03: LeastResourceAllocation, capacity 23900 millicores 67167186944 memory bytes, total request 1087 millicores 3532549120 memory bytes, score 9
interpod_affinity.go:237] cronjob-1574211360-bzfkr -> Node03: InterPodAffinityPriority, Score: (0)                                                                                                        
interpod_affinity.go:237] cronjob-1574211360-bzfkr -> Node02: InterPodAffinityPriority, Score: (0)                                                                                                        
interpod_affinity.go:237] cronjob-1574211360-bzfkr -> Node01: InterPodAffinityPriority, Score: (0)                                                                                                        
generic_scheduler.go:726] cronjob-1574211360-bzfkr_project-stage -> Node03: TaintTolerationPriority, Score: (10)                                                                                   
selector_spreading.go:146] cronjob-1574211360-bzfkr -> Node03: SelectorSpreadPriority, Score: (10)                                                                                                        
selector_spreading.go:146] cronjob-1574211360-bzfkr -> Node02: SelectorSpreadPriority, Score: (10)                                                                                                        
generic_scheduler.go:726] cronjob-1574211360-bzfkr_project-stage -> Node02: TaintTolerationPriority, Score: (10)                                                                                   
selector_spreading.go:146] cronjob-1574211360-bzfkr -> Node01: SelectorSpreadPriority, Score: (10)                                                                                                        
generic_scheduler.go:726] cronjob-1574211360-bzfkr_project-stage -> Node03: NodeAffinityPriority, Score: (0)                                                                                       
generic_scheduler.go:726] cronjob-1574211360-bzfkr_project-stage -> Node03: SelectorSpreadPriority, Score: (10)                                                                                    
generic_scheduler.go:726] cronjob-1574211360-bzfkr_project-stage -> Node02: SelectorSpreadPriority, Score: (10)                                                                                    
generic_scheduler.go:726] cronjob-1574211360-bzfkr_project-stage -> Node01: TaintTolerationPriority, Score: (10)                                                                                   
generic_scheduler.go:726] cronjob-1574211360-bzfkr_project-stage -> Node02: NodeAffinityPriority, Score: (0)                                                                                       
generic_scheduler.go:726] cronjob-1574211360-bzfkr_project-stage -> Node01: NodeAffinityPriority, Score: (0)                                                                                       
generic_scheduler.go:726] cronjob-1574211360-bzfkr_project-stage -> Node01: SelectorSpreadPriority, Score: (10)                                                                                    
generic_scheduler.go:781] Host Node03 => Score 100041                                                                                                                                                                        
generic_scheduler.go:781] Host Node02 => Score 100041                                                                                                                                                                        
generic_scheduler.go:781] Host Node01 => Score 100038

Ón ar féidir a fheiceáil gur scóráil ceann amháin de na nóid níos lú pointí deiridh ná na cinn eile, agus mar sin ní dhearnadh pleanáil ach amháin don dá nód a fuair an t-uasscór. Mar sin, bhíomar cinnte cinnte go luíonn an fhadhb go beacht i sceidealú na pods.

Ba léir dúinn an t-algartam breise chun an fhadhb a réiteach - anailís a dhéanamh ar na logaí, tuiscint a fháil ar cén tosaíocht nár scóráil an nód pointí agus, más gá, polasaithe an sceidil réamhshocraithe a choigeartú. Mar sin féin, tá dhá dheacracht shuntasach romhainn anseo:

  1. Ag an uasleibhéal logála (10), ní léirítear na pointí a gnóthaíodh ach le haghaidh roinnt tosaíochtaí. Sa sliocht thuas de logs, is féidir leat a fheiceáil go scórálann nóid an líon céanna pointí i ngnáthsceidealú agus sceidealú fadhbanna do na tosaíochtaí go léir a léirítear sna logaí, ach tá an toradh deiridh i gcás pleanála fadhbanna difriúil. Mar sin, is féidir linn a thabhairt i gcrích, i gcás roinnt tosaíochtaí, go dtarlaíonn scóráil “taobh thiar de na cásanna”, agus níl aon bhealach againn a thuiscint cén tosaíocht nach bhfuair an nód pointí. Rinneamar cur síos mionsonraithe ar an bhfadhb seo i eisiúint Taisclann Kubernetes ar Github. Agus é seo á scríobh, fuarthas freagra ó na forbróirí go gcuirfear tacaíocht logáil isteach sna nuashonruithe Kubernetes v1.15,1.16, 1.17 agus XNUMX.
  2. Níl aon bhealach éasca le tuiscint a fháil ar cé acu sraith shonrach de bheartais a bhfuil kube-scheduler ag obair leo faoi láthair. Sea, i doiciméadú tá an liosta seo liostaithe, ach níl faisnéis ann faoi na meáchain ar leith a shanntar do gach ceann de na beartais tosaíochta. Is féidir leat na meáchain a fheiceáil nó polasaithe an kube-scheduler réamhshocraithe amháin a fheiceáil i cóid foinse.

Is fiú a thabhairt faoi deara, nuair a bhíomar in ann a thaifeadadh nach bhfuair nód pointí de réir bheartas ImageLocalityPriority, a bhronnann pointí ar nód má tá an íomhá riachtanach aige cheana féin chun an feidhmchlár a rith. Is é sin, nuair a cuireadh leagan nua den fheidhmchlár i bhfeidhm, d'éirigh leis an tasc cron a reáchtáil ar dhá nód, ag íoslódáil íomhá nua ón gclár docker chucu, agus mar sin fuair dhá nód scór deiridh níos airde i gcomparáid leis an tríú. .

Mar a scríobh mé thuas, sna logaí ní fheicimid faisnéis faoi mheastóireacht an bheartais ImageLocalityPriority, mar sin chun ár dtoimhde a sheiceáil, rinneamar an íomhá a dhumpáil leis an leagan nua den fheidhmchlár ar an tríú nód, agus ina dhiaidh sin d'oibrigh an sceidealú i gceart. . Is mar gheall go beacht ar bheartas ImageLocalityPriority a tugadh faoi deara an fhadhb sceidealaithe go hannamh; ba mhinice a bhain sé le rud éigin eile. Toisc nach bhféadfaimis dífhabhtú iomlán a dhéanamh ar gach ceann de na beartais sa liosta tosaíochtaí den kube-sceidealóir réamhshocraithe, bhí gá againn le bainistiú solúbtha ar bheartais sceidealaithe pods.

An fhadhb a fhoirmiú

Theastaigh uainn go mbeadh an réiteach ar an bhfadhb chomh sonrach agus is féidir, is é sin, ba cheart go bhfanfadh príomh-eintitis Kubernetes (anseo is é an sceidealóir réamhshocraithe kube) gan athrú. Ní raibh muid ag iarraidh fadhb a réiteach in áit amháin agus í a chruthú in áit eile. Mar sin, thángamar ar dhá rogha chun an fhadhb a réiteach, a fógraíodh sa réamhrá don alt - sceidealóir breise a chruthú nó do chuid féin a scríobh. Is é an príomhriachtanas maidir le tascanna cron a sceidealú ná an t-ualach a dháileadh go cothrom thar thrí nóid. Is féidir leis an riachtanas seo a shásamh leis na polasaithe atá ann cheana féin kube-sceidealóir, mar sin chun ár fhadhb a réiteach níl aon phointe i scríbhinn do sceidealóir féin.

Déantar cur síos ar threoracha chun ciúb-sceidealóir breise a chruthú agus a Imscaradh i doiciméadú. Ba chosúil dúinn, áfach, nár leor an t-eintiteas Imlonnaithe chun lamháltas lochtanna a chinntiú in oibriú seirbhíse ríthábhachtach den sórt sin mar kube-scheduler, agus mar sin shocraigh muid cube-sceidealóir nua a imscaradh mar Pod Statach, a ndéanfaí monatóireacht dhíreach air. le Kubelet. Mar sin, tá na ceanglais seo a leanas againn don kube-sceidealóir nua:

  1. Ní mór an tseirbhís a imscaradh mar Phod Statach ar gach cnuas-mháistir
  2. Ní mór lamháltas lochtanna a sholáthar i gcás nach bhfuil an pod gníomhach le kube-scheduler ar fáil
  3. Is í an phríomhthosaíocht agus pleanáil á déanamh ná líon na n-acmhainní atá ar fáil ar an nód (LeastRequestedPriority)

Réitigh cur chun feidhme

Is fiú a thabhairt faoi deara láithreach go ndéanfaimid an obair ar fad i Kubernetes v1.14.7, mar gheall ar Seo é an leagan a úsáideadh sa tionscadal. Cuirimis tús le forógra a scríobh dár gcúba-sceidealóir nua. Glacaimis an forléiriú réamhshocraithe (/etc/kubernetes/manifests/kube-scheduler.yaml) mar bhonn agus tabhair go dtí an fhoirm seo a leanas é:

kind: Pod
metadata:
  labels:
    component: scheduler
    tier: control-plane
  name: kube-scheduler-cron
  namespace: kube-system
spec:
      containers:
      - command:
        - /usr/local/bin/kube-scheduler
        - --address=0.0.0.0
        - --port=10151
        - --secure-port=10159
        - --config=/etc/kubernetes/scheduler-custom.conf
        - --authentication-kubeconfig=/etc/kubernetes/scheduler.conf
        - --authorization-kubeconfig=/etc/kubernetes/scheduler.conf
        - --v=2
        image: gcr.io/google-containers/kube-scheduler:v1.14.7
        imagePullPolicy: IfNotPresent
        livenessProbe:
          failureThreshold: 8
          httpGet:
            host: 127.0.0.1
            path: /healthz
            port: 10151
            scheme: HTTP
          initialDelaySeconds: 15
          timeoutSeconds: 15
        name: kube-scheduler-cron-container
        resources:
          requests:
            cpu: '0.1'
        volumeMounts:
        - mountPath: /etc/kubernetes/scheduler.conf
          name: kube-config
          readOnly: true
        - mountPath: /etc/localtime
          name: localtime
          readOnly: true
        - mountPath: /etc/kubernetes/scheduler-custom.conf
          name: scheduler-config
          readOnly: true
        - mountPath: /etc/kubernetes/scheduler-custom-policy-config.json
          name: policy-config
          readOnly: true
      hostNetwork: true
      priorityClassName: system-cluster-critical
      volumes:
      - hostPath:
          path: /etc/kubernetes/scheduler.conf
          type: FileOrCreate
        name: kube-config
      - hostPath:
          path: /etc/localtime
        name: localtime
      - hostPath:
          path: /etc/kubernetes/scheduler-custom.conf
          type: FileOrCreate
        name: scheduler-config
      - hostPath:
          path: /etc/kubernetes/scheduler-custom-policy-config.json
          type: FileOrCreate
        name: policy-config

Go hachomair faoi na príomhathruithe:

  1. Athraíodh ainm an choda agus an choimeádáin go kube-scheduler-cron
  2. Sonraigh úsáid na gcalafort 10151 agus 10159 mar a sainíodh an rogha hostNetwork: true agus ní féidir linn na poirt chéanna a úsáid leis an sceidealóir réamhshocraithe kube (10251 agus 10259)
  3. Ag baint úsáide as an --config paraiméadar, shonraigh muid an comhad cumraíochta lena ba chóir an tseirbhís a thosú
  4. Gléasadh cumraíochta an chomhaid chumraíochta (scheduler-custom.conf) agus comhad polasaí sceidealaithe (scheduler-custom-policy-config.json) ón ósta

Ná déan dearmad go mbeidh cearta cosúil leis an gceann réamhshocraithe de dhíth ar ár n-sceidealóir kube. Cuir a ról braisle in eagar:

kubectl edit clusterrole system:kube-scheduler

...
   resourceNames:
    - kube-scheduler
    - kube-scheduler-cron
...

Anois, déanaimis labhairt faoi cad ba cheart a bheith sa chomhad cumraíochta agus sa chomhad polasaí sceidealaithe:

  • Comhad cumraíochta (scheduler-custom.conf)
    Chun an chumraíocht réamhshocraithe kube-sceidealóir a fháil, ní mór duit an paraiméadar a úsáid --write-config-to de doiciméadú. Cuirfimid an chumraíocht mar thoradh air sa chomhad /etc/kubernetes/scheduler-custom.conf agus laghdófar é go dtí an fhoirm seo a leanas:

apiVersion: kubescheduler.config.k8s.io/v1alpha1
kind: KubeSchedulerConfiguration
schedulerName: kube-scheduler-cron
bindTimeoutSeconds: 600
clientConnection:
  acceptContentTypes: ""
  burst: 100
  contentType: application/vnd.kubernetes.protobuf
  kubeconfig: /etc/kubernetes/scheduler.conf
  qps: 50
disablePreemption: false
enableContentionProfiling: false
enableProfiling: false
failureDomains: kubernetes.io/hostname,failure-domain.beta.kubernetes.io/zone,failure-domain.beta.kubernetes.io/region
hardPodAffinitySymmetricWeight: 1
healthzBindAddress: 0.0.0.0:10151
leaderElection:
  leaderElect: true
  leaseDuration: 15s
  lockObjectName: kube-scheduler-cron
  lockObjectNamespace: kube-system
  renewDeadline: 10s
  resourceLock: endpoints
  retryPeriod: 2s
metricsBindAddress: 0.0.0.0:10151
percentageOfNodesToScore: 0
algorithmSource:
   policy:
     file:
       path: "/etc/kubernetes/scheduler-custom-policy-config.json"

Go hachomair faoi na príomhathruithe:

  1. Shocraigh muid sceidealóirName d'ainm ár seirbhíse kube-scheduler-cron.
  2. Sa pharaiméadar lockObjectName ní mór duit freisin ainm ár seirbhíse a shocrú agus a chinntiú go bhfuil an paraiméadar leaderElect socraithe go fíor (má tá máistir nód amháin agat, is féidir leat é a shocrú go bréagach).
  3. Sonraigh an cosán chuig an gcomhad le cur síos ar na polasaithe sceidealaithe sa pharaiméadar algorithmSource.

Is fiú breathnú níos géire ar an dara pointe, áit a ndéanaimid na paraiméadair don eochair a chur in eagar leaderElection. Chun lamháltas locht a chinntiú, chuireamar ar chumas (leaderElect) an próiseas chun ceannaire (máistir) a roghnú idir pods ár gcúba-sceidealóir ag baint úsáide as críochphointe amháin dóibh (resourceLock) darb ainm kube-scheduler-cron (lockObjectName) san ainmspás kube-system (lockObjectNamespace). Is féidir teacht ar an gcaoi a gcinntíonn Kubernetes infhaighteacht ard na bpríomhchodanna (lena n-áirítear kube-scheduler). Airteagal.

  • Comhad polasaí a sceidealú (scheduler-custom-policy-config.json)
    Mar a scríobh mé níos luaithe, is féidir linn a fháil amach cé na polasaithe sonracha a oibríonn an kube-sceidealóir réamhshocraithe leo ach amháin trí anailís a dhéanamh ar a chód. Is é sin, ní féidir linn comhad a fháil le polasaithe sceidealaithe don kube-sceidealóir réamhshocraithe ar an mbealach céanna le comhad cumraíochta. Déanaimis cur síos ar na polasaithe sceidealaithe a bhfuil suim againn iontu sa chomhad /etc/kubernetes/scheduler-custom-policy-config.json mar seo a leanas:

{
  "kind": "Policy",
  "apiVersion": "v1",
  "predicates": [
    {
      "name": "GeneralPredicates"
    }
  ],
  "priorities": [
    {
      "name": "ServiceSpreadingPriority",
      "weight": 1
    },
    {
      "name": "EqualPriority",
      "weight": 1
    },
    {
      "name": "LeastRequestedPriority",
      "weight": 1
    },
    {
      "name": "NodePreferAvoidPodsPriority",
      "weight": 10000
    },
    {
      "name": "NodeAffinityPriority",
      "weight": 1
    }
  ],
  "hardPodAffinitySymmetricWeight" : 10,
  "alwaysCheckAllPredicates" : false
}

Mar sin, tiomsaíonn kube-scheduler liosta nóid ar dtús chun pod a sceidealú de réir bheartas GeneralPredicates (lena n-áirítear sraith de pholasaithe PodFitsResources, PodFitsHostPorts, HostName, agus MatchNodeSelector). Agus ansin déantar measúnú ar gach nód de réir na sraithe de bheartais san eagar tosaíochtaí. Chun coinníollacha ár gcúraim a chomhlíonadh, mheasamar gurb é a leithéid de bheartais an réiteach is fearr. Lig dom a mheabhrú duit go bhfuil sraith de bheartais lena cur síos mionsonraithe ar fáil i doiciméadú. Chun do thasc a chur i gcrích, is féidir leat an tacar polasaithe a úsáidtear a athrú agus meáchain chuí a shannadh dóibh.

A ligean ar glaoch ar an léiriú ar an nua kube-sceidealóir, a chruthaigh muid ag tús na caibidle, kube-scheduler-custom.yaml agus é a chur ar an cosán seo a leanas /etc/kubernetes/manifests ar thrí nóid mháistir. Má dhéantar gach rud i gceart, seolfaidh Kubelet pod ar gach nód, agus i logaí ár n-sceidealóir kube nua feicfimid faisnéis gur cuireadh ár gcomhad beartais i bhfeidhm go rathúil:

Creating scheduler from configuration: {{ } [{GeneralPredicates <nil>}] [{ServiceSpreadingPriority 1 <nil>} {EqualPriority 1 <nil>} {LeastRequestedPriority 1 <nil>} {NodePreferAvoidPodsPriority 10000 <nil>} {NodeAffinityPriority 1 <nil>}] [] 10 false}
Registering predicate: GeneralPredicates
Predicate type GeneralPredicates already registered, reusing.
Registering priority: ServiceSpreadingPriority
Priority type ServiceSpreadingPriority already registered, reusing.
Registering priority: EqualPriority
Priority type EqualPriority already registered, reusing.
Registering priority: LeastRequestedPriority
Priority type LeastRequestedPriority already registered, reusing.
Registering priority: NodePreferAvoidPodsPriority
Priority type NodePreferAvoidPodsPriority already registered, reusing.
Registering priority: NodeAffinityPriority
Priority type NodeAffinityPriority already registered, reusing.
Creating scheduler with fit predicates 'map[GeneralPredicates:{}]' and priority functions 'map[EqualPriority:{} LeastRequestedPriority:{} NodeAffinityPriority:{} NodePreferAvoidPodsPriority:{} ServiceSpreadingPriority:{}]'

Anois níl le déanamh ach a chur in iúl i sonraíocht ár CronJob gur cheart go bpróiseálfadh ár n-sceidealóir kube gach iarratas ar a chuid pods a sceidealú:

...
 jobTemplate:
    spec:
      template:
        spec:
          schedulerName: kube-scheduler-cron
...

Conclúid

I ndeireadh na dála, fuaireamar kube-sceidealóir breise le sraith uathúil de bheartais sceidealaithe, a ndéanann an kubelet monatóireacht dhíreach ar a gcuid oibre. Ina theannta sin, tá toghchán ceannaire nua curtha ar bun againn idir pods ár gcúba-sceidealóir ar eagla nach mbeadh an seancheannaire ar fáil ar chúis éigin.

Leantar le feidhmchláir agus seirbhísí rialta a sceidealú tríd an kube-scheduler réamhshocraithe, agus aistríodh gach tasc cron go hiomlán chuig an gceann nua. Tá an t-ualach a chruthaíonn tascanna cron scaipthe go cothrom ar na nóid go léir anois. Ag cur san áireamh go ndéantar an chuid is mó de na tascanna cron a fhorghníomhú ar na nóid chéanna le príomh-iarratais an tionscadail, laghdaigh sé seo go mór an baol a bhaineann le pods a bhogadh mar gheall ar easpa acmhainní. Tar éis an kube-sceidealóir breise a thabhairt isteach, níor tháinig fadhbanna le sceidealú míchothrom tascanna cron chun cinn a thuilleadh.

Léigh ailt eile ar ár mblag freisin:

Foinse: will.com

Add a comment