Ho theha kemiso ea kube-scheduler e nang le melao e tloaelehileng ea kemiso

Ho theha kemiso ea kube-scheduler e nang le melao e tloaelehileng ea kemiso

Kube-scheduler ke karolo ea bohlokoa ea Kubernetes, e ikarabellang bakeng sa ho hlophisa li-pods ho pholletsa le li-node ho latela maano a boletsoeng. Hangata, nakong ea ts'ebetso ea sehlopha sa Kubernetes, ha rea ​​​​tlameha ho nahana ka hore na ke maano afe a sebelisoang ho hlophisa li-pods, kaha melaoana ea "be-scheduler" ea kamehla e loketse mesebetsi e mengata ea letsatsi le letsatsi. Leha ho le joalo, ho na le maemo ao ho leng bohlokoa hore re lokise mokhoa oa ho fana ka li-pods, 'me ho na le litsela tse peli tsa ho finyella mosebetsi ona:

  1. Theha kube-scheduler e nang le melao e tloaelehileng
  2. Ngola kemiso ea hau 'me u e rute ho sebetsa ka likopo tsa seva sa API

Sehloohong sena, ke tla hlalosa ts'ebetsong ea ntlha ea pele ho rarolla bothata ba kemiso e sa lekaneng ea li-hearths ho e 'ngoe ea merero ea rona.

Kenyelletso e khuts'oane ea hore na kube-scheduler e sebetsa joang

Ke habohlokoa ho hlokomela ka ho khetheha taba ea hore kube-scheduler ha e ikarabelle bakeng sa ho hlophisa li-pods ka ho toba - ke eona feela e ikarabellang bakeng sa ho khetholla node eo pod e tla behoa ho eona. Ka mantsoe a mang, sephetho sa mosebetsi oa kube-scheduler ke lebitso la node, eo e khutlelang ho seva sa API bakeng sa kopo ea kemiso, 'me ke moo mosebetsi oa eona o fellang teng.

Taba ea pele, kube-scheduler e bokella lethathamo la li-node tseo pod e ka hlophisoang ho latela maano a predicates. Ka mor'a moo, node e 'ngoe le e' ngoe e tsoang lethathamong lena e fumana palo e itseng ea lintlha ho latela maano a bohlokoa. Ka lebaka leo, node e nang le palo e kholo ea lintlha e khethoa. Haeba ho na le li-node tse nang le lintlha tse ngata tse lekanang, ho khethoa e le 'ngoe. Lenane le tlhaloso ea li-predicates (filtering) le priorites (scoring) maano li ka fumanoa ho litokomane.

Tlhaloso ea 'mele oa bothata

Ho sa tsotellehe palo e kholo ea lihlopha tse fapaneng tsa Kubernetes tse bolokiloeng Nixys, re qalile ho kopana le bothata ba ho hlophisa li-pods haufinyane tjena, ha e 'ngoe ea merero ea rona e ne e hloka ho etsa mesebetsi e mengata ea nako le nako (~ 100 CronJob mekhatlo). Ho nolofatsa tlhaloso ea bothata ka hohle kamoo ho ka khonehang, re tla nka e le mohlala microservice e le 'ngoe, eo ka eona mosebetsi oa cron o qalisoang hang ka motsotso, ho theha mojaro ho CPU. Ho tsamaisa mosebetsi oa cron, li-node tse tharo tse nang le litšobotsi tse ts'oanang li ile tsa abeloa (li-vCPU tse 24 ho e 'ngoe le e 'ngoe).

Ka nako e ts'oanang, ho ke ke ha khoneha ho bolela ka nepo hore na CronJob e tla nka nako e kae ho e etsa, kaha palo ea data e kentsoeng e lula e fetoha. Ka karolelano, nakong ea ts'ebetso e tloaelehileng ea kube-scheduler, node e 'ngoe le e' ngoe e na le maemo a mosebetsi a 3-4, a etsang ~ 20-30% ea mojaro ho CPU ea node ka 'ngoe:

Ho theha kemiso ea kube-scheduler e nang le melao e tloaelehileng ea kemiso

Bothata ka bobona ke hore ka linako tse ling cron task pods e ile ea emisa ho hlophisoa ho e 'ngoe ea li-node tse tharo. Ka mantsoe a mang, ka nako e itseng, ha ho na pod e le 'ngoe e neng e reriloe bakeng sa e' ngoe ea li-node, ha ho tse ling tse peli likopi tse 6-8 tsa mosebetsi li ntse li sebetsa, ho theha ~ 40-60% ea mojaro oa CPU:

Ho theha kemiso ea kube-scheduler e nang le melao e tloaelehileng ea kemiso

Bothata bo ile ba ipheta ka makhetlo a sa reroang 'me ka linako tse ling bo amahanngoa le ha ho ne ho phatlalatsoa mofuta o mocha oa khoutu.

Ka ho eketsa boemo ba ho rema lifate tsa kube-scheduler ho ea boemong ba 10 (-v=10), re ile ra qala ho tlaleha hore na node ka 'ngoe e fumane lintlha tse kae nakong ea tlhahlobo. Nakong ea ts'ebetso e tloaelehileng ea moralo, lintlha tse latelang li ka bonoa ho li-log:

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

Tseo. ho latela tlhaiso-leseling e fumanoeng ho tsoa ho li-log, e 'ngoe le e' ngoe ea li-node e ile ea fumana palo e lekanang ea lintlha tsa ho qetela 'me ho ile ha khethoa e le 'ngoe bakeng sa moralo. Nakong ea mathata a moralo, li-log li ne li shebahala tjena:

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

Ho tloha moo ho ka bonoang hore e 'ngoe ea li-node e ile ea fumana lintlha tse fokolang tsa ho qetela ho feta tse ling,' me ka hona ho ne ho etsoa moralo feela bakeng sa li-node tse peli tse ileng tsa fumana lintlha tse ngata. Kahoo, re ne re kholisehile ka ho feletseng hore bothata bo teng ka mokhoa o nepahetseng oa kemiso ea li-pods.

Algorithm e eketsehileng ea ho rarolla bothata e ne e hlakile ho rona - ho sekaseka lits'oants'o, ho utloisisa hore na node ha ea ka ea fumana lintlha life pele, 'me, ha ho hlokahala, fetola maano a ho be-scheduler ea kamehla. Leha ho le joalo, mona re tobane le mathata a mabeli a bohlokoa:

  1. Boemong bo phahameng ba ho rema lifate (10), lintlha tse fumanoeng feela bakeng sa lintho tse ling tse tlang pele li bonahala. Karolong e ka holimo ea li-log, u ka bona hore bakeng sa lintho tsohle tse tlang pele tse bontšitsoeng ho li-log, li-node li fumana palo e lekanang ea lintlha ka mokhoa o tloaelehileng le oa ho hlophisa mathata, empa phello ea ho qetela tabeng ea ho rera bothata e fapane. Kahoo, re ka fihlela qeto ea hore bakeng sa lintho tse ling tse tlang pele, ho fana ka lintlha ho etsahala "ka mor'a lipapali", 'me ha re na mokhoa oa ho utloisisa hore na node ha ea ka ea fumana lintlha pele. Re hlalositse bothata bona ka botlalo hlahisa Sebaka sa polokelo ea Kubernetes ho Github. Nakong ea ho ngola, karabo e ile ea amoheloa ho tsoa ho baetsi ba hore tšehetso ea ho rema lifate e tla ekeletsoa ho Kubernetes v1.15,1.16, 1.17 le XNUMX updates.
  2. Ha ho na mokhoa o bonolo oa ho utloisisa hore na ke leano lefe le ikhethileng la kube-scheduler le sebetsang le lona hajoale. E, ho litokomane lenane lena le thathamisitsoe, empa ha le na tlhahisoleseding mabapi le hore na ke boima bofe bo khethehileng bo abetsoeng ho e 'ngoe le e' ngoe ea maano a bohlokoa. U ka bona litekanyo kapa ua hlophisa maano a ho be-scheduler ea kamehla ho mehloli.

Ke habohlokoa ho hlokomela hore hang ha re khona ho tlaleha hore node ha ea ka ea fumana lintlha ho ea ka leano la ImageLocarityPriority, e fanang ka lintlha ho node haeba e se e e-na le setšoantšo se hlokahalang ho tsamaisa kopo. Ka mantsoe a mang, nakong eo ho neng ho hlahisoa mofuta o mocha oa kopo, mosebetsi oa cron o ile oa khona ho sebetsa libakeng tse peli, ho jarolla setšoantšo se secha ho tsoa ho ngoliso ea li-docker ho bona, ka hona, li-node tse peli li ile tsa fumana lintlha tse phahameng tsa ho qetela tse amanang le tsa boraro. .

Joalokaha ke ngotse ka holimo, ka har'a li-log ha re bone tlhahisoleseding mabapi le tlhahlobo ea leano la ImageLocarityPriority, kahoo e le hore re hlahlobe maikutlo a rona, re ile ra lahlela setšoantšo ka phetolelo e ncha ea kopo sebakeng sa boraro, ka mor'a moo kemiso e sebetsang hantle. . E bile hantle ka lebaka la leano la ImageLocarityPriority moo bothata ba ho hlophisa bo neng bo bonoa ka seoelo; hangata bo ne bo amahanngoa le ntho e 'ngoe. Ka lebaka la hore ha rea ​​ka ra khona ho lokisa maano a mang le a mang a lethathamong la lintho tse tlang pele ho be-scheduler, re bile le tlhoko ea taolo e feto-fetohang ea maano a kemiso ea pod.

Mokhoa oa bothata

Re ne re batla hore tharollo ea bothata e be e tobileng ka hohle kamoo ho ka khonehang, ke hore, mekhatlo e ka sehloohong ea Kubernetes (mona re bolela "be-scheduler" ea kamehla) e lokela ho lula e sa fetohe. Re ne re sa batle ho rarolla bothata sebakeng se seng ebe re bo etsa sebakeng se seng. Kahoo, re fihlile likhethong tse peli tsa ho rarolla bothata, tse phatlalalitsoeng selelekeleng sa sengoloa - ho theha kemiso e eketsehileng kapa ho ngola ea hau. Ntho e ka sehloohong e hlokahalang bakeng sa ho hlophisa mesebetsi ea cron ke ho aba mojaro ka ho lekana ho pholletsa le li-node tse tharo. Tlhokahalo ena e ka khotsofatsoa ke melaoana e teng ea kube-scheduler, kahoo ho rarolla bothata ba rona ha ho na thuso ea ho ngola kemiso ea hau.

Litaelo tsa ho theha le ho tsamaisa ho be-scheduler li hlalositsoe ho litokomane. Leha ho le joalo, ho rona ho ne ho bonahala eka mokhatlo oa Deployment o ne o sa lekana ho netefatsa mamello ea liphoso ts'ebetsong ea ts'ebeletso e mahlonoko e kang ea kube-scheduler, kahoo re ile ra etsa qeto ea ho kenya kube-scheduler e ncha e le Static Pod, e neng e tla hlahlojoa ka ho toba. by Kubelet. Kahoo, re na le litlhokahalo tse latelang bakeng sa kube-scheduler e ncha:

  1. Ts'ebeletso e tlameha ho romelloa joalo ka Static Pod ho li-cluster masters tsohle
  2. Mamello ea liphoso e tlameha ho fanoa haeba pod e sebetsang e nang le kube-scheduler e sa fumanehe
  3. Ntho ea bohlokoa ka ho fetisisa ha u rera e lokela ho ba palo ea lisebelisoa tse fumanehang sebakeng sa "LeastRequestedPriority"

Litharollo tsa ts'ebetsong

Ke habohlokoa ho hlokomela hang-hang hore re tla etsa mosebetsi oohle ho Kubernetes v1.14.7, hobane Ena ke phetolelo e ileng ea sebelisoa morerong ona. Ha re qaleng ka ho ngola manifesto bakeng sa kube-scheduler ea rona e ncha. Ha re nkeng ponts'o ea kamehla (/etc/kubernetes/manifests/kube-scheduler.yaml) e le motheo 'me re e tlise ka mokhoa o latelang:

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

Ka bokhutšoanyane ka liphetoho tse kholo:

  1. Fetola lebitso la pod le setshelo ho kube-scheduler-cron
  2. E hlalositse ts'ebeliso ea likou tsa 10151 le 10159 joalo ka ha khetho e hlalositsoe hostNetwork: true 'me re ke ke ra sebelisa likou tse tšoanang le tsa kube-scheduler (10251 le 10259)
  3. Re sebelisa --config parameter, re hlalositse faele ea tlhophiso eo tšebeletso e lokelang ho qalisoa ka eona
  4. Ho hlophisoa ho hlophisoa ha faele ea litlhophiso (scheduler-custom.conf) le ho hlophisa faele ea pholisi (scheduler-custom-policy-config.json) ho tsoa ho moamoheli.

Se ke oa lebala hore kube-scheduler ea rona e tla hloka litokelo tse ts'oanang le tsa kamehla. Fetola karolo ea eona ea sehlopha:

kubectl edit clusterrole system:kube-scheduler

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

Joale ha re bue ka se lokelang ho ba teng faeleng ea tlhophiso le faele ea leano la kemiso:

  • Faele ea tlhophiso (scheduler-custom.conf)
    Ho fumana tlhophiso ea kamehla ea kube-scheduler, o tlameha ho sebelisa paramente --write-config-to ho tswa litokomane. Re tla beha tlhophiso e hlahisoang faeleng /etc/kubernetes/scheduler-custom.conf ebe re e fokotsa ka mokhoa o latelang:

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"

Ka bokhutšoanyane ka liphetoho tse kholo:

  1. Re beha schedulerName lebitsong la ts'ebeletso ea rona ea kube-scheduler-cron.
  2. Ka parameter lockObjectName hape o hloka ho beha lebitso la ts'ebeletso ea rona mme o netefatse hore parameter leaderElect beha 'nete (haeba u na le node e le' ngoe, u ka e beha ho bohata).
  3. E hlalositse tsela ea faele ka tlhaloso ea maano a kemiso ho paramethara algorithmSource.

Ho bohlokoa ho shebisisa ntlha ea bobeli, moo re hlophisang liparamente tsa senotlolo leaderElection. Ho netefatsa mamello ea liphoso, re nolofalitse (leaderElect) ts'ebetso ea ho khetha moetapele (monghali) lipakeng tsa li-pods tsa kube-scheduler ea rona a sebelisa ntlha e le 'ngoe bakeng sa bona (resourceLock) e bitsoang kube-scheduler-cron (lockObjectName) sebakeng sa mabitso sa kube-system (lockObjectNamespace). Kamoo Kubernetes e netefatsang ho fumaneha ho phahameng ha likarolo tsa mantlha (ho kenyeletsoa le kube-scheduler) e ka fumanoa ho sehlooho.

  • Ho hlophisa faele ea leano (scheduler-custom-policy-config.json)
    Joalokaha ke ngotse pejana, re ka fumana hore na ke maano afe a ikhethileng a kube-scheduler a sebetsang le ona feela ka ho sekaseka khoutu ea ona. Ka mantsoe a mang, re ke ke ra fumana faele e nang le maano a kemiso ea kube-scheduler ka tsela e ts'oanang le faele ea tlhophiso. Ha re hlalose maano a kemiso ao re a thahasellang ho file ea /etc/kubernetes/scheduler-custom-policy-config.json ka tsela e latelang:

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

Kahoo, kube-scheduler e qala ka ho bokella lethathamo la li-node tseo pod e ka reroang ho tsona ho latela leano la GeneralPredicates (le kenyeletsang sete ea PodFitsResources, PodFitsHostPorts, HostName, le maano a MatchNodeSelector). 'Me joale node e' ngoe le e 'ngoe e hlahlojoa ho latela sete ea maano ka har'a lintho tse tlang pele. Ho phethahatsa maemo a mosebetsi oa rona, re ile ra nahana hore letoto le joalo la maano e tla ba tharollo e nepahetseng. E re ke u hopotse hore sete ea maano a nang le litlhaloso tse qaqileng tsa ona e fumaneha ka litokomane. Ho etsa mosebetsi oa hau, o ka fetola sete ea maano a sebelisitsoeng mme o abele litekanyo tse loketseng.

Ha re bitse ponahatso ea kube-scheduler e ncha, eo re e entseng qalong ea khaolo, kube-scheduler-custom.yaml 'me re e behe ka tsela e latelang /etc/kubernetes/manifests on three master nodes. Haeba ntho e 'ngoe le e' ngoe e etsoa ka nepo, Kubelet e tla hlahisa pod sebakeng se seng le se seng, 'me ho li-log tsa kube-scheduler ea rona re tla bona tlhahisoleseding eo faele ea rona ea pholisi e sebelisitsoeng ka katleho:

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

Hona joale se setseng ke ho bonts'a tlhalosong ea rona ea CronJob hore likopo tsohle tsa ho hlophisa li-pods tsa eona li lokela ho sebetsoa ke kube-scheduler ea rona e ncha:

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

fihlela qeto e

Qetellong, re ile ra fumana kemiso e eketsehileng ea kube-scheduler e nang le melaoana e ikhethang ea kemiso, eo mosebetsi oa eona o behiloeng leihlo ka kotloloho ke kubelet. Ho feta moo, re thehile khetho ea moetapele e mocha lipakeng tsa li-be-scheduler tsa rona ha ho ka etsahala hore moetapele oa khale a se fumanehe ka mabaka a itseng.

Likopo tsa kamehla le lits'ebeletso li ntse li tsoela pele ho hlophisoa ka ho be-scheduler ea kamehla, 'me mesebetsi eohle ea cron e fetiselitsoe ka botlalo ho e ncha. Mojaro o entsoeng ke mesebetsi ea cron joale o se o ajoa ka ho lekana ho node tsohle. Ha ho nahanoa hore boholo ba mesebetsi ea cron e etsoa ka li-node tse tšoanang le lits'ebetso tse kholo tsa morero, sena se fokolitse haholo kotsi ea ho tsamaisa li-pods ka lebaka la khaello ea lisebelisoa. Kamora ho hlahisa kemiso e eketsehileng ea kube-scheduler, mathata a kemiso e sa lekanang ea mesebetsi ea cron ha a sa hlola a hlaha.

Hape bala lingoliloeng tse ling ho blog ea rona:

Source: www.habr.com

Eketsa ka tlhaloso