Kube-scheduler 㯠Kubernetes ã®äžå¯æ¬ ãªã³ã³ããŒãã³ãã§ãããæå®ãããããªã·ãŒã«åŸã£ãŠããŒãéã§ããããã¹ã±ãžã¥ãŒã«ãã圹å²ãæãããŸãã å€ãã®å Žåãããã©ã«ãã® kube-scheduler ã®ããªã·ãŒ ã»ããã¯ã»ãšãã©ã®æ¥åžžã¿ã¹ã¯ã«é©ããŠãããããKubernetes ã¯ã©ã¹ã¿ãŒã®éçšäžã«ãããã®ã¹ã±ãžã¥ãŒã«ã«ã©ã®ããªã·ãŒã䜿çšãããããèããå¿ èŠã¯ãããŸããã ãã ããããããå²ãåœãŠãããã»ã¹ã埮調æŽããããšãéèŠãªç¶æ³ãããããã®ã¿ã¹ã¯ãéæããã«ã¯æ¬¡ã® XNUMX ã€ã®æ¹æ³ããããŸãã
- ã«ã¹ã¿ã ã®ã«ãŒã«ã»ããã䜿çšã㊠kube-scheduler ãäœæãã
- ç¬èªã®ã¹ã±ãžã¥ãŒã©ãäœæããAPI ãµãŒããŒã®ãªã¯ãšã¹ããåŠçããããã«æããŸãã
ãã®èšäºã§ã¯ãç§ãã¡ã®ãããžã§ã¯ãã® XNUMX ã€ã«ãããçåºã®äžåäžãªã¹ã±ãžã¥ãŒã«ã®åé¡ã解決ããããã®æåã®ãã€ã³ãã®å®è£ ã«ã€ããŠèª¬æããŸãã
kube-scheduler ã®ä»çµã¿ã®ç°¡åãªçŽ¹ä»
kube-scheduler ã¯ãããã®çŽæ¥ã®ã¹ã±ãžã¥ãŒãªã³ã°ãæ åœãããããããé 眮ããããŒãã決å®ããããšã®ã¿ãæ åœãããšããäºå®ã«ç¹ã«æ³šç®ãã䟡å€ããããŸãã èšãæããã°ãkube-scheduler ã®äœæ¥ã®çµæã¯ããŒãã®ååã§ãããã¹ã±ãžã¥ãŒãªã³ã° ãªã¯ãšã¹ãã®ããã« API ãµãŒããŒã«è¿ãããããã§äœæ¥ãçµäºããŸãã
ãŸããkube-scheduler ã¯ãè¿°èªããªã·ãŒã«åŸã£ãŠããããã¹ã±ãžã¥ãŒã«ã§ããããŒãã®ãªã¹ããã³ã³ãã€ã«ããŸãã 次ã«ããã®ãªã¹ãã®åããŒãã¯ãåªå
é äœããªã·ãŒã«åŸã£ãŠç¹å®ã®æ°ã®ãã€ã³ããåãåããŸãã ãã®çµæãæ倧ã®ãã€ã³ãæ°ãæã€ããŒããéžæãããŸãã åãæ倧ã¹ã³ã¢ãæã€ããŒããååšããå Žåãã©ã³ãã ãªããŒããéžæãããŸãã è¿°èª (ãã£ã«ã¿ãªã³ã°) ããªã·ãŒãšåªå
é äœ (ã¹ã³ã¢ãªã³ã°) ããªã·ãŒã®ãªã¹ããšèª¬æã¯ã次ã®å Žæã«ãããŸãã
åé¡æ¬äœã®èª¬æ
Nixys ã§ã¯å€æ°ã®ç°ãªã Kubernetes ã¯ã©ã¹ã¿ãŒãç¶æãããŠããŸããããããã®ã¹ã±ãžã¥ãŒã«ã®åé¡ã«åããŠééããã®ã¯ã€ãæè¿ã®ããšã§ããããžã§ã¯ãã® 100 ã€ã§å€æ°ã®å®æã¿ã¹ã¯ (çŽ 24 åã® CronJob ãšã³ãã£ãã£) ãå®è¡ããå¿ èŠããã£ããšãã§ããã åé¡ã®èª¬æãã§ããã ãç°¡åã«ããããã«ãXNUMX ã€ã®ãã€ã¯ããµãŒãã¹ãäŸã«æããŸãããã®ãã€ã¯ããµãŒãã¹ã§ã¯ãcron ã¿ã¹ã¯ã XNUMX åã« XNUMX åèµ·åãããCPU ã«è² è·ãããããŸãã cron ã¿ã¹ã¯ãå®è¡ããããã«ããŸã£ããåãç¹æ§ãæ〠XNUMX ã€ã®ããŒããå²ãåœãŠãããŸãã (ããããã« XNUMX åã® vCPU)ã
åæã«ãå ¥åããŒã¿ã®éã¯åžžã«å€åãããããCronJob ã®å®è¡ã«ãããæéãæ£ç¢ºã«èšãããšã¯äžå¯èœã§ãã å¹³åããŠãkube-scheduler ã®éåžžã®åäœäžãåããŒã㯠3 ïœ 4 åã®ãžã§ã ã€ã³ã¹ã¿ã³ã¹ãå®è¡ããåããŒãã® CPU ã«æ倧 20 ïœ 30% ã®è² è·ãçããŸãã
åé¡èªäœã¯ã6 ã€ã®ããŒãã®ãã¡ 8 ã€ã§ cron ã¿ã¹ã¯ ããããã¹ã±ãžã¥ãŒã«ãããªããªãå Žåãããããšã§ãã ã€ãŸããããæç¹ã§ãããããã®ããŒãã«ã¯åäžã®ããããèšç»ãããŠããããä»ã® 40 ã€ã®ããŒãã§ã¯ã¿ã¹ã¯ã® 60 ïœ XNUMX åã®ã³ããŒãå®è¡ãããŠãããCPU è² è·ã®çŽ XNUMX ïœ XNUMX% ãçããŠããŸãã
ãã®åé¡ã¯å®å šã«ã©ã³ãã ãªé »åºŠã§åçºããå Žåã«ãã£ãŠã¯ã³ãŒãã®æ°ããããŒãžã§ã³ãå ¬éãããç¬éãšçžé¢é¢ä¿ããããŸããã
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
ãããããããŒãã® XNUMX ã€ãä»ã®ããŒãããæçµçãªãã€ã³ãã®ã¹ã³ã¢ãå°ãªãã£ããããæ倧ã¹ã³ã¢ãç²åŸãã XNUMX ã€ã®ããŒãã«å¯ŸããŠã®ã¿èšç»ãå®è¡ãããããšãããããŸãã ãããã£ãŠãåé¡ã¯ãŸãã«ãããã®ã¹ã±ãžã¥ãŒã«ã«ãããšç§ãã¡ã¯ç¢ºä¿¡ããŠããŸããã
åé¡ã解決ããããã®ãããªãã¢ã«ãŽãªãºã ã¯ãç§ãã¡ã«ãšã£ãŠæããã§ããããã°ãåæããããŒããã©ã®åªå é äœã«ãã£ãŠãã€ã³ããç²åŸããªãã£ãããç解ããå¿ èŠã«å¿ããŠãããã©ã«ãã® kube-scheduler ã®ããªã·ãŒã調æŽããŸãã ãã ãããã㧠XNUMX ã€ã®é倧ãªåé¡ã«çŽé¢ããŸãã
- æ倧ãã®ã³ã°ã¬ãã«ïŒ10ïŒã§ã¯ãäžéšã®åªå
床ã§ã®ã¿ç²åŸãããã€ã³ããåæ ãããŸãã äžèšã®ãã°ã®æç²ã§ã¯ããã°ã«åæ ãããŠãããã¹ãŠã®åªå
é äœã«ã€ããŠãããŒãã¯éåžžã®ã¹ã±ãžã¥ãŒãªã³ã°ãšåé¡ã®ã¹ã±ãžã¥ãŒãªã³ã°ã§åããã€ã³ããç²åŸããŸãããåé¡ã®ãã©ã³ãã³ã°ã®å Žåã®æçµçµæã¯ç°ãªãããšãããããŸãã ãããã£ãŠãäžéšã®åªå
é äœã§ã¯ã¹ã³ã¢ãªã³ã°ããèå°è£ãã§è¡ãããããŒããã©ã®åªå
é äœã§ãã€ã³ããç²åŸã§ããªãã£ãã®ããç解ããæ¹æ³ããªããšçµè«ä»ããããšãã§ããŸãã ãã®åé¡ã«ã€ããŠã¯ã次ã®èšäºã§è©³ãã説æããŸããã
åé¡ Github äžã® Kubernetes ãªããžããªã ãã®èšäºã®å·çæç¹ã§ã¯ãKubernetes v1.15,1.16ã1.17ãããã³ XNUMX ã®ã¢ããããŒãã§ãã°èšé²ã®ãµããŒããè¿œå ãããäºå®ã§ãããšããåçãéçºè ããåãåãããŠããŸãã - kube-scheduler ãçŸåšã©ã®ç¹å®ã®ããªã·ãŒ ã»ããã䜿çšããŠããããç解ããç°¡åãªæ¹æ³ã¯ãããŸããã ã¯ããã§
ããã¥ã¡ã³ããŒã·ã§ã³ ãã®ãªã¹ãã«ã¯ãªã¹ããããŠããŸãããååªå ããªã·ãŒã«ã©ã®ãããªç¹å®ã®éã¿ãå²ãåœãŠãããŠãããã«é¢ããæ å ±ã¯å«ãŸããŠããŸããã ããã©ã«ãã® kube-scheduler ã®éã¿ã確èªãããããªã·ãŒãç·šéãããã§ããã®ã¯ããœãŒã¹ã³ãŒã .
ããŒãã ImageLocalityPriority ããªã·ãŒã«åŸã£ãŠãã€ã³ããåãåããªãã£ãããšãèšé²ã§ããããšã¯æ³šç®ã«å€ããŸãããã®ããªã·ãŒã¯ãã¢ããªã±ãŒã·ã§ã³ã®å®è¡ã«å¿ èŠãªã€ã¡ãŒãžãããŒãã«ãã§ã«æã£ãŠããå Žåã«ãã€ã³ããä»äžããŸãã ã€ãŸããã¢ããªã±ãŒã·ã§ã³ã®æ°ããããŒãžã§ã³ãããŒã«ã¢ãŠããããæç¹ã§ãcron ã¿ã¹ã¯ã¯ XNUMX ã€ã®ããŒãäžã§å®è¡ã§ããdocker ã¬ãžã¹ããªããæ°ããã€ã¡ãŒãžããããã®ããŒãã«ããŠã³ããŒããããããXNUMX ã€ã®ããŒã㯠XNUMX çªç®ã®ããŒãã«æ¯ã¹ãŠé«ãæçµã¹ã³ã¢ãåãåããŸããã ã
äžã§æžããããã«ããã°ã«ã¯ ImageLocalityPriority ããªã·ãŒã®è©äŸ¡ã«é¢ããæ å ±ã衚瀺ãããªããããä»®å®ã確èªããããã«ãã¢ããªã±ãŒã·ã§ã³ã®æ°ããããŒãžã§ã³ãå«ãã€ã¡ãŒãžã XNUMX çªç®ã®ããŒãã«ãã³ãããŸããããã®åŸãã¹ã±ãžã¥ãŒãªã³ã°ã¯æ£ããæ©èœããŸããã ã ImageLocalityPriority ããªã·ãŒã®ãããã§ãã¹ã±ãžã¥ãŒã«ã®åé¡ãã»ãšãã©èŠ³å¯ããããä»ã®äœãã«é¢é£ããŠããããšãããå€ããããŸããã ããã©ã«ãã® kube-scheduler ã®åªå é äœã®ãªã¹ãã«ããåããªã·ãŒãå®å šã«ã¯ãããã°ã§ããªãã£ããããããã ã¹ã±ãžã¥ãŒãªã³ã° ããªã·ãŒãæè»ã«ç®¡çããå¿ èŠããããŸããã
åé¡ã®å®åŒå
ç§ãã¡ã¯ãåé¡ã®è§£æ±ºçãã§ããã ãå ·äœçã«ããããšèããŠããŸãããã€ãŸããKubernetes ã®äž»èŠãªãšã³ãã£ã㣠(ããã§ã¯ãããã©ã«ãã® kube-scheduler ãæå³ããŸã) ã¯å€æŽããªãã§ãã ããã ç§ãã¡ã¯ãããå Žæã§åé¡ã解決ããå¥ã®å Žæã§åé¡ãåŒãèµ·ããããšãæãã§ããŸããã§ããã ãããã£ãŠããã®åé¡ã解決ããã«ã¯ãèšäºã®åé ã§çºè¡šãã XNUMX ã€ã®ãªãã·ã§ã³ãã€ãŸãè¿œå ã®ã¹ã±ãžã¥ãŒã©ãäœæããããç¬èªã®ã¹ã±ãžã¥ãŒã©ãäœæããããšããéžæè¢ã«ãã©ãçããŸããã cron ã¿ã¹ã¯ãã¹ã±ãžã¥ãŒã«ããããã®äž»ãªèŠä»¶ã¯ãXNUMX ã€ã®ããŒãéã§è² è·ãåçã«åæ£ããããšã§ãã ãã®èŠä»¶ã¯æ¢åã® kube-scheduler ããªã·ãŒã«ãã£ãŠæºãããããããåé¡ã解決ããããã«ç¬èªã®ã¹ã±ãžã¥ãŒã©ãŒãäœæããæå³ã¯ãããŸããã
è¿œå ã® kube-scheduler ãäœæããŠãããã€ããæé ã«ã€ããŠã¯ãã
- ãµãŒãã¹ã¯ãã¹ãŠã®ã¯ã©ã¹ã¿ãŒ ãã¹ã¿ãŒã«éçããããšããŠãããã€ããå¿ èŠããããŸã
- kube-scheduler ãåããã¢ã¯ãã£ããªãããã䜿çšã§ããªãå Žåã«åããŠããã©ãŒã«ã ãã¬ã©ã³ã¹ãæäŸããå¿ èŠããã
- èšç»æã®äž»ãªåªå äºé ã¯ãããŒãäžã§å©çšå¯èœãªãªãœãŒã¹ã®æ° (LeastRequestedPriority) ã§ããå¿ èŠããããŸãã
å®è£ ãœãªã¥ãŒã·ã§ã³
ãã¹ãŠã®äœæ¥ã Kubernetes v1.14.7 ã§å®è¡ããããšã«ããã«æ³šç®ããŠãã ããã ããã¯ãããžã§ã¯ãã§äœ¿çšãããããŒãžã§ã³ã§ãã æ°ãã kube-scheduler ã®ãããã§ã¹ããæžãããšããå§ããŸãããã ããã©ã«ãã®ãããã§ã¹ã (/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
äž»ãªå€æŽç¹ã«ã€ããŠç°¡åã«èª¬æããŸãã
- ããããšã³ã³ããã®ååã kube-scheduler-cron ã«å€æŽããŸãã
- ãªãã·ã§ã³ãå®çŸ©ãããŠããã®ã§ãããŒã 10151 ããã³ 10159 ã®äœ¿çšãæå®ããŸããã
hostNetwork: true
ãŸããããã©ã«ãã® kube-scheduler ãšåãããŒã (10251 ããã³ 10259) ã䜿çšããããšã¯ã§ããŸããã - --config ãã©ã¡ãŒã¿ã䜿çšããŠããµãŒãã¹ãéå§ããæ§æãã¡ã€ã«ãæå®ããŸããã
- ãã¹ãããã®æ§æãã¡ã€ã« (scheduler-custom.conf) ããã³ã¹ã±ãžã¥ãŒãªã³ã° ããªã·ãŒ ãã¡ã€ã« (scheduler-custom-policy-config.json) ã®ããŠã³ãã®æ§æ
kube-scheduler ã«ã¯ããã©ã«ããšåæ§ã®æš©éãå¿ èŠã§ããããšãå¿ããªãã§ãã ããã ã¯ã©ã¹ã¿ãŒã®åœ¹å²ãç·šéããŸãã
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"
äž»ãªå€æŽç¹ã«ã€ããŠç°¡åã«èª¬æããŸãã
- ããã§ã¯ãschedulerName ã kube-scheduler-cron ãµãŒãã¹ã®ååã«èšå®ããŸãã
- ãã©ã¡ãŒã¿ã§
lockObjectName
ãŸãããµãŒãã¹ã®ååãèšå®ãããã©ã¡ãŒã¿ã次ã®ãšããã§ããããšã確èªããå¿ èŠããããŸããleaderElect
true ã«èšå®ããŸã (ãã¹ã¿ãŒ ããŒãã XNUMX ã€ããå Žåã¯ãããã false ã«èšå®ã§ããŸã)ã - ãã©ã¡ãŒã¿ã«ã¹ã±ãžã¥ãŒã«ããªã·ãŒã®èª¬æãå«ããã¡ã€ã«ãžã®ãã¹ãæå®ããŸãã
algorithmSource
.
ããŒã®ãã©ã¡ãŒã¿ãç·šéãã XNUMX çªç®ã®ãã€ã³ãã詳ããèŠãŠã¿ã䟡å€ããããŸãã leaderElection
ã èé害æ§ã確ä¿ããããã«ã(leaderElect
) åäžã®ãšã³ããã€ã³ãã䜿çšããŠãkube ã¹ã±ãžã¥ãŒã©ãŒã®ãããéã®ãªãŒã㌠(ãã¹ã¿ãŒ) ãéžæããããã»ã¹ (resourceLock
) ååä»ã kube-scheduler-cron (lockObjectName
) kube-system åå空é (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 ãšåä»ããXNUMX ã€ã®ãã¹ã¿ãŒ ããŒãäžã®ãã¹ /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 ã®ä»æ§ã§ãããããã¹ã±ãžã¥ãŒã«ããããã®ãã¹ãŠã®ãªã¯ãšã¹ããæ°ãã kube-scheduler ã«ãã£ãŠåŠçãããå¿ èŠãããããšã瀺ãããšã ãã§ãã
...
jobTemplate:
spec:
template:
spec:
schedulerName: kube-scheduler-cron
...
ãŸãšã
æçµçã«ãç¬èªã®ã¹ã±ãžã¥ãŒãªã³ã° ããªã·ãŒ ã»ãããåããè¿œå ã® kube ã¹ã±ãžã¥ãŒã©ãŒãååŸããŸããããã®äœæ¥ã¯ kubelet ã«ãã£ãŠçŽæ¥ç£èŠãããŸãã ããã«ãå€ããªãŒããŒãäœããã®çç±ã§å©çšã§ããªããªã£ãå Žåã«åããŠãkube ã¹ã±ãžã¥ãŒã©ãŒã®ãããéã§æ°ãããªãŒããŒãéžåºããããã«èšå®ããŸããã
éåžžã®ã¢ããªã±ãŒã·ã§ã³ãšãµãŒãã¹ã¯åŒãç¶ãããã©ã«ãã® kube-scheduler ãéããŠã¹ã±ãžã¥ãŒã«ããããã¹ãŠã® cron ã¿ã¹ã¯ã¯æ°ãããã®ã«å®å šã«è»¢éãããŸããã cron ã¿ã¹ã¯ã«ãã£ãŠçæãããè² è·ã¯ããã¹ãŠã®ããŒãã«åçã«åæ£ãããããã«ãªããŸããã cron ã¿ã¹ã¯ã®ã»ãšãã©ããããžã§ã¯ãã®ã¡ã€ã³ ã¢ããªã±ãŒã·ã§ã³ãšåãããŒãã§å®è¡ãããããšãèæ ®ãããšããªãœãŒã¹äžè¶³ã«ãããããã®ç§»åã®ãªã¹ã¯ãå€§å¹ ã«è»œæžãããŸãã è¿œå ã® kube-scheduler ãå°å ¥ããåŸãcron ã¿ã¹ã¯ã®äžåäžãªã¹ã±ãžã¥ãŒã«ã®åé¡ã¯çºçããªããªããŸããã
ç§ãã¡ã®ããã°ã®ä»ã®èšäºããèªã¿ãã ããã
Calico ã䜿çšãã Kubernetes ã¯ã©ã¹ã¿ãŒã®ãã©ãã£ãã¯ç®¡ç Calico ã®ãããã¯ãŒã¯ ããªã·ãŒ ãªãã·ã§ã³ãç解ãã Linux conntrack ãåéã§ã¯ãªããªã£ãã IOTA転éã®4ã€ã®äŸ ããŠã³ã¿ã€ã ãªã㧠Kubernetes ã¯ã©ã¹ã¿ãŒãã¢ããã°ã¬ãŒããã ãŒãããŠã³ã¿ã€ã ã®å°å ¥ãšããŒã¿ããŒã¹ Kubernetes: ã·ã¹ãã ãªãœãŒã¹ç®¡çãæ§æããããšããªãããã»ã©éèŠãªã®ã§ãããã?
åºæïŒ habr.com