ื™ืฆื™ืจืช ืงื•ื‘ื™-ืชื–ืžื•ืŸ ื ื•ืกืฃ ืขื ืกื˜ ืžื•ืชืื ืื™ืฉื™ืช ืฉืœ ื›ืœืœื™ ืชื–ืžื•ืŸ

ื™ืฆื™ืจืช ืงื•ื‘ื™-ืชื–ืžื•ืŸ ื ื•ืกืฃ ืขื ืกื˜ ืžื•ืชืื ืื™ืฉื™ืช ืฉืœ ื›ืœืœื™ ืชื–ืžื•ืŸ

Kube-scheduler ื”ื•ื ืจื›ื™ื‘ ืื™ื ื˜ื’ืจืœื™ ืฉืœ Kubernetes, ืืฉืจ ืื—ืจืื™ ืขืœ ืชื–ืžื•ืŸ ืคื•ื“ื™ื ืขืœ ืคื ื™ ืฆืžืชื™ื ื‘ื”ืชืื ืœืžื“ื™ื ื™ื•ืช ืฉืฆื•ื™ื ื”. ืœืขืชื™ื ืงืจื•ื‘ื•ืช, ื‘ืžื”ืœืš ื”ื”ืคืขืœื” ืฉืœ ืืฉื›ื•ืœ Kubernetes, ืื™ื ื ื• ืฆืจื™ื›ื™ื ืœื—ืฉื•ื‘ ืขืœ ืื™ืœื• ืžื“ื™ื ื™ื•ืช ืžืฉืžืฉื•ืช ืœืชื–ืžื•ืŸ ืคื•ื“ื™ื, ืžื›ื™ื•ื•ืŸ ืฉืžืขืจื›ืช ื”ืžื“ื™ื ื™ื•ืช ืฉืœ ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ืฉืœ Kube-scheduler ืžืชืื™ืžื” ืœืจื•ื‘ ื”ืžืฉื™ืžื•ืช ื”ื™ื•ืžื™ื•ืžื™ื•ืช. ืขื ื–ืืช, ื™ืฉื ื ืžืฆื‘ื™ื ื‘ื”ื ื—ืฉื•ื‘ ืœื ื• ืœื›ื•ื•ื ืŸ ืืช ืชื”ืœื™ืš ื”ืงืฆืืช ื”ืชืจืžื™ืœื™ื, ื•ื™ืฉ ืฉืชื™ ื“ืจื›ื™ื ืœื‘ืฆืข ืžืฉื™ืžื” ื–ื•:

  1. ืฆื•ืจ ืงื•ื‘ื™-ืชื–ืžืŸ ืขื ืžืขืจื›ืช ื›ืœืœื™ื ืžื•ืชืืžืช ืื™ืฉื™ืช
  2. ื›ืชื•ื‘ ืืช ืžืชื–ืžืŸ ืžืฉืœืš ื•ืœืžื“ ืื•ืชื• ืœืขื‘ื•ื“ ืขื ื‘ืงืฉื•ืช ืฉืจืช API

ื‘ืžืืžืจ ื–ื” ืืชืืจ ืืช ื™ื™ืฉื•ื ื”ื ืงื•ื“ื” ื”ืจืืฉื•ื ื” ืœืคืชืจื•ืŸ ื”ื‘ืขื™ื” ืฉืœ ืชื–ืžื•ืŸ ืœื ืื—ื™ื“ ืฉืœ ืžื•ืงื“ื™ื ื‘ืื—ื“ ื”ืคืจื•ื™ืงื˜ื™ื ืฉืœื ื•.

ื”ืงื“ืžื” ืงืฆืจื” ืœืื•ืคืŸ ื”ืคืขื•ืœื” ืฉืœ kube-scheduler

ืจืื•ื™ ืœืฆื™ื™ืŸ ื‘ืžื™ื•ื—ื“ ืืช ื”ืขื•ื‘ื“ื” ืฉ-kube-scheduler ืื™ื ื• ืื—ืจืื™ ืœืชื–ืžื•ืŸ ื™ืฉื™ืจ ืฉืœ ืคื•ื“ื™ื - ื”ื•ื ืื—ืจืื™ ืจืง ืœืงื‘ื™ืขืช ื”ืฆื•ืžืช ืฉืขืœื™ื• ืœืžืงื ืืช ื”ืคื•ื“. ื‘ืžื™ืœื™ื ืื—ืจื•ืช, ื”ืชื•ืฆืื” ืฉืœ ื”ืขื‘ื•ื“ื” ืฉืœ kube-scheduler ื”ื™ื ืฉื ื”ืฆื•ืžืช, ืฉื”ื•ื ืžื—ื–ื™ืจ ืœืฉืจืช ื”-API ืœื‘ืงืฉืช ืชื–ืžื•ืŸ, ื•ืฉื ืžืกืชื™ื™ืžืช ืขื‘ื•ื“ืชื•.

ืจืืฉื™ืช, kube-scheduler ืžืจื›ื™ื‘ ืจืฉื™ืžื” ืฉืœ ืฆืžืชื™ื ืขืœื™ื”ื ื ื™ืชืŸ ืœืชื–ืžืŸ ืืช ื”ืคื•ื“ ื‘ื”ืชืื ืœืžื“ื™ื ื™ื•ืช ื”ืคืจื“ื™ืงื˜ื™ื. ืœืื—ืจ ืžื›ืŸ, ื›ืœ ืฆื•ืžืช ืžืจืฉื™ืžื” ื–ื• ืžืงื‘ืœ ืžืกืคืจ ืžืกื•ื™ื ืฉืœ ื ืงื•ื“ื•ืช ื‘ื”ืชืื ืœืžื“ื™ื ื™ื•ืช ื”ืขื“ื™ืคื•ื™ื•ืช. ื›ืชื•ืฆืื” ืžื›ืš, ื”ืฆื•ืžืช ืขื ืžืกืคืจ ื”ื ืงื•ื“ื•ืช ื”ืžืจื‘ื™ ื ื‘ื—ืจ. ืื ื™ืฉ ืฆืžืชื™ื ื‘ืขืœื™ ืื•ืชื• ื ื™ืงื•ื“ ืžืงืกื™ืžืœื™, ื ื‘ื—ืจ ืื—ื“ ืืงืจืื™. ื ื™ืชืŸ ืœืžืฆื•ื ืจืฉื™ืžื” ื•ืชื™ืื•ืจ ืฉืœ ืžื“ื™ื ื™ื•ืช ื”ืคืจื“ื™ืงื˜ื™ื (ืกื™ื ื•ืŸ) ื•ื”ืขื“ื™ืคื•ื™ื•ืช (ื ื™ืงื•ื“). ืชื™ืขื•ื“.

ืชื™ืื•ืจ ื’ื•ืฃ ื”ื‘ืขื™ื”

ืœืžืจื•ืช ื”ืžืกืคืจ ื”ื’ื“ื•ืœ ืฉืœ ืืฉื›ื•ืœื•ืช Kubernetes ื”ืฉื•ื ื™ื ืฉืžืชื•ื—ื–ืงื™ื ื‘-Nixis, ื ืชืงืœื ื• ืœืจืืฉื•ื ื” ื‘ื‘ืขื™ื” ืฉืœ ืชื–ืžื•ืŸ ืคื•ื“ื™ื ืจืง ืœืื—ืจื•ื ื”, ื›ืืฉืจ ืื—ื“ ื”ืคืจื•ื™ืงื˜ื™ื ืฉืœื ื• ื”ื™ื” ืฆืจื™ืš ืœื”ืคืขื™ืœ ืžืกืคืจ ืจื‘ ืฉืœ ืžืฉื™ืžื•ืช ืชืงื•ืคืชื™ื•ืช (~100 ื™ืฉื•ื™ื•ืช CronJob). ื›ื“ื™ ืœืคืฉื˜ ืืช ืชื™ืื•ืจ ื”ื‘ืขื™ื” ื›ื›ืœ ื”ืืคืฉืจ, ื ื™ืงื— ื›ื“ื•ื’ืžื” ืžื™ืงืจื•-ืฉื™ืจื•ืช ืื—ื“, ืฉื‘ืชื•ื›ื• ืžื•ืคืขืœืช ืžืฉื™ืžืช cron ืคืขื ื‘ื“ืงื”, ื•ื™ื•ืฆืจืช ืขื•ืžืก ืžืกื•ื™ื ืขืœ ื”-CPU. ื›ื“ื™ ืœื”ืคืขื™ืœ ืืช ืžืฉื™ืžืช ื”-cron, ื”ื•ืงืฆื• ืฉืœื•ืฉื” ืฆืžืชื™ื ื‘ืขืœื™ ืžืืคื™ื™ื ื™ื ื–ื”ื™ื ืœื—ืœื•ื˜ื™ืŸ (24 vCPUs ื‘ื›ืœ ืื—ื“).

ื™ื—ื“ ืขื ื–ืืช, ืื™ ืืคืฉืจ ืœื•ืžืจ ื‘ืžื“ื•ื™ืง ื›ืžื” ื–ืžืŸ ื™ื™ืงื— ืœ-CronJob ืœื‘ืฆืข, ืฉื›ืŸ ื ืคื— ื ืชื•ื ื™ ื”ืงืœื˜ ืžืฉืชื ื” ื›ืœ ื”ื–ืžืŸ. ื‘ืžืžื•ืฆืข, ื‘ืžื”ืœืš ืคืขื•ืœื” ืจื’ื™ืœื” ืฉืœ kube-scheduler, ื›ืœ ืฆื•ืžืช ืžืจื™ืฅ 3-4 ืžื•ืคืขื™ ืขื‘ื•ื“ื”, ืฉื™ื•ืฆืจื™ื ~20-30% ืžื”ืขื•ืžืก ืขืœ ื”-CPU ืฉืœ ื›ืœ ืฆื•ืžืช:

ื™ืฆื™ืจืช ืงื•ื‘ื™-ืชื–ืžื•ืŸ ื ื•ืกืฃ ืขื ืกื˜ ืžื•ืชืื ืื™ืฉื™ืช ืฉืœ ื›ืœืœื™ ืชื–ืžื•ืŸ

ื”ื‘ืขื™ื” ืขืฆืžื” ื”ื™ื ืฉืœืคืขืžื™ื ืชืจืžื™ืžื™ ืžืฉื™ืžื•ืช cron ื”ืคืกื™ืงื• ืœื”ื™ื•ืช ืžืชื•ื–ืžื ื™ื ื‘ืื—ื“ ืžืฉืœื•ืฉืช ื”ืฆืžืชื™ื. ื›ืœื•ืžืจ, ื‘ื ืงื•ื“ืช ื–ืžืŸ ืžืกื•ื™ืžืช, ืœื ืชื•ื›ื ืŸ ืคื•ื“ ืื—ื“ ืขื‘ื•ืจ ืื—ื“ ื”ืฆืžืชื™ื, ื‘ืขื•ื“ ืฉื‘ืฉื ื™ ื”ืฆืžืชื™ื ื”ืื—ืจื™ื ืคืขืœื• 6-8 ืขื•ืชืงื™ื ืฉืœ ื”ืžืฉื™ืžื”, ื•ื™ืฆืจื• ~40-60% ืžืขื•ืžืก ื”ืžืขื‘ื“:

ื™ืฆื™ืจืช ืงื•ื‘ื™-ืชื–ืžื•ืŸ ื ื•ืกืฃ ืขื ืกื˜ ืžื•ืชืื ืื™ืฉื™ืช ืฉืœ ื›ืœืœื™ ืชื–ืžื•ืŸ

ื”ื‘ืขื™ื” ื—ื–ืจื” ืขืœ ืขืฆืžื” ื‘ืชื“ื™ืจื•ืช ืืงืจืื™ืช ืœื—ืœื•ื˜ื™ืŸ ื•ืœืขืชื™ื ื”ื™ื™ืชื” ื‘ืงื•ืจืœืฆื™ื” ืขื ื”ืจื’ืข ืฉื‘ื• ื’ืจืกื” ื—ื“ืฉื” ืฉืœ ื”ืงื•ื“ ื”ื•ืคืขืœื”.

ืขืœ ื™ื“ื™ ื”ื’ื“ืœืช ืจืžืช ื”ืจื™ืฉื•ื ืฉืœ kube-scheduler ืœืจืžื” 10 (-v=10), ื”ืชื—ืœื ื• ืœืชืขื“ ื›ืžื” ื ืงื•ื“ื•ืช ืฆื‘ืจ ื›ืœ ืฆื•ืžืช ื‘ืžื”ืœืš ืชื”ืœื™ืš ื”ื”ืขืจื›ื”. ื‘ืžื”ืœืš ืคืขื•ืœืช ืชื›ื ื•ืŸ ืจื’ื™ืœื”, ื ื™ืชืŸ ื”ื™ื” ืœืจืื•ืช ืืช ื”ืžื™ื“ืข ื”ื‘ื ื‘ื™ื•ืžื ื™ื:

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

ื”ึธื”ึตืŸ. ืื ืœืฉืคื•ื˜ ืœืคื™ ื”ืžื™ื“ืข ืฉื”ืชืงื‘ืœ ืžื”ื™ื•ืžื ื™ื, ื›ืœ ืื—ื“ ืžื”ืฆืžืชื™ื ื–ื›ื” ื‘ืžืกืคืจ ืฉื•ื•ื” ืฉืœ ื ืงื•ื“ื•ืช ืกื•ืคื™ื•ืช ื•ืื—ืช ืืงืจืื™ืช ื ื‘ื—ืจื” ืœืชื›ื ื•ืŸ. ื‘ื–ืžืŸ ืชื›ื ื•ืŸ ื‘ืขื™ื™ืชื™, ื”ื™ื•ืžื ื™ื ื ืจืื• ื›ืš:

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

ืžืžื ื• ื ื™ืชืŸ ืœืจืื•ืช ืฉืื—ื“ ื”ืฆืžืชื™ื ืงืœืข ืคื—ื•ืช ื ืงื•ื“ื•ืช ืกื•ืคื™ื•ืช ืžื”ืื—ืจื™ื, ื•ืœื›ืŸ ื‘ื•ืฆืข ืชื›ื ื•ืŸ ืจืง ืขื‘ื•ืจ ืฉื ื™ ื”ืฆืžืชื™ื ืฉืฆื‘ืจื• ืืช ื”ื ื™ืงื•ื“ ื”ืžืงืกื™ืžืœื™. ืœืคื™ื›ืš, ื‘ื”ื—ืœื˜ ื”ืฉืชื›ื ืขื ื• ืฉื”ื‘ืขื™ื” ื˜ืžื•ื ื” ื“ื•ื•ืงื ื‘ืชื–ืžื•ืŸ ื”ืชืจืžื™ืœื™ื.

ื”ืืœื’ื•ืจื™ืชื ื”ื ื•ืกืฃ ืœืคืชืจื•ืŸ ื”ื‘ืขื™ื” ื”ื™ื” ื‘ืจื•ืจ ืœื ื• - ื ืชื— ืืช ื”ื™ื•ืžื ื™ื, ื”ื‘ืŸ ื‘ืื™ื–ื• ืขื“ื™ืคื•ืช ื”ืฆื•ืžืช ืœื ืฆื‘ืจ ื ืงื•ื“ื•ืช ื•ื‘ืžื™ื“ืช ื”ืฆื•ืจืš, ื”ืชืื ืืช ื”ืžื“ื™ื ื™ื•ืช ืฉืœ ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ืฉืœ ืžืชื–ืžืŸ kube. ืื•ืœื, ื›ืืŸ ืื ื• ืขื•ืžื“ื™ื ื‘ืคื ื™ ืฉื ื™ ืงืฉื™ื™ื ืžืฉืžืขื•ืชื™ื™ื:

  1. ื‘ืจืžืช ื”ืจื™ืฉื•ื ื”ืžืงืกื™ืžืœื™ืช (10), ื ืงื•ื“ื•ืช ืฉื ืฆื‘ืจื• ืจืง ืขื‘ื•ืจ ื›ืžื” ืกื“ืจื™ ืขื“ื™ืคื•ื™ื•ืช ื‘ืื™ื ืœื™ื“ื™ ื‘ื™ื˜ื•ื™. ื‘ืงื˜ืข ืฉืœ ื™ื•ืžื ื™ื ืœืขื™ืœ, ื ื™ืชืŸ ืœืจืื•ืช ืฉืœื›ืœ ืกื“ืจื™ ื”ืขื“ื™ืคื•ื™ื•ืช ื”ืžืฉืชืงืคื™ื ื‘ื™ื•ืžื ื™ื, ืฆืžืชื™ื ื–ื•ื›ื™ื ืœืื•ืชื• ืžืกืคืจ ื ืงื•ื“ื•ืช ื‘ืชื–ืžื•ืŸ ืจื’ื™ืœ ื•ื‘ืชื–ืžื•ืŸ ื‘ืขื™ื•ืช, ืืš ื”ืชื•ืฆืื” ื”ืกื•ืคื™ืช ื‘ืžืงืจื” ืฉืœ ืชื›ื ื•ืŸ ื‘ืขื™ื” ืฉื•ื ื”. ืœืคื™ื›ืš, ืื ื• ื™ื›ื•ืœื™ื ืœื”ืกื™ืง ืฉื‘ืกื“ืจื™ ืขื“ื™ืคื•ื™ื•ืช ืžืกื•ื™ืžื™ื, ื”ื ื™ืงื•ื“ ืžืชืจื—ืฉ "ืžืื—ื•ืจื™ ื”ืงืœืขื™ื", ื•ืื™ืŸ ืœื ื• ื“ืจืš ืœื”ื‘ื™ืŸ ืขืœ ืื™ื–ื• ืขื“ื™ืคื•ืช ื”ืฆื•ืžืช ืœื ืงื™ื‘ืœ ื ืงื•ื“ื•ืช. ืชื™ืืจื ื• ืืช ื”ื‘ืขื™ื” ื”ื–ื• ื‘ืคื™ืจื•ื˜ ื‘ ืกื•ื’ื™ื” ืžืื’ืจ Kubernetes ื‘- Github. ื‘ื–ืžืŸ ื›ืชื™ื‘ืช ืฉื•ืจื•ืช ืืœื” ื”ืชืงื‘ืœื” ืชื’ื•ื‘ื” ืžื”ืžืคืชื—ื™ื ืœืคื™ื” ืชืชื•ื•ืกืฃ ืชืžื™ื›ื” ื‘ืจื™ืฉื•ื ื‘ืขื“ื›ื•ื ื™ Kubernetes v1.15,1.16, 1.17 ื•-XNUMX.
  2. ืื™ืŸ ื“ืจืš ืงืœื” ืœื”ื‘ื™ืŸ ืขื ืื™ื–ื” ืกื˜ ืกืคืฆื™ืคื™ ืฉืœ ืžื“ื™ื ื™ื•ืช kube-scheduler ืขื•ื‘ื“ ื›ืขืช. ื›ืŸ ื‘ ืชื™ืขื•ื“ ืจืฉื™ืžื” ื–ื• ืžื•ืคื™ืขื” ื‘ืจืฉื™ืžื”, ืืš ื”ื™ื ืื™ื ื” ืžื›ื™ืœื” ืžื™ื“ืข ืขืœ ื”ืžืฉืงืœื™ื ื”ืกืคืฆื™ืคื™ื™ื ื”ืžื•ืงืฆื™ื ืœื›ืœ ืื—ืช ืžืžื“ื™ื ื™ื•ืช ื”ืขื“ื™ืคื•ื™ื•ืช. ืืชื” ื™ื›ื•ืœ ืœืจืื•ืช ืืช ื”ืžืฉืงื•ืœื•ืช ืื• ืœืขืจื•ืš ืืช ื”ืžื“ื™ื ื™ื•ืช ืฉืœ ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ืฉืœ ืžืชื–ืžืŸ ื”ืงื•ื‘ื™ื™ื” ืจืง โ€‹โ€‹ื‘ ืงื•ื“ื™ ืžืงื•ืจ.

ืจืื•ื™ ืœืฆื™ื™ืŸ ืฉืคืขื ื”ืฆืœื—ื ื• ืœืจืฉื•ื ืฉืฆื•ืžืช ืœื ืงื™ื‘ืœ ื ืงื•ื“ื•ืช ืœืคื™ ืžื“ื™ื ื™ื•ืช ImageLocalityPriority, ื”ืžืขื ื™ืงื” ื ืงื•ื“ื•ืช ืœืฆื•ืžืช ืื ื›ื‘ืจ ื™ืฉ ืœื• ืืช ื”ืชืžื•ื ื” ื”ื“ืจื•ืฉื” ืœื”ืคืขืœืช ื”ืืคืœื™ืงืฆื™ื”. ื›ืœื•ืžืจ, ื‘ื–ืžืŸ ืฉื”ื•ืฉืงื” ื’ืจืกื” ื—ื“ืฉื” ืฉืœ ื”ืืคืœื™ืงืฆื™ื”, ืžืฉื™ืžืช ื”-cron ื”ืฆืœื™ื—ื” ืœืจื•ืฅ ืขืœ ืฉื ื™ ืฆืžืชื™ื, ืœื”ื•ืจื™ื“ ืœื”ื ืชืžื•ื ื” ื—ื“ืฉื” ืžื”-docer registry, ื•ื›ืš ืฉื ื™ ืฆืžืชื™ื ืงื™ื‘ืœื• ืฆื™ื•ืŸ ืกื•ืคื™ ื’ื‘ื•ื” ื™ื•ืชืจ ื‘ื™ื—ืก ืœืฉืœื™ืฉื™. .

ื›ืคื™ ืฉื›ืชื‘ืชื™ ืœืžืขืœื”, ื‘ื™ื•ืžื ื™ื ืื™ื ื ื• ืจื•ืื™ื ืžื™ื“ืข ืขืœ ื”ืขืจื›ืช ืžื“ื™ื ื™ื•ืช ImageLocalityPriority, ืื– ื›ื“ื™ ืœื‘ื“ื•ืง ืืช ื”ื”ื ื—ื” ืฉืœื ื•, ื–ืจืงื ื• ืืช ื”ืชืžื•ื ื” ืขื ื”ื’ืจืกื” ื”ื—ื“ืฉื” ืฉืœ ื”ืืคืœื™ืงืฆื™ื” ืœืฆื•ืžืช ื”ืฉืœื™ืฉื™, ื•ืœืื—ืจ ืžื›ืŸ ื”ืชื–ืžื•ืŸ ืขื‘ื“ ื›ืžื• ืฉืฆืจื™ืš . ื‘ื“ื™ื•ืง ื‘ื’ืœืœ ืžื“ื™ื ื™ื•ืช ImageLocalityPriority ื‘ืขื™ื™ืช ื”ืชื–ืžื•ืŸ ื ืฆืคืชื” ืœืขืชื™ื ืจื—ื•ืงื•ืช ืœืžื“ื™; ืœืขืชื™ื ืงืจื•ื‘ื•ืช ื™ื•ืชืจ ื”ื™ื ื”ื™ื™ืชื” ืงืฉื•ืจื” ืœืžืฉื”ื• ืื—ืจ. ื‘ืฉืœ ื”ืขื•ื‘ื“ื” ืฉืœื ื™ื›ื•ืœื ื• ืœื ืคื•ืช ื‘ืื’ื™ื ืžืœื ื‘ื›ืœ ืื—ืช ืžื”ืžื“ื™ื ื™ื•ืช ื‘ืจืฉื™ืžืช ื”ืขื“ื™ืคื•ื™ื•ืช ืฉืœ ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ืฉืœ kube-scheduler, ื”ื™ื” ืœื ื• ืฆื•ืจืš ื‘ื ื™ื”ื•ืœ ื’ืžื™ืฉ ืฉืœ ืžื“ื™ื ื™ื•ืช ืชื–ืžื•ืŸ ื”ืคื•ื“.

ื”ืฆื”ืจืช ื”ื‘ืขื™ื”

ืจืฆื™ื ื• ืฉื”ืคืชืจื•ืŸ ืœื‘ืขื™ื” ื™ื”ื™ื” ื›ืžื” ืฉื™ื•ืชืจ ืกืคืฆื™ืคื™, ื›ืœื•ืžืจ, ื”ื™ืฉื•ื™ื•ืช ื”ืขื™ืงืจื™ื•ืช ืฉืœ Kubernetes (ื›ืืŸ ืื ื—ื ื• ืžืชื›ื•ื•ื ื™ื ืœ-kube-scheduler ื‘ืจื™ืจืช ื”ืžื—ื“ืœ) ืฆืจื™ื›ื•ืช ืœื”ื™ืฉืืจ ืœืœื ืฉื™ื ื•ื™. ืœื ืจืฆื™ื ื• ืœืคืชื•ืจ ื‘ืขื™ื” ื‘ืžืงื•ื ืื—ื“ ื•ืœื™ืฆื•ืจ ืื•ืชื” ื‘ืžืงื•ื ืื—ืจ. ื›ืš ื”ื’ืขื ื• ืœืฉืชื™ ืืคืฉืจื•ื™ื•ืช ืœืคืชืจื•ืŸ ื”ื‘ืขื™ื”, ืฉื”ื•ื›ืจื–ื• ื‘ืžื‘ื•ื ืœื›ืชื‘ื” โ€“ ื™ืฆื™ืจืช ืžืชื–ืžืŸ ื ื•ืกืฃ ืื• ื›ืชื™ื‘ื” ืžืฉืœื›ื. ื”ื“ืจื™ืฉื” ื”ืขื™ืงืจื™ืช ืœืชื–ืžื•ืŸ ืžืฉื™ืžื•ืช cron ื”ื™ื ื—ืœื•ืงืช ื”ืขื•ืžืก ื‘ืื•ืคืŸ ืฉื•ื•ื” ืขืœ ืคื ื™ ืฉืœื•ืฉื” ืฆืžืชื™ื. ื“ืจื™ืฉื” ื–ื• ื™ื›ื•ืœื” ืœื”ื™ื•ืช ืžืจื•ืฆื” ืขืœ ื™ื“ื™ ืžื“ื™ื ื™ื•ืช Kube- Scheduler ื”ืงื™ื™ืžืช, ืื– ื›ื“ื™ ืœืคืชื•ืจ ืืช ื”ื‘ืขื™ื” ืฉืœื ื• ืื™ืŸ ื˜ืขื ืœื›ืชื•ื‘ ืืช ื”ืžืชื–ืžืŸ ืฉืœืš.

ื”ื•ืจืื•ืช ืœื™ืฆื™ืจื” ื•ืคืจื™ืกื” ืฉืœ ืžืชื–ืžืŸ kube ื ื•ืกืฃ ืžืชื•ืืจื•ืช ื‘ ืชื™ืขื•ื“. ืขื ื–ืืช, ื ืจืื” ื”ื™ื” ืœื ื• ืฉื™ืฉื•ืช ื”-Deployment ืœื ืžืกืคื™ืงื” ื›ื“ื™ ืœื”ื‘ื˜ื™ื— ืกื•ื‘ืœื ื•ืช ืชืงืœื•ืช ื‘ื”ืคืขืœืช ืฉื™ืจื•ืช ื›ื” ืงืจื™ื˜ื™ ื›ืžื• kube-scheduler, ื•ืœื›ืŸ ื”ื—ืœื˜ื ื• ืœืคืจื•ืก kube-scheduler ื—ื“ืฉ ื›-Static Pod, ืืฉืจ ื™ื”ื™ื” ื‘ืžืขืงื‘ ื™ืฉื™ืจ. ืžืืช Kubelet. ืœืคื™ื›ืš, ื™ืฉ ืœื ื• ืืช ื”ื“ืจื™ืฉื•ืช ื”ื‘ืื•ืช ืœ-kube-scheduler ื”ื—ื“ืฉ:

  1. ื™ืฉ ืœืคืจื•ืก ืืช ื”ืฉื™ืจื•ืช ื›-Static Pod ื‘ื›ืœ ืžืืกื˜ืจื™ ื”ืืฉื›ื•ืœื•ืช
  2. ื™ืฉ ืœืกืคืง ืกื•ื‘ืœื ื•ืช ืœืชืงืœื•ืช ื‘ืžืงืจื” ืฉื”ืคื•ื“ ื”ืคืขื™ืœ ืขื kube-scheduler ืื™ื ื• ื–ืžื™ืŸ
  3. ื”ืขื“ื™ืคื•ืช ื”ืขื™ืงืจื™ืช ื‘ืขืช ืชื›ื ื•ืŸ ืฆืจื™ื›ื” ืœื”ื™ื•ืช ืžืกืคืจ ื”ืžืฉืื‘ื™ื ื”ื–ืžื™ื ื™ื ื‘ืฆื•ืžืช (LeastRequestedPriority)

ืคืชืจื•ื ื•ืช ื”ื˜ืžืขื”

ืจืื•ื™ ืœืฆื™ื™ืŸ ืžื™ื“ ืฉืื ื• ื ื‘ืฆืข ืืช ื›ืœ ื”ืขื‘ื•ื“ื” ื‘-Kubernetes v1.14.7, ืžื›ื™ื•ื•ืŸ ื–ื• ื”ื’ืจืกื” ืฉืฉื™ืžืฉื” ื‘ืคืจื•ื™ืงื˜. ื‘ื•ืื• ื ืชื—ื™ืœ ื‘ื›ืชื™ื‘ืช ืžื ื™ืคืกื˜ ืœืœื•ื— ื”ื–ืžื ื™ื ื”ื—ื“ืฉ ืฉืœื ื•. ื‘ื•ืื• ื ื™ืงื— ืืช ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ืฉืœ ืžื ื™ืคืกื˜ (/etc/kubernetes/manifests/kube-scheduler.yaml) ื›ื‘ืกื™ืก ื•ื ื‘ื™ื ืื•ืชื• ืœื˜ื•ืคืก ื”ื‘ื:

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

ื‘ืงืฆืจื” ืขืœ ื”ืฉื™ื ื•ื™ื™ื ื”ืขื™ืงืจื™ื™ื:

  1. ืฉื™ื ื” ืืช ื”ืฉื ืฉืœ ื”ืคื•ื“ ื•ื”ืžื™ื›ืœ ืœ-kube-scheduler-cron
  2. ืฆื™ื™ืŸ ืืช ื”ืฉื™ืžื•ืฉ ื‘ื™ืฆื™ืื•ืช 10151 ื•-10159 ื›ืคื™ ืฉื”ื•ื’ื“ืจื” ื”ืืคืฉืจื•ืช hostNetwork: true ื•ืื™ื ื ื• ื™ื›ื•ืœื™ื ืœื”ืฉืชืžืฉ ื‘ืื•ืชืŸ ื™ืฆื™ืื•ืช ื›ืžื• ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ืฉืœ kube-scheduler (10251 ื•-10259)
  3. ื‘ืืžืฆืขื•ืช ื”ืคืจืžื˜ืจ --config, ืฆื™ื™ื ื• ืืช ืงื•ื‘ืฅ ื”ืชืฆื•ืจื” ืฉืื™ืชื• ื™ืฉ ืœื”ืคืขื™ืœ ืืช ื”ืฉื™ืจื•ืช
  4. ื”ืจื›ื‘ื” ืžื•ื’ื“ืจืช ืฉืœ ืงื•ื‘ืฅ ื”ืชืฆื•ืจื” (scheduler-custom.conf) ื•ืงื•ื‘ืฅ ืžื“ื™ื ื™ื•ืช ื”ืชื–ืžื•ืŸ (scheduler-custom-policy-config.json) ืžื”ืžืืจื—

ืืœ ืชืฉื›ื— ืฉืžืชื–ืžืŸ ื”ืงื•ื‘ื™ ืฉืœื ื• ื™ืฆื˜ืจืš ื–ื›ื•ื™ื•ืช ื“ื•ืžื•ืช ืœื‘ืจื™ืจืช ื”ืžื—ื“ืœ. ืขืจื•ืš ืืช ืชืคืงื™ื“ ื”ืืฉื›ื•ืœ ืฉืœื•:

kubectl edit clusterrole system:kube-scheduler

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

ืขื›ืฉื™ื• ื‘ื•ืื• ื ื“ื‘ืจ ืขืœ ืžื” ืฉืฆืจื™ืš ืœื”ื›ื™ืœ ื‘ืงื•ื‘ืฅ ื”ืชืฆื•ืจื” ื•ื‘ืงื•ื‘ืฅ ืžื“ื™ื ื™ื•ืช ื”ืชื–ืžื•ืŸ:

  • ืงื•ื‘ืฅ ืชืฆื•ืจื” (scheduler-custom.conf)
    ื›ื“ื™ ืœืงื‘ืœ ืืช ืชืฆื•ืจืช ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ืฉืœ kube-scheduler, ืขืœื™ืš ืœื”ืฉืชืžืฉ ื‘ืคืจืžื˜ืจ --write-config-to ืฉืœ ืชื™ืขื•ื“. ื ืžืงื ืืช ื”ืชืฆื•ืจื” ื”ืžืชืงื‘ืœืช ื‘ืงื•ื‘ืฅ /etc/kubernetes/scheduler-custom.conf ื•ื ืคื—ื™ืช ืื•ืชื” ืœืฆื•ืจื” ื”ื‘ืื”:

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"

ื‘ืงืฆืจื” ืขืœ ื”ืฉื™ื ื•ื™ื™ื ื”ืขื™ืงืจื™ื™ื:

  1. ื”ื’ื“ืจื ื• ืืช schedulerName ืœืฉื ืฉืœ ืฉื™ืจื•ืช kube-scheduler-cron ืฉืœื ื•.
  2. ื‘ืคืจืžื˜ืจ lockObjectName ืืชื” ื’ื ืฆืจื™ืš ืœื”ื’ื“ื™ืจ ืืช ืฉื ื”ืฉื™ืจื•ืช ืฉืœื ื• ื•ืœื•ื•ื“ื ืฉื”ืคืจืžื˜ืจ leaderElect ืžื•ื’ื“ืจ ืœ-true (ืื ื™ืฉ ืœืš ืฆื•ืžืช ืžืืกื˜ืจ ืื—ื“, ืืชื” ื™ื›ื•ืœ ืœื”ื’ื“ื™ืจ ืื•ืชื• ืœ-false).
  3. ืฆื™ื™ืŸ ืืช ื”ื ืชื™ื‘ ืœืงื•ื‘ืฅ ืขื ืชื™ืื•ืจ ืฉืœ ืžื“ื™ื ื™ื•ืช ื”ืชื–ืžื•ืŸ ื‘ืคืจืžื˜ืจ algorithmSource.

ื›ื“ืื™ ืœื”ืกืชื›ืœ ืžืงืจื•ื‘ ืขืœ ื”ื ืงื•ื“ื” ื”ืฉื ื™ื™ื”, ืฉื‘ื” ืื ื• ืขื•ืจื›ื™ื ืืช ื”ืคืจืžื˜ืจื™ื ืฉืœ ื”ืžืคืชื— leaderElection. ื›ื“ื™ ืœื”ื‘ื˜ื™ื— ืกื•ื‘ืœื ื•ืช ืœืชืงืœื•ืช, ื”ืคืขืœื ื• (leaderElect) ืชื”ืœื™ืš ื‘ื—ื™ืจืช ืžื ื”ื™ื’ (ืžืืกื˜ืจ) ื‘ื™ืŸ ื”ืชืจืžื™ืœื™ื ืฉืœ ืžืชื–ืžืŸ ื”-kube-scheduler ืฉืœื ื• ื‘ืืžืฆืขื•ืช ื ืงื•ื“ืช ืงืฆื” ืื—ืช ืขื‘ื•ืจื (resourceLock) ื‘ืฉื kube-scheduler-cron (lockObjectName) ื‘ืžืจื—ื‘ ื”ืฉืžื•ืช ืฉืœ ืžืขืจื›ืช kube (lockObjectNamespace). ื›ื™ืฆื“ Kubernetes ืžื‘ื˜ื™ื— ื–ืžื™ื ื•ืช ื’ื‘ื•ื”ื” ืฉืœ ื”ืจื›ื™ื‘ื™ื ื”ืขื™ืงืจื™ื™ื (ื›ื•ืœืœ kube-scheduler) ื ื™ืชืŸ ืœืžืฆื•ื ื‘ ัั‚ะฐั‚ัŒะต.

  • ืงื•ื‘ืฅ ืžื“ื™ื ื™ื•ืช ืชื–ืžื•ืŸ (scheduler-custom-policy-config.json)
    ื›ืคื™ ืฉื›ืชื‘ืชื™ ืงื•ื“ื, ืื ื• ื™ื›ื•ืœื™ื ืœื’ืœื•ืช ืขื ืื™ืœื• ืžื“ื™ื ื™ื•ืช ืกืคืฆื™ืคื™ืช ืคื•ืขืœ ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ืฉืœ kube-scheduler ืจืง ืขืœ ื™ื“ื™ ื ื™ืชื•ื— ื”ืงื•ื“ ืฉืœื•. ื›ืœื•ืžืจ, ืœื ื ื•ื›ืœ ืœื”ืฉื™ื’ ืงื•ื‘ืฅ ืขื ืžื“ื™ื ื™ื•ืช ืชื–ืžื•ืŸ ืขื‘ื•ืจ ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ืฉืœ kube-scheduler ื‘ืื•ืชื• ืื•ืคืŸ ื›ืžื• ืงื•ื‘ืฅ ืชืฆื•ืจื”. ื”ื‘ื” ื ืชืืจ ืืช ืžื“ื™ื ื™ื•ืช ื”ืชื–ืžื•ืŸ ืฉื‘ื” ืื ื• ืžืขื•ื ื™ื™ื ื™ื ื‘ืงื•ื‘ืฅ /etc/kubernetes/scheduler-custom-policy-config.json ื‘ืื•ืคืŸ ื”ื‘ื:

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

ืœืคื™ื›ืš, kube-scheduler ืžืจื›ื™ื‘ ืชื—ื™ืœื” ืจืฉื™ืžื” ืฉืœ ืฆืžืชื™ื ืืœื™ื”ื ื ื™ืชืŸ ืœืชื–ืžืŸ ืคื•ื“ ื‘ื”ืชืื ืœืžื“ื™ื ื™ื•ืช GeneralPredicates (ื”ื›ื•ืœืœืช ืงื‘ื•ืฆื” ืฉืœ ืžื“ื™ื ื™ื•ืช PodFitsResources, PodFitsHostPorts, HostName ื•-MatchNodeSelector). ื•ืื– ื›ืœ ืฆื•ืžืช ืžื•ืขืจืš ื‘ื”ืชืื ืœืžืขืจืš ื”ืžื“ื™ื ื™ื•ืช ื‘ืžืขืจืš ื”ืขื“ื™ืคื•ื™ื•ืช. ื›ื“ื™ ืœืžืœื ืืช ืชื ืื™ ืžืฉื™ืžืชื ื•, ืกื‘ืจื ื• ืฉืžืขืจื›ืช ืžื“ื™ื ื™ื•ืช ื›ื–ื• ืชื”ื™ื” ื”ืคืชืจื•ืŸ ื”ืื•ืคื˜ื™ืžืœื™. ื”ืจืฉื• ืœื™ ืœื”ื–ื›ื™ืจ ืœื›ื ืฉืžืขืจื›ืช ืžื“ื™ื ื™ื•ืช ืขื ื”ืชื™ืื•ืจื™ื ื”ืžืคื•ืจื˜ื™ื ืฉืœื” ื–ืžื™ื ื” ื‘ ืชื™ืขื•ื“. ื›ื“ื™ ืœื‘ืฆืข ืืช ื”ืžืฉื™ืžื” ืฉืœืš, ืืชื” ื™ื›ื•ืœ ืคืฉื•ื˜ ืœืฉื ื•ืช ืืช ืกื˜ ื”ืžื“ื™ื ื™ื•ืช ื”ืžืฉืžืฉืช ื•ืœื”ืงืฆื•ืช ืœื”ื ืžืฉืงืœื™ื ืžืชืื™ืžื™ื.

ื”ื‘ื” ื ืงืจื ืœืžื ื™ืคืกื˜ ืฉืœ ื”-kube-scheduler ื”ื—ื“ืฉ, ืฉื™ืฆืจื ื• ื‘ืชื—ื™ืœืช ื”ืคืจืง, kube-scheduler-custom.yaml ื•ื ืžืงื ืื•ืชื• ื‘ื ืชื™ื‘ ื”ื‘ื /etc/kubernetes/manifests ื‘ืฉืœื•ืฉื” ืฆืžืชื™ื ืžืืกื˜ืจ. ืื ื”ื›ืœ ื ืขืฉื” ื›ื”ืœื›ื”, Kubelet ื™ืฉื™ืง ืคื•ื“ ื‘ื›ืœ ืฆื•ืžืช, ื•ื‘ื™ื•ืžื ื™ื ืฉืœ kube-scheduler ื”ื—ื“ืฉ ืฉืœื ื• ื ืจืื” ืžื™ื“ืข ืฉืงื•ื‘ืฅ ื”ืžื“ื™ื ื™ื•ืช ืฉืœื ื• ื”ื•ื—ืœ ื‘ื”ืฆืœื—ื”:

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

ื›ืขืช ื›ืœ ืฉื ื•ืชืจ ื”ื•ื ืœืฆื™ื™ืŸ ื‘ืžืคืจื˜ ืฉืœ CronJob ืฉืœื ื• ืฉื›ืœ ื”ื‘ืงืฉื•ืช ืœืชื–ืžื•ืŸ ื”ืชืจืžื™ืœื™ื ืฉืœื• ืฆืจื™ื›ื•ืช ืœื”ื™ื•ืช ืžืขื•ื‘ื“ื•ืช ืขืœ ื™ื“ื™ ืžืชื–ืžืŸ ื”ืงื•ื‘ื™ื™ื” ื”ื—ื“ืฉ ืฉืœื ื•:

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

ืžืกืงื ื”

ื‘ืกื•ืคื• ืฉืœ ื“ื‘ืจ, ืงื™ื‘ืœื ื• ืงื•ื‘ื™-ืชื–ืžื•ืŸ ื ื•ืกืฃ ืขื ืกื˜ ื™ื™ื—ื•ื“ื™ ืฉืœ ืžื“ื™ื ื™ื•ืช ืชื–ืžื•ืŸ, ืฉืขื‘ื•ื“ืชื• ืžืคื•ืงื—ืช ื™ืฉื™ืจื•ืช ืขืœ ื™ื“ื™ ื”ืงื•ื‘ืœื˜. ื‘ื ื•ืกืฃ, ืงื‘ืขื ื• ืืช ื‘ื—ื™ืจืชื• ืฉืœ ืžื ื”ื™ื’ ื—ื“ืฉ ื‘ื™ืŸ ื”ืชืจืžื™ืœื™ื ืฉืœ ืœื•ื— ื”ื–ืžื ื™ื ืฉืœื ื• ืœืžืงืจื” ืฉื”ืžื ื”ื™ื’ ื”ื™ืฉืŸ ืœื ื™ื”ื™ื” ื–ืžื™ืŸ ืžืกื™ื‘ื” ื›ืœืฉื”ื™.

ื™ื™ืฉื•ืžื™ื ื•ืฉื™ืจื•ืชื™ื ืจื’ื™ืœื™ื ืžืžืฉื™ื›ื™ื ืœื”ื™ื•ืช ืžืชื•ื–ืžื ื™ื ื“ืจืš ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ืฉืœ kube-scheduler, ื•ื›ืœ ืžืฉื™ืžื•ืช ื”-cron ื”ื•ืขื‘ืจื• ืœื—ืœื•ื˜ื™ืŸ ืœืžืฉื™ืžื•ืช ื”ื—ื“ืฉื•ืช. ื”ืขื•ืžืก ืฉื ื•ืฆืจ ืขืœ ื™ื“ื™ ืžืฉื™ืžื•ืช cron ืžื•ืคืฅ ื›ืขืช ื‘ืื•ืคืŸ ืฉื•ื•ื” ืขืœ ืคื ื™ ื›ืœ ื”ืฆืžืชื™ื. ื‘ื”ืชื—ืฉื‘ ื‘ื›ืš ืฉืจื•ื‘ ืžืฉื™ืžื•ืช ื”-cron ืžื‘ื•ืฆืขื•ืช ื‘ืื•ืชื ืฆืžืชื™ื ื›ืžื• ื”ื™ื™ืฉื•ืžื™ื ื”ืขื™ืงืจื™ื™ื ืฉืœ ื”ืคืจื•ื™ืงื˜, ื”ื“ื‘ืจ ื”ืคื—ื™ืช ืžืฉืžืขื•ืชื™ืช ืืช ื”ืกื™ื›ื•ืŸ ืœื”ื–ื–ืช ืคื•ื“ื™ื ืขืงื‘ ืžื—ืกื•ืจ ื‘ืžืฉืื‘ื™ื. ืœืื—ืจ ื”ืฆื’ืช ื”-kube-scheduler ื”ื ื•ืกืฃ, ื›ื‘ืจ ืœื ื”ืชืขื•ืจืจื• ื‘ืขื™ื•ืช ื‘ืชื–ืžื•ืŸ ืœื ืื—ื™ื“ ืฉืœ ืžืฉื™ืžื•ืช cron.

ืงืจื ื’ื ืžืืžืจื™ื ืื—ืจื™ื ื‘ื‘ืœื•ื’ ืฉืœื ื•:

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”