Ukwenza i-kube-scheduler eyongezelelweyo kunye neseti yesiko lemithetho yokucwangcisa

Ukwenza i-kube-scheduler eyongezelelweyo kunye neseti yesiko lemithetho yokucwangcisa

I-Kube-scheduler yinxalenye ebalulekileyo ye-Kubernetes, ejongene nokucwangcisa iipod kwii-nodes ngokuhambelana nemigaqo-nkqubo ekhankanyiweyo. Rhoqo, ngexesha lokusebenza kweqela leKubernetes, akufuneki sicinge malunga nokuba yeyiphi imigaqo-nkqubo esetyenziselwa ukucwangcisa iipods, kuba iseti yemigaqo-nkqubo ye-kube-scheduler engagqibekanga ifanelekile uninzi lwemisebenzi yemihla ngemihla. Nangona kunjalo, kukho iimeko apho kubalulekile ukuba silungise kakuhle inkqubo yokwabiwa kweepod, kwaye kukho iindlela ezimbini zokufezekisa lo msebenzi:

  1. Yenza i-kube-scheduler kunye neseti yesiko lemithetho
  2. Bhala eyakho ishedyuli kwaye uyifundise ukusebenza kunye nezicelo zeseva ye-API

Kweli nqaku, ndiza kuchaza ukuphunyezwa kwenqaku lokuqala lokusombulula ingxaki yokucwangciswa kokungalingani kwee-hearths kwenye yeeprojekthi zethu.

Intshayelelo emfutshane malunga nendlela i-kube-scheduler esebenza ngayo

Kuyafaneleka ukuba uqaphele ngokukodwa ukuba i-kube-scheduler ayinaxanduva lokucwangcisa ngokuthe ngqo ii-pods - inoxanduva kuphela lokumisela i-node yokubeka i-pod. Ngamanye amazwi, umphumo womsebenzi we-kube-scheduler ligama le-node, elibuyisela kumncedisi we-API ngesicelo sokucwangcisa, kwaye yilapho umsebenzi wayo uphela khona.

Okokuqala, i-kube-scheduler iqulunqa uluhlu lweendawo apho i-pod inokucwangciswa ngokuhambelana nemigaqo-nkqubo ye-predicates. Okulandelayo, i-node nganye kolu luhlu ifumana inani elithile lamanqaku ngokuhambelana nemigaqo-nkqubo yezinto eziphambili. Ngenxa yoko, i-node enenani eliphezulu lamanqaku likhethiwe. Ukuba kukho iindawo ezinamanqaku aphezulu afanayo, kukhethwa i-random. Uluhlu kunye nenkcazo ye-predicates (ukuhluza) kunye nezinto eziphambili (amanqaku) imigaqo-nkqubo inokufumaneka kwi. amaxwebhu.

Inkcazo yengxaki yomzimba

Nangona inani elikhulu lamaqela ahlukeneyo e-Kubernetes agcinwa e-Nixys, saqala ukujongana nengxaki yokucwangcisa iipods mva nje, xa enye yeeprojekthi zethu yayidinga ukuqhuba inani elikhulu lemisebenzi yexesha elithile (~ 100 CronJob entities). Ukwenza lula inkcazo yengxaki kangangoko kunokwenzeka, siya kuthatha njengomzekelo omnye we-microservice, apho umsebenzi we-cron uqaliswa kanye ngomzuzu, udala umthwalo kwi-CPU. Ukwenza umsebenzi we-cron, iindawo ezintathu ezineempawu ezifanayo ziye zabelwa (ii-24 vCPU nganye).

Kwangaxeshanye, akunakwenzeka ukutsho ngokuchanekileyo ukuba iCronJob iya kuthatha ixesha elingakanani ukwenza, kuba umthamo wedatha yegalelo uhlala utshintsha. Ngokomyinge, ngexesha lokusebenza okuqhelekileyo kwe-kube-scheduler, i-node nganye iqhuba iimeko ze-3-4 zemisebenzi, eyenza i- ~ 20-30% yomthwalo kwi-CPU ye-node nganye:

Ukwenza i-kube-scheduler eyongezelelweyo kunye neseti yesiko lemithetho yokucwangcisa

Ingxaki ngokwayo kukuba ngamanye amaxesha i-cron task pods iyeka ukucwangciswa kwenye yeenodi ezintathu. Oko kukuthi, ngexesha elithile, akukho pod enye eyacetywayo kwenye yeenodi, ngelixa kwezinye iindawo ezimbini iikopi ze-6-8 zomsebenzi ziqhuba, ukudala ~ 40-60% yomthwalo we-CPU:

Ukwenza i-kube-scheduler eyongezelelweyo kunye neseti yesiko lemithetho yokucwangcisa

Ingxaki iphinde yavela ngokuphindaphindiweyo ngokungakhethiyo kwaye ngamanye amaxesha idityaniswa kunye nomzuzwana inguqulelo entsha yekhowudi yakhutshwa.

Ngokwandisa i-kube-scheduler yokuloga inqanaba ukuya kwinqanaba le-10 (-v = 10), saqala ukurekhoda ukuba mangaphi amanqaku afunyenwe kwindawo nganye ngexesha lovavanyo. Ngexesha lomsebenzi wocwangciso oluqhelekileyo, olu lwazi lulandelayo lunokubonwa kwiilog:

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

Ezo. ukugweba ngolwazi olufunyenwe kwiilogi, nganye yeenodi ifumene inani elilinganayo lamanqaku okugqibela kunye neyodwa ekhethiweyo yokucwangcisa. Ngexesha lokucwangciswa kwengxaki, iilogi zazijongeka ngolu hlobo:

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

Ukusuka apho kunokubonwa ukuba enye yeenodes ifumene amanqaku ambalwa okugqibela kunabanye, kwaye ngoko ke ukucwangciswa kwenzelwe kuphela iindawo ezimbini ezifumene amanqaku aphezulu. Ke, sasiqinisekile ngokuqinisekileyo ukuba ingxaki ilele ngokuchanekileyo kucwangciso lweepods.

I-algorithm eyongezelelweyo yokusombulula ingxaki yayicacile kuthi - hlalutya iilogi, uqonde ukuba yeyiphi i-priority node engazange ifake amanqaku kwaye, ukuba kuyimfuneko, ukulungelelanisa imigaqo-nkqubo ye-kube-scheduler. Nangona kunjalo, apha sijongene nobunzima obubini obubalulekileyo:

  1. Kwelona nqanaba liphezulu lokugawulwa kwemithi (i-10), amanqaku afunyenwe kwizinto eziphambili kuphela abonakalisiwe. Kule ngcaphuno engentla yezigodo, unokubona ukuba kuzo zonke izinto eziphambili ezibonakaliswe kwiilogi, ii-nodes zibala inani elifanayo lamanqaku kwisiqhelo kunye nokucwangcisa ingxaki, kodwa umphumo wokugqibela kwimeko yokucwangcisa ingxaki iyahluka. Ke, sinokugqiba kwelokuba kwezinye izinto eziphambili, amanqaku ayenzeka β€œemva kwemiboniso”, kwaye asinayo indlela yokuqonda ukuba yeyiphi eyona nto iphambili engazange ifumane amanqaku. Le ngxaki siyichaze ngokweenkcukacha kwi khupha Indawo yokugcina yeKubernetes kwiGithub. Ngexesha lokubhala, impendulo yafunyanwa kubaphuhlisi ukuba inkxaso yokugawulwa kwemithi iya kongezwa kwi-Kubernetes v1.15,1.16, 1.17 kunye ne-XNUMX updates.
  2. Akukho ndlela ilula yokuqonda ukuba loluphi uluhlu lwemigaqo-nkqubo ye-kube-scheduler esebenza nayo ngoku. Ewe, kwi amaxwebhu olu luhlu luhlu, kodwa aluqulathanga ulwazi malunga nokuba yeyiphi na ubunzima obuthile obubekelwe kumgaqo-nkqubo wezinto eziphambili. Ungayibona imilinganiselo okanye uhlele iinkqubo ze kube-umcwangcisi ongagqibekanga kwi iikhowudi zomthombo.

Kuyafaneleka ukuba siqaphele ukuba emva kokuba sakwazi ukurekhoda ukuba i-node ayizange ifumane amanqaku ngokuhambelana nomgaqo-nkqubo we-ImageLocarityPriority, onika amanqaku kwi-node ukuba sele inomfanekiso ofunekayo wokuqhuba isicelo. Oko kukuthi, ngexesha inguqulelo entsha yesicelo yakhutshwa, umsebenzi wecron ukwazile ukusebenza kwiindawo ezimbini, ukukhuphela umfanekiso omtsha kwirejistri yedocker kubo, kwaye ke iindawo ezimbini zafumana amanqaku aphezulu okugqibela xa kuthelekiswa nesesithathu. .

Njengoko ndibhalile ngasentla, kwiilogi asiboni ulwazi malunga nokuvavanywa komgaqo-nkqubo we-ImageLocarityPriority, ngoko ukuze sihlolisise ukucinga kwethu, silahle umfanekiso kunye nenguqulelo entsha yesicelo kwi-node yesithathu, emva koko ukucwangciswa kwasebenza ngokuchanekileyo. . Kwakungenxa kanye yomgaqo-nkqubo we-ImageLocarityPriority apho ingxaki yokucwangcisa ijongwe kunqabile; rhoqo ibinxulunyaniswa nenye into. Ngenxa yokuba asikwazanga ukulungisa ngokupheleleyo imigaqo-nkqubo kuluhlu lwezinto eziphambili ze-kube-scheduler, besinesidingo solawulo olubhetyebhetye lwemigaqo-nkqubo yokucwangcisa i-pod.

Џџ Ρ•Πƒ Β° Β°

Besifuna ukuba isisombululo kwingxaki sibe sithe ngqo, oko kukuthi, amaziko aphambili eKubernetes (apha sithetha ukuba i-kube-scheduler) kufuneka ihlale ingatshintshi. Besingafuni ukusombulula ingxaki kwenye indawo kwaye siyidale kwenye. Ke, sifike kwiinketho ezimbini zokusombulula ingxaki, ezabhengezwa kwintshayelelo yenqaku - ukwenza umcwangcisi owongezelelweyo okanye ukubhala eyakho. Imfuno ephambili yokucwangcisa imisebenzi ye-cron kukusabalalisa umthwalo ngokulinganayo kwiindawo ezintathu. Le mfuno inokwaneliswa yimigaqo-nkqubo ekhoyo ye-kube-scheduler, ke ukusombulula ingxaki yethu akukho sizathu sokubhala eyakho ishedyuli.

Imiyalelo yokuyila kunye nokusasaza i-kube-scheduler eyongezelelweyo ichazwe kwi amaxwebhu. Nangona kunjalo, kwakubonakala ngathi iqumrhu lokusasaza akwanelanga ukuqinisekisa ukunyamezelana kwesiphoso ekusebenzeni kwenkonzo ebaluleke kakhulu njenge-kube-scheduler, ngoko ke sagqiba ekubeni sisebenzise i-kube-scheduler entsha njenge-Static Pod, eya kubekwa esweni ngokuthe ngqo. nguKubelet. Ke, sinezi mfuno zilandelayo ze-kube-scheduler entsha:

  1. Inkonzo kufuneka imiselwe njenge-Static Pod kuzo zonke ii-cluster masters
  2. Unyamezelo lwemposiso kufuneka lunikezelwe kwimeko apho i-pod esebenzayo ene-kube-scheduler ayifumaneki
  3. Eyona nto iphambili xa kucwangciswa kufuneka ibe linani lezibonelelo ezikhoyo kwindawo (LeastRequestedPriority)

Ukuphunyezwa kwesisombululo

Kuyafaneleka ukuba uqaphele kwangoko ukuba siya kuwenza wonke umsebenzi kwi-Kubernetes v1.14.7, kuba Le yinguqulelo eyayisetyenziswa kwiprojekthi. Masiqale ngokubhala i-manifesto ye-kube-scheduler yethu entsha. Masithathe i-manifest engagqibekanga (/etc/kubernetes/manifests/kube-scheduler.yaml) njengesiseko kwaye siyizise kolu hlobo lulandelayo:

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

Ngokufutshane malunga notshintsho oluphambili:

  1. Utshintshe igama lepod kunye nesikhongozeli ukuya kube-scheduler-cron
  2. Kuchazwe ukusetyenziswa kwamazibuko 10151 kunye ne-10159 njengoko ukhetho luchazwe hostNetwork: true kwaye asinakusebenzisa amazibuko afanayo njenge-kube-scheduler (10251 kunye ne-10259)
  3. Ukusebenzisa i---config parameter, sichaze ifayile yoqwalaselo apho inkonzo kufuneka iqalwe ngayo
  4. Ukunyuswa okuqwalaselweyo kwefayile yoqwalaselo (umcwangcisi-custom.conf) kunye nefayile yomgaqo-nkqubo wocwangciso (umcwangcisi-nkqubo-nkqubo-config.json) esuka kumamkeli

Ungalibali ukuba umcwangcisi wethu we-kube-uya kufuna amalungelo afana nalawo angagqibekanga. Hlela indima yayo yeqela:

kubectl edit clusterrole system:kube-scheduler

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

Ngoku makhe sithethe malunga noko kufuneka kuqulethwe kwifayile yoqwalaselo kunye nefayile yomgaqo-nkqubo wokucwangcisa:

  • Ifayile yoqwalaselo (scheduler-custom.conf)
    Ukufumana uqwalaselo olungagqibekanga lwe kube-umcwangcisi, kufuneka usebenzise i parameter --write-config-to ΠΈΠ· amaxwebhu. Siza kubeka isiphumo soqwalaselo kwifayile /etc/kubernetes/scheduler-custom.conf kwaye sinciphise kule fom ilandelayo:

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"

Ngokufutshane malunga notshintsho oluphambili:

  1. Siseta iGama lesicwangcisi kwigama lenkonzo yethu ye-kube-scheduler-cron.
  2. Kwiparameter lockObjectName kufuneka kwakhona ukuseta igama lenkonzo yethu kwaye uqinisekise ukuba iparameter leaderElect misela kwinyani (ukuba une-master node enye, ungayiseta kubuxoki).
  3. Ikhankanye indlela eya kwifayile ngenkcazelo yemigaqo-nkqubo yocwangciso kwiparameter algorithmSource.

Kufanelekile ukujonga ngokuthe kratya inqaku lesibini, apho sihlela iiparameters zesitshixo leaderElection. Ukuqinisekisa ukunyamezela iimpazamo, senze ukuba (leaderElect) inkqubo yokukhetha inkokeli (inkosi) phakathi kweepod ze kube-umcwangcisi usebenzisa isiphelo esinye kubo.resourceLock) ebizwa ngokuba kube-scheduler-cron (lockObjectName) kwisithuba segama se-kube- (lockObjectNamespace). I-Kubernetes iqinisekisa njani ukufumaneka okuphezulu kwamacandelo aphambili (kubandakanywa ne-kube-scheduler) inokufumaneka nqaku.

  • Ifayile yomgaqo-nkqubo wokucwangcisa (umcwangcisi-nkqubo-nkqubo-config.json)
    Njengoko bendibhalile ngaphambili, sinokufumanisa ukuba yeyiphi imigaqo-nkqubo ye-kube-scheduler esebenza ngayo kuphela ngokuhlalutya ikhowudi yayo. Oko kukuthi, asinakufumana ifayile enemigaqo-nkqubo yocwangciso lwe kube-umcwangcisi ngendlela efanayo nefayile yoqwalaselo. Makhe sichaze imigaqo-nkqubo yokucwangcisa esinomdla kuyo kwifayile /etc/kubernetes/scheduler-custom-policy-config.json ifayile ngolu hlobo lulandelayo:

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

Ngaloo ndlela, i-kube-scheduler kuqala iqulunqa uluhlu lweenodi apho i-pod inokucwangciswa ngokomgaqo-nkqubo we-GeneralPredicates (obandakanya isethi ye-PodFitsResources, i-PodFitsHostPorts, i-HostName, kunye nemigaqo-nkqubo ye-MatchNodeSelector). Kwaye ke i-node nganye ivavanywa ngokuhambelana neseti yemigaqo-nkqubo kwi-priority array. Ukuzalisekisa iimeko zomsebenzi wethu, sithathele ingqalelo ukuba uluhlu olunjalo lwemigaqo-nkqubo iya kuba sesona sisombululo. Mandikukhumbuze ukuba iseti yemigaqo-nkqubo enenkcazelo yazo eneenkcukacha iyafumaneka amaxwebhu. Ukufezekisa umsebenzi wakho, unokutshintsha ngokulula iseti yemigaqo-nkqubo esetyenzisiweyo kwaye unike ubunzima obufanelekileyo kubo.

Masibize i-manifest ye-kube-scheduler entsha, esiyidale ekuqaleni kwesahluko, kube-scheduler-custom.yaml kwaye siyibeke kule ndlela ilandelayo /etc/kubernetes/manifests kwii-master nodes ezintathu. Ukuba yonke into yenziwe ngokuchanekileyo, uKubelet uya kuqalisa i-pod kwindawo nganye, kwaye kwiilogi ze-kube-scheduler yethu entsha siya kubona ulwazi ukuba ifayile yethu yomgaqo-nkqubo isetyenziswe ngempumelelo:

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

Ngoku konke okuseleyo kukubonisa kwi-spec yeCronJob yethu ukuba zonke izicelo zokucwangcisa iipods zayo kufuneka ziqwalaselwe ngumcwangcisi wethu omtsha we-kube-:

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

isiphelo

Ekugqibeleni, sifumene i-kube-scheduler eyongezelelweyo eneseti ekhethekileyo yemigaqo-nkqubo yokucwangcisa, umsebenzi wayo ubekwe esweni ngokuthe ngqo yi-kubelet. Ukongeza, simisele unyulo lwenkokeli entsha phakathi kweepod ze-kube-scheduler yethu kwimeko apho inkokeli endala ingafumaneki ngesizathu esithile.

Izicelo eziqhelekileyo kunye neenkonzo ziyaqhubeka nokucwangciswa nge-kube-scheduler engagqibekanga, kwaye yonke imisebenzi ye-cron idluliselwe ngokupheleleyo entsha. Umthwalo owenziwe yi-cron imisebenzi ngoku usasazwe ngokulinganayo kuzo zonke iindawo. Ukuqwalasela ukuba ininzi yemisebenzi ye-cron iqhutyelwa kwiindawo ezifanayo njengezicelo eziphambili zeprojekthi, oku kuye kwanciphisa kakhulu umngcipheko wokuhamba kweepods ngenxa yokungabikho kwezixhobo. Emva kokwazisa i-kube-scheduler eyongezelelweyo, iingxaki zokucwangciswa okungalinganiyo kwemisebenzi ye-cron ayisekho.

Funda namanye amanqaku kwibhlog yethu:

umthombo: www.habr.com

Yongeza izimvo