Ṣiṣẹda afikun kube-scheduler pẹlu aṣa aṣa ti awọn ofin ṣiṣe eto

Ṣiṣẹda afikun kube-scheduler pẹlu aṣa aṣa ti awọn ofin ṣiṣe eto

Kube-scheduler jẹ ẹya paati Kubernetes, eyiti o jẹ iduro fun ṣiṣe eto awọn adarọ-ese kọja awọn apa ni ibarẹ pẹlu awọn eto imulo kan pato. Nigbagbogbo, lakoko iṣẹ iṣupọ Kubernetes, a ko ni lati ronu nipa iru awọn eto imulo ti a lo lati ṣeto awọn adarọ-ese, nitori ṣeto awọn eto imulo ti kube-scheduler aiyipada dara fun awọn iṣẹ ṣiṣe lojoojumọ pupọ julọ. Sibẹsibẹ, awọn ipo wa nigbati o ṣe pataki fun wa lati ṣe atunṣe ilana ti pinpin awọn adarọ-ese, ati pe awọn ọna meji lo wa lati ṣe iṣẹ-ṣiṣe yii:

  1. Ṣẹda kube-scheduler pẹlu aṣa ṣeto ti awọn ofin
  2. Kọ eto iṣeto tirẹ ki o kọ ọ lati ṣiṣẹ pẹlu awọn ibeere olupin API

Ninu àpilẹkọ yii, Emi yoo ṣe apejuwe imuse ti aaye akọkọ lati yanju iṣoro ti iṣeto aiṣedeede ti awọn hearths lori ọkan ninu awọn iṣẹ akanṣe wa.

A kukuru ifihan si bi kube-scheduler ṣiṣẹ

O tọ lati ṣe akiyesi ni pataki ni otitọ pe kube-scheduler kii ṣe iduro fun ṣiṣe eto awọn adarọ-ese taara - o jẹ iduro nikan fun ṣiṣe ipinnu ipade lori eyiti o gbe podu naa. Ni awọn ọrọ miiran, abajade ti iṣẹ-ṣiṣe kube-scheduler jẹ orukọ ipade, eyiti o pada si olupin API fun ibere iṣeto, ati pe ni ibi ti iṣẹ rẹ pari.

Ni akọkọ, kube-scheduler ṣe akopọ atokọ ti awọn apa lori eyiti o le ṣeto podu ni ibamu pẹlu awọn ilana asọtẹlẹ. Nigbamii ti, ipade kọọkan lati inu atokọ yii gba nọmba kan ti awọn aaye ni ibamu pẹlu awọn eto imulo pataki. Bi abajade, ipade pẹlu nọmba ti o pọju ti awọn aaye ti yan. Ti o ba ti nibẹ ni o wa apa ti o ni kanna o pọju Dimegilio, a ID ti yan. Atokọ ati ijuwe ti awọn asọtẹlẹ (sisẹ) ati awọn ilana pataki (igbelewọn) ni a le rii ninu iwe.

Apejuwe ti ara isoro

Pelu nọmba nla ti awọn iṣupọ Kubernetes oriṣiriṣi ti a tọju ni Nixys, a kọkọ pade iṣoro ti iṣeto awọn adarọ-ese laipẹ, nigbati ọkan ninu awọn iṣẹ akanṣe wa nilo lati ṣiṣẹ nọmba nla ti awọn iṣẹ-ṣiṣe igbakọọkan (~ 100 CronJob awọn nkan). Lati ṣe apejuwe iṣoro naa ni irọrun bi o ti ṣee ṣe, a yoo mu bi apẹẹrẹ ọkan microservice, laarin eyiti a ṣe ifilọlẹ iṣẹ-ṣiṣe cron lẹẹkan ni iṣẹju kan, ṣiṣẹda diẹ ninu fifuye lori Sipiyu. Lati ṣiṣẹ iṣẹ-ṣiṣe cron, awọn apa mẹta pẹlu awọn abuda ti o jọra patapata ni a pin (24 vCPUs lori ọkọọkan).

Ni akoko kanna, ko ṣee ṣe lati sọ pẹlu deede bawo ni igba ti CronJob yoo gba lati ṣiṣẹ, nitori iwọn didun data titẹ sii n yipada nigbagbogbo. Ni apapọ, lakoko iṣẹ deede ti kube-scheduler, ipade kọọkan n ṣiṣẹ awọn iṣẹlẹ iṣẹ 3-4, eyiti o ṣẹda ~ 20-30% ti fifuye lori Sipiyu ti oju ipade kọọkan:

Ṣiṣẹda afikun kube-scheduler pẹlu aṣa aṣa ti awọn ofin ṣiṣe eto

Iṣoro naa funrararẹ ni pe nigbakan awọn adarọ-iṣẹ iṣẹ cron duro ni iṣeto lori ọkan ninu awọn apa mẹta naa. Iyẹn ni, ni aaye kan ni akoko, ko ṣe eto adarọ ese kan fun ọkan ninu awọn apa, lakoko ti awọn apa meji miiran awọn ẹda 6-8 ti iṣẹ naa nṣiṣẹ, ṣiṣẹda ~ 40-60% ti fifuye Sipiyu:

Ṣiṣẹda afikun kube-scheduler pẹlu aṣa aṣa ti awọn ofin ṣiṣe eto

Iṣoro naa tun nwaye pẹlu igbohunsafẹfẹ laileto ati lẹẹkọọkan ni ibamu pẹlu akoko ti ẹya tuntun ti koodu ti yiyi jade.

Nipa jijẹ ipele gedu kube-scheduler si ipele 10 (-v=10), a bẹrẹ lati ṣe igbasilẹ iye awọn aaye ti ipade kọọkan ti gba lakoko ilana igbelewọn. Lakoko iṣẹ ṣiṣe eto deede, alaye atẹle ni a le rii ninu awọn akọọlẹ:

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

Awon. adajo nipa alaye ti o gba lati awọn àkọọlẹ, kọọkan ninu awọn apa ti gba ohun dogba nọmba ti ik ojuami ati ki o kan ID ti a ti yan fun igbogun. Ni akoko iṣeto iṣoro, awọn akọọlẹ dabi eyi:

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

Lati inu eyiti o le rii pe ọkan ninu awọn apa ti gba awọn aaye ipari ti o kere ju awọn miiran lọ, nitorinaa igbero ni a ṣe nikan fun awọn apa meji ti o gba Dimegilio ti o pọju. Nitorinaa, a ni idaniloju dajudaju pe iṣoro naa wa ni pipe ni ṣiṣe eto awọn adarọ-ese.

Algoridimu siwaju fun ipinnu iṣoro naa jẹ kedere si wa - ṣe itupalẹ awọn akọọlẹ, loye nipasẹ kini pataki ipade naa ko gba awọn aaye ati, ti o ba jẹ dandan, ṣatunṣe awọn eto imulo ti kube-scheduler aiyipada. Sibẹsibẹ, nibi a ti dojuko awọn iṣoro pataki meji:

  1. Ni ipele gedu ti o pọju (10), awọn aaye ti o gba nikan fun diẹ ninu awọn ayo ni afihan. Ninu abajade ti o wa loke ti awọn akọọlẹ, o le rii pe fun gbogbo awọn ayo ti o han ninu awọn akọọlẹ, awọn apa ṣe nọmba nọmba kanna ti awọn aaye ni deede ati ṣiṣe eto iṣoro, ṣugbọn abajade ikẹhin ni ọran ti igbero iṣoro yatọ. Nitorinaa, a le pinnu pe fun diẹ ninu awọn pataki, igbelewọn waye “lẹhin awọn iṣẹlẹ”, ati pe a ko ni ọna lati loye eyiti akọkọ ipade ko gba awọn aaye. A ṣe apejuwe iṣoro yii ni apejuwe awọn oro Ibi ipamọ Kubernetes lori Github. Ni akoko kikọ, idahun ti gba lati ọdọ awọn olupilẹṣẹ pe atilẹyin gedu yoo ṣafikun ni awọn imudojuiwọn Kubernetes v1.15,1.16, 1.17 ati XNUMX.
  2. Ko si ọna ti o rọrun lati ni oye iru eto imulo kan pato ti kube-scheduler ti n ṣiṣẹ lọwọlọwọ pẹlu. Bẹẹni, ninu iwe yi akojọ ti wa ni akojọ, sugbon o ko ni alaye nipa ohun ti pato òṣuwọn ti wa ni sọtọ si kọọkan ninu awọn ayo imulo. O le wo awọn iwuwo tabi ṣatunkọ awọn eto imulo ti kube-scheduler aiyipada nikan ni awọn koodu orisun.

O tọ lati ṣe akiyesi pe ni kete ti a ni anfani lati ṣe igbasilẹ pe ipade kan ko gba awọn aaye ni ibamu si eto imulo ImageLocalityPriority, eyiti o tọka si ipade kan ti o ba ti ni aworan ti o yẹ lati ṣiṣẹ ohun elo naa. Iyẹn ni, ni akoko ti ẹya tuntun ti ohun elo ti yiyi jade, iṣẹ-ṣiṣe cron ṣakoso lati ṣiṣẹ lori awọn apa meji, gbigba aworan tuntun lati iforukọsilẹ docker si wọn, ati nitorinaa awọn apa meji gba Dimegilio ipari ti o ga julọ ti ibatan si kẹta. .

Gẹgẹbi Mo ti kowe loke, ninu awọn akọọlẹ a ko rii alaye nipa igbelewọn ti eto imulo ImageLocalityPriority, nitorinaa lati le ṣayẹwo arosinu wa, a da aworan naa silẹ pẹlu ẹya tuntun ti ohun elo naa sori ipade kẹta, lẹhin eyi ṣiṣe iṣeto ṣiṣẹ ni deede. . O jẹ deede nitori eto imulo AworanLocaityPriority pe iṣoro iṣeto ni a ṣakiyesi pupọ; diẹ sii nigbagbogbo o ni nkan ṣe pẹlu nkan miiran. Nitori otitọ pe a ko le ṣatunṣe ni kikun awọn eto imulo kọọkan ninu atokọ ti awọn pataki ti oluṣeto kube-aifọwọyi, a ni iwulo fun iṣakoso irọrun ti awọn ilana ṣiṣe eto podu.

Igbekalẹ iṣoro naa

A fẹ ki ojutu si iṣoro naa ni pato bi o ti ṣee ṣe, iyẹn ni, awọn nkan akọkọ ti Kubernetes (nibi a tumọ si kube-scheduler aiyipada) yẹ ki o wa ko yipada. A ko fẹ lati yanju iṣoro kan ni aaye kan ati ṣẹda rẹ ni ibomiiran. Nitorinaa, a wa si awọn aṣayan meji fun ipinnu iṣoro naa, eyiti a kede ni ifihan si nkan naa - ṣiṣẹda oluṣeto afikun tabi kikọ tirẹ. Ibeere akọkọ fun ṣiṣe eto awọn iṣẹ-ṣiṣe cron ni lati pin kaakiri fifuye ni boṣeyẹ kọja awọn apa mẹta. Ibeere yii le ni itẹlọrun nipasẹ awọn eto imulo kube-scheduler ti o wa tẹlẹ, nitorinaa lati yanju iṣoro wa ko si aaye ni kikọ oluṣeto tirẹ.

Awọn ilana fun ṣiṣẹda ati Gbigbe afikun kube-scheduler ti wa ni apejuwe ninu iwe. Bibẹẹkọ, o dabi fun wa pe nkan Imuṣiṣẹ ko to lati rii daju ifarada aṣiṣe ninu iṣẹ iru iṣẹ pataki bi kube-scheduler, nitorinaa a pinnu lati fi kube-scheduler tuntun ranṣẹ bi Static Pod, eyiti yoo ṣe abojuto taara. nipasẹ Kubelet. Nitorinaa, a ni awọn ibeere atẹle fun kube-scheduler tuntun:

  1. Iṣẹ naa gbọdọ wa ni ransogun bi Static Pod lori gbogbo awọn ọga iṣupọ
  2. Ifarada aṣiṣe gbọdọ wa ni ipese ti o ba jẹ pe adarọ-ese ti nṣiṣẹ pẹlu kube-scheduler ko si
  3. Pataki akọkọ nigbati igbero yẹ ki o jẹ nọmba awọn orisun to wa lori ipade (LeastRequestedPriority)

Awọn solusan imuse

O tọ lati ṣe akiyesi lẹsẹkẹsẹ pe a yoo ṣe gbogbo iṣẹ ni Kubernetes v1.14.7, nitori Eyi ni ẹya ti a lo ninu iṣẹ naa. Jẹ ká bẹrẹ nipa kikọ a manifesto fun wa titun kube-scheduler. Jẹ ki a mu ifihan aiyipada (/etc/kubernetes/manifests/kube-scheduler.yaml) gẹgẹbi ipilẹ ki o mu wa si fọọmu atẹle:

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

Ni ṣoki nipa awọn iyipada akọkọ:

  1. Yi orukọ podu ati eiyan pada si kube-scheduler-cron
  2. Pato lilo awọn ibudo 10151 ati 10159 bi aṣayan ti ṣalaye hostNetwork: true ati pe a ko le lo awọn ebute oko oju omi kanna bi kube-scheduler aiyipada (10251 ati 10259)
  3. Lilo paramita --config, a pato faili iṣeto ni eyiti o yẹ ki o bẹrẹ iṣẹ naa
  4. Iṣagbesori atunto ti faili iṣeto ni (scheduler-custom.conf) ati faili eto eto iṣeto (scheduler-custom-policy-config.json) lati ọdọ agbalejo

Maṣe gbagbe pe kube-scheduler wa yoo nilo awọn ẹtọ ti o jọra si ọkan aiyipada. Ṣatunkọ ipa iṣupọ rẹ:

kubectl edit clusterrole system:kube-scheduler

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

Bayi jẹ ki a sọrọ nipa kini o yẹ ki o wa ninu faili iṣeto ati faili eto imulo eto:

  • Faili iṣeto ni (scheduler-custom.conf)
    Lati gba iṣeto ni kube-scheduler aiyipada, o gbọdọ lo paramita naa --write-config-to ati bẹbẹ lọ iwe. A yoo gbe iṣeto ni abajade ninu faili /etc/kubernetes/scheduler-custom.conf ati dinku si fọọmu atẹle:

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"

Ni ṣoki nipa awọn iyipada akọkọ:

  1. A ṣeto Orukọ iṣeto si orukọ iṣẹ kube-scheduler-cron wa.
  2. Ni paramita lockObjectName o tun nilo lati ṣeto orukọ iṣẹ wa ati rii daju pe paramita naa leaderElect ṣeto si otitọ (ti o ba ni ipade titunto si, o le ṣeto si eke).
  3. Pato ọna si faili pẹlu apejuwe ti awọn ilana ṣiṣe eto ninu paramita naa algorithmSource.

O tọ lati wo ni pẹkipẹki ni aaye keji, nibiti a ti ṣatunkọ awọn paramita fun bọtini naa leaderElection. Lati rii daju ifarada aṣiṣe, a ti ṣiṣẹ (leaderElect) ilana ti yiyan olori (titunto si) laarin awọn adarọ-ese ti kube-scheduler wa nipa lilo aaye ipari kan fun wọn (resourceLock) ti a npè ni kube-scheduler-cron (lockObjectName) ni aaye orukọ kube-system (lockObjectNamespace). Bii Kubernetes ṣe ṣe idaniloju wiwa giga ti awọn paati akọkọ (pẹlu kube-scheduler) ni a le rii ni article.

  • Fáìlì ìlànà ètò (scheduler-custom-policy-config.json)
    Gẹgẹbi Mo ti kowe ni iṣaaju, a le rii iru awọn eto imulo kan pato kube-scheduler aiyipada ṣiṣẹ pẹlu nikan nipa itupalẹ koodu rẹ. Iyẹn ni, a ko le gba faili kan pẹlu awọn ilana ṣiṣe eto fun kube-scheduler aiyipada ni ọna kanna bi faili iṣeto. Jẹ ki a ṣe apejuwe awọn ilana ṣiṣe eto ti a nifẹ si faili /etc/kubernetes/scheduler-custom-policy-config.json gẹgẹbi atẹle:

{
  "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
}

Nitorinaa, kube-scheduler kọkọ ṣajọ atokọ ti awọn apa si eyiti o le ṣeto podu kan ni ibamu si eto imulo GeneralPredicates (eyiti o pẹlu ṣeto ti PodFitsResources, PodFitsHostPorts, HostName, ati awọn eto imulo MatchNodeSelector). Ati lẹhinna oju ipade kọọkan jẹ iṣiro ni ibamu pẹlu ṣeto awọn eto imulo ni titobi awọn ayo. Lati mu awọn ipo ti iṣẹ-ṣiṣe wa ṣẹ, a ro pe iru awọn eto imulo yoo jẹ ojutu ti o dara julọ. Jẹ ki n leti pe eto imulo kan pẹlu awọn apejuwe alaye wọn wa ninu iwe. Lati ṣaṣeyọri iṣẹ-ṣiṣe rẹ, o le nirọrun yi ṣeto awọn eto imulo ti a lo ki o fi awọn iwọnwọn ti o yẹ si wọn.

A yoo pe ifihan ti kube-scheduler tuntun, eyiti a ṣẹda ni ibẹrẹ ipin, kube-scheduler-custom.yaml ati gbe e si ọna atẹle /etc/kubernetes/manifests lori awọn apa ọga mẹta. Ti ohun gbogbo ba ṣe ni deede, Kubelet yoo ṣe ifilọlẹ adarọ-ese kan lori ipade kọọkan, ati ninu awọn akọọlẹ ti oluṣeto kube tuntun wa a yoo rii alaye pe faili eto imulo wa ti lo ni aṣeyọri:

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:{}]'

Ni bayi gbogbo ohun ti o ku ni lati tọka si ni pato ti CronJob wa pe gbogbo awọn ibeere fun ṣiṣe eto awọn adarọ-ese yẹ ki o ṣe ilana nipasẹ oluṣeto kube tuntun wa:

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

ipari

Nikẹhin, a ni afikun kube-scheduler pẹlu ipilẹ alailẹgbẹ ti awọn ilana ṣiṣe eto, iṣẹ eyiti o jẹ abojuto taara nipasẹ kubelet. Ni afikun, a ti ṣeto awọn idibo ti titun kan olori laarin awọn pods ti wa kube-scheduler ni irú ti atijọ olori di ko si fun diẹ ninu awọn idi.

Awọn ohun elo ati awọn iṣẹ deede tẹsiwaju lati ṣeto nipasẹ kube-scheduler aiyipada, ati gbogbo awọn iṣẹ-ṣiṣe cron ti gbe patapata si tuntun. Ẹru ti a ṣẹda nipasẹ awọn iṣẹ-ṣiṣe cron ti pin ni boṣeyẹ kọja gbogbo awọn apa. Ṣiyesi pe ọpọlọpọ awọn iṣẹ-ṣiṣe cron ni a ṣe lori awọn apa kanna bi awọn ohun elo akọkọ ti ise agbese na, eyi ti dinku eewu gbigbe awọn podu nitori aini awọn orisun. Lẹhin ti iṣafihan afikun kube-scheduler, awọn iṣoro pẹlu ṣiṣe eto aiṣedeede ti awọn iṣẹ-ṣiṣe cron ko dide mọ.

Tun ka awọn nkan miiran lori bulọọgi wa:

orisun: www.habr.com

Fi ọrọìwòye kun