Kube-scheduler ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π΅ΠΎΡΡΠ΅ΠΌΠ»Π΅ΠΌΡΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠΌ Kubernetes, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ Π·Π° ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΠ΄ΠΎΠ² ΠΏΠΎ Π½ΠΎΠ΄Π°ΠΌ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ Π·Π°Π΄Π°Π½Π½ΡΠΌΠΈ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ°ΠΌΠΈ. ΠΠ°ΡΠ°ΡΡΡΡ, Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΡΠΊΡΠΏΠ»ΡΠ°ΡΠ°ΡΠΈΠΈ Kubernetes-ΠΊΠ»Π°ΡΡΠ΅ΡΠ° Π½Π°ΠΌ Π½Π΅ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ Π·Π°Π΄ΡΠΌΡΠ²Π°ΡΡΡΡ ΠΎ ΡΠΎΠΌ, ΠΏΠΎ ΠΊΠ°ΠΊΠΈΠΌ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ°ΠΌ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΠ΄ΠΎΠ², ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π½Π°Π±ΠΎΡ ΠΏΠΎΠ»ΠΈΡΠΈΠΊ Π΄Π΅ΡΠΎΠ»ΡΠ½ΠΎΠ³ΠΎ kube-schedulerβa ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ Π΄Π»Ρ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π° ΠΏΠΎΠ²ΡΠ΅Π΄Π½Π΅Π²Π½ΡΡ Π·Π°Π΄Π°Ρ. ΠΠ΄Π½Π°ΠΊΠΎ Π²ΡΡΡΠ΅ΡΠ°ΡΡΡΡ ΡΠΈΡΡΠ°ΡΠΈΠΈ, ΠΊΠΎΠ³Π΄Π° Π½Π°ΠΌ Π²Π°ΠΆΠ½ΠΎ ΡΠΎΠ½ΠΊΠΎ ΡΠΏΡΠ°Π²Π»ΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠΌ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΏΠΎΠ΄ΠΎΠ², ΠΈ Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΠΎΠΉ Π·Π°Π΄Π°ΡΠΈ Π΅ΡΡΡ Π΄Π²Π° ΠΏΡΡΠΈ:
- Π‘ΠΎΠ·Π΄Π°ΡΡ kube-scheduler Ρ ΠΊΠ°ΡΡΠΎΠΌΠ½ΡΠΌ Π½Π°Π±ΠΎΡΠΎΠΌ ΠΏΡΠ°Π²ΠΈΠ»
- ΠΠ°ΠΏΠΈΡΠ°ΡΡ ΡΠ²ΠΎΠΉ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ scheduler ΠΈ Π½Π°ΡΡΠΈΡΡ Π΅Π³ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ Π·Π°ΠΏΡΠΎΡΠ°ΠΌΠΈ API-ΡΠ΅ΡΠ²Π΅ΡΠ°
Π ΡΠ°ΠΌΠΊΠ°Ρ Π΄Π°Π½Π½ΠΎΠΉ ΡΡΠ°ΡΡΠΈ Ρ ΠΎΠΏΠΈΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΏΡΠ½ΠΊΡΠ° Π΄Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π½Π΅ΡΠ°Π²Π½ΠΎΠΌΠ΅ΡΠ½ΠΎΠ³ΠΎ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎΠ΄ΠΎΠ² Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· Π½Π°ΡΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ².
ΠΡΠ°ΡΠΊΠ°Ρ Π²Π²ΠΎΠ΄Π½Π°Ρ ΠΎ ΡΠ°Π±ΠΎΡΠ΅ kube-schedulerβa
Π‘ΡΠΎΠΈΡ ΠΎΡΠΎΠ±ΠΎ ΠΎΡΠΌΠ΅ΡΠΈΡΡ ΡΠΎΡ ΡΠ°ΠΊΡ, ΡΡΠΎ kube-scheduler Π½Π΅ ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ Π·Π° Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΠ΄ΠΎΠ² β ΠΎΠ½ ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ Π·Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ΄Ρ, Π½Π° ΠΊΠΎΡΠΎΡΡΡ Π½ΡΠΆΠ½ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΡΠΈΡΡ ΠΏΠΎΠ΄. ΠΠ½Π°ΡΠ΅ Π³ΠΎΠ²ΠΎΡΡ, ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΡΠ°Π±ΠΎΡΡ kube-schedulerβa β ΡΡΠΎ ΠΈΠΌΡ Π½ΠΎΠ΄Ρ, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΎΠ½ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ API-ΡΠ΅ΡΠ²Π΅ΡΡ Π½Π° Π·Π°ΠΏΡΠΎΡ ΠΎ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΠΈ Π½Π° ΡΡΠΎΠΌ Π΅Π³ΠΎ ΡΠ°Π±ΠΎΡΠ° Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°Π΅ΡΡΡ.
Π‘Π½Π°ΡΠ°Π»Π° kube-scheduler ΡΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΏΠΈΡΠΎΠΊ Π½ΠΎΠ΄, Π½Π° ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π·Π°ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½ ΠΏΠΎΠ΄ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ°ΠΌΠΈ predicates. ΠΠ°Π»Π΅Π΅ ΠΊΠ°ΠΆΠ΄Π°Ρ Π½ΠΎΠ΄Π° ΠΈΠ· ΡΡΠΎΠ³ΠΎ ΡΠΏΠΈΡΠΊΠ° ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΎΡΠΊΠΎΠ² Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ°ΠΌΠΈ priorites. Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π²ΡΠ±ΠΈΡΠ°Π΅ΡΡΡ Π½ΠΎΠ΄Π°, Π½Π°Π±ΡΠ°Π²ΡΠ°Ρ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΎΡΠΊΠΎΠ². ΠΡΠ»ΠΈ Π΅ΡΡΡ Π½ΠΎΠ΄Ρ, Π½Π°Π±ΡΠ°Π²ΡΠΈΠ΅ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΉ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ Π±Π°Π»Π», Π²ΡΠ±ΠΈΡΠ°Π΅ΡΡΡ ΡΠ»ΡΡΠ°ΠΉΠ½Π°Ρ. Π‘ΠΎ ΡΠΏΠΈΡΠΊΠΎΠΌ ΠΈ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ΠΌ ΠΏΠΎΠ»ΠΈΡΠΈΠΊ predicates (filtering) ΠΈ priorites (scoring) ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡΡΡΡ Π²
ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΠ΅Π»Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ
ΠΠ΅ΡΠΌΠΎΡΡΡ Π½Π° Π±ΠΎΠ»ΡΡΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ°Π·Π½ΡΡ Kubernetes ΠΊΠ»Π°ΡΡΠ΅ΡΠΎΠ² Π½Π° ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π½ΠΈΠΈ Π² Nixys, Π²ΠΏΠ΅ΡΠ²ΡΠ΅ Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎΠ΄ΠΎΠ² ΠΌΡ ΡΡΠΎΠ»ΠΊΠ½ΡΠ»ΠΈΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π½Π΅Π΄Π°Π²Π½ΠΎ, ΠΊΠΎΠ³Π΄Π° Π΄Π»Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· Π½Π°ΡΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² ΠΏΠΎΡΠ²ΠΈΠ»Π°ΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ Π·Π°ΠΏΡΡΠΊΠ° Π±ΠΎΠ»ΡΡΠΎΠ³ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ΅ΡΠΊΠΈΡ Π·Π°Π΄Π°Ρ (~100 ΡΡΡΠ½ΠΎΡΡΠ΅ΠΉ CronJob). Π§ΡΠΎΠ±Ρ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ ΡΠΏΡΠΎΡΡΠΈΡΡ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΈΠΌΠ΅ΡΠ° Π²ΠΎΠ·ΡΠΌΡΠΌ ΠΎΠ΄ΠΈΠ½ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡ, Π² ΡΠ°ΠΌΠΊΠ°Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΠ°Π· Π² ΠΌΠΈΠ½ΡΡΡ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ cron-Π·Π°Π΄Π°ΡΠ°, ΡΠΎΠ·Π΄Π°ΡΡΠ°Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ Π½Π°Π³ΡΡΠ·ΠΊΡ Π½Π° CPU. ΠΠ»Ρ ΡΠ°Π±ΠΎΡΡ cron-Π·Π°Π΄Π°ΡΠΈ Π±ΡΠ»ΠΈ Π²ΡΠ΄Π΅Π»Π΅Π½Ρ ΡΡΠΈ Π°Π±ΡΠΎΠ»ΡΡΠ½ΠΎ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠ΅ ΠΏΠΎ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠ°ΠΌ Π½ΠΎΠ΄Ρ (24 vCPU Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ).
ΠΡΠΈ ΡΡΠΎΠΌ Π½Π΅Π»ΡΠ·Ρ Ρ ΡΠΎΡΠ½ΠΎΡΡΡΡ ΡΠΊΠ°Π·Π°ΡΡ ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ CronJob, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ±ΡΡΠΌ Π²Ρ ΠΎΠ΄Π½ΡΡ Π΄Π°Π½Π½ΡΡ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ ΠΌΠ΅Π½ΡΠ΅ΡΡΡ. Π ΡΡΠ΅Π΄Π½Π΅ΠΌ, ΠΏΡΠΈ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎΠΉ ΡΠ°Π±ΠΎΡΠ΅ kube-schedulerβa, Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π½ΠΎΠ΄Π΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ 3-4 ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° Π·Π°Π΄Π°Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΎΠ·Π΄Π°ΡΡ ~20-30% Π½Π°Π³ΡΡΠ·ΠΊΠΈ Π½Π° CPU ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π½ΠΎΠ΄Ρ:
Π‘Π°ΠΌΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΈΠ½ΠΎΠ³Π΄Π° ΠΏΠΎΠ΄Ρ cron-Π·Π°Π΄Π°ΡΠΈ ΠΏΠ΅ΡΠ΅ΡΡΠ°Π²Π°Π»ΠΈ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°ΡΡΡΡ Π½Π° ΠΎΠ΄Π½Ρ ΠΈΠ· ΡΡΡΡ Π½ΠΎΠ΄. Π’ΠΎ Π΅ΡΡΡ, Π² ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π½Π° ΠΎΠ΄Π½Ρ ΠΈΠ· Π½ΠΎΠ΄ Π½Π΅ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π»ΠΎΡΡ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Π°, ΡΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ Π½Π° Π΄Π²ΡΡ Π΄ΡΡΠ³ΠΈΡ Π½ΠΎΠ΄Π°Ρ ΡΠ°Π±ΠΎΡΠ°Π»ΠΎ ΠΏΠΎ 6-8 ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠ² Π·Π°Π΄Π°Π½ΠΈΡ ΡΠΎΠ·Π΄Π°Π²Π°Ρ ~40-60% Π½Π°Π³ΡΡΠ·ΠΊΠΈ Π½Π° CPU:
ΠΡΠΎΠ±Π»Π΅ΠΌΠ° ΠΏΠΎΠ²ΡΠΎΡΡΠ»Π°ΡΡ Ρ Π°Π±ΡΠΎΠ»ΡΡΠ½ΠΎ ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎΠΉ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ½ΠΎΡΡΡΡ ΠΈ ΠΈΠ·ΡΠ΅Π΄ΠΊΠ° ΠΊΠΎΡΡΠ΅Π»ΠΈΡΠΎΠ²Π°Π»Π° Ρ ΠΌΠΎΠΌΠ΅Π½ΡΠΎΠΌ Π²ΡΠΊΠ°ΡΠΊΠΈ Π½ΠΎΠ²ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ ΠΊΠΎΠ΄Π°.
ΠΠΎΠ²ΡΡΠΈΠ² ΡΡΠΎΠ²Π΅Π½Ρ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ kube-schedulerβa Π΄ΠΎ 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-schedulerβΠ°. ΠΠ΄Π½Π°ΠΊΠΎ Π·Π΄Π΅ΡΡ ΠΌΡ ΡΡΠΎΠ»ΠΊΠ½ΡΠ»ΠΈΡΡ Ρ Π΄Π²ΡΠΌΡ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΠΌΠΈ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡΠΌΠΈ:
- ΠΠ° ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΌ ΡΡΠΎΠ²Π½Π΅ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ (10) ΠΎΡΡΠ°ΠΆΠ°Π΅ΡΡΡ Π½Π°Π±ΠΎΡ ΠΎΡΠΊΠΎΠ² ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΌ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ°ΠΌ. Π ΠΏΡΠΈΠ²Π΅Π΄ΡΠ½Π½ΠΎΠΌ Π²ΡΡΠ΅ ΠΎΡΡΡΠ²ΠΊΠ΅ Π»ΠΎΠ³ΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ ΠΏΠΎ Π²ΡΠ΅ΠΌ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ°ΠΌ, ΠΎΡΡΠ°ΠΆΡΠ½Π½ΡΠΌ Π² Π»ΠΎΠ³Π°Ρ
, Π½ΠΎΠ΄Ρ Π½Π°Π±ΠΈΡΠ°ΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΎΡΠΊΠΎΠ² ΠΏΡΠΈ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎΠΌ ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ½ΠΎΠΌ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ, ΠΎΠ΄Π½Π°ΠΊΠΎ ΡΠΈΠ½Π°Π»ΡΠ½ΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π² ΡΠ»ΡΡΠ°Π΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ Π²ΡΠ²ΠΎΠ΄, ΡΡΠΎ ΠΏΠΎ ΠΊΠ°ΠΊΠΈΠΌ-ΡΠΎ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ°ΠΌ ΠΏΠΎΠ΄ΡΡΡΡ ΠΎΡΠΊΠΎΠ² ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ βΠ·Π° ΠΊΠ°Π΄ΡΠΎΠΌβ, ΠΈ Ρ Π½Π°Ρ Π½Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΏΠΎΠ½ΡΡΡ ΠΏΠΎ ΠΊΠ°ΠΊΠΎΠΌΡ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΡ Π½ΠΎΠ΄Π° Π½Π΅ Π΄ΠΎΠ±ΡΠ°Π»Π° ΠΎΡΠΊΠΈ. ΠΠ°Π½Π½ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΌΡ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΠΎΠΏΠΈΡΠ°Π»ΠΈ Π²
issue ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ Kubernetes Π½Π° Github. ΠΠ° ΠΌΠΎΠΌΠ΅Π½Ρ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ ΡΡΠ°ΡΡΠΈ Π±ΡΠ» ΠΏΠΎΠ»ΡΡΠ΅Π½ ΠΎΡΠ²Π΅Ρ ΠΎΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ², ΡΡΠΎ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π±ΡΠ΄Π΅Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° Π² ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡΡ Kubernetes v1.15,1.16 ΠΈ 1.17. - ΠΠ΅Ρ ΠΏΡΠΎΡΡΠΎΠ³ΠΎ ΡΠΏΠΎΡΠΎΠ±Π° ΠΏΠΎΠ½ΡΡΡ Ρ ΠΊΠ°ΠΊΠΈΠΌ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎ Π½Π°Π±ΠΎΡΠΎΠΌ ΠΏΠΎΠ»ΠΈΡΠΈΠΊ Π² Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ kube-scheduler. ΠΠ°, Π²
Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΡΡΠΎΡ ΡΠΏΠΈΡΠΎΠΊ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½, Π½ΠΎ Π² Π½ΡΠΌ Π½Π΅Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΊΠ°ΠΊΠΈΠ΅ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎ Π²Π΅ΡΠ° Π²ΡΡΡΠ°Π²Π»Π΅Π½Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· ΠΏΠΎΠ»ΠΈΡΠΈΠΊ priorites. Π£Π²ΠΈΠ΄Π΅ΡΡ Π²Π΅ΡΠ° ΠΈΠ»ΠΈ ΠΎΡΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ Π΄Π΅ΡΠΎΠ»ΡΠ½ΠΎΠ³ΠΎ kube-schedulerβa ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ Π²ΠΈΡΡ ΠΎΠ΄Π½ΠΈΠΊΠ°Ρ .
Π‘ΡΠΎΠΈΡ ΠΎΡΠΌΠ΅ΡΠΈΡΡ, ΠΎΠ΄ΠΈΠ½ ΡΠ°Π· Π½Π°ΠΌ ΡΠ΄Π°Π»ΠΎΡΡ Π·Π°ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°ΡΡ, ΡΡΠΎ Π½ΠΎΠ΄Π° Π½Π΅ Π΄ΠΎΠ±ΠΈΡΠ°Π»Π° ΠΎΡΠΊΠΈ ΠΏΠΎ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ΅ ImageLocalityPriority, ΠΊΠΎΡΠΎΡΠ°Ρ Π½Π°ΡΠΈΡΠ»ΡΠ΅Ρ ΠΎΡΠΊΠΈ Π½ΠΎΠ΄Π΅, Π΅ΡΠ»ΠΈ Π½Π° Π½Π΅ΠΉ ΡΠΆΠ΅ Π΅ΡΡΡ ΠΎΠ±ΡΠ°Π·, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠΉ Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. Π’. Π΅. Π² ΠΌΠΎΠΌΠ΅Π½Ρ Π²ΡΠΊΠ°ΡΠΊΠΈ Π½ΠΎΠ²ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ cron-Π·Π°Π΄Π°ΡΠ° ΡΡΠΏΠ΅Π²Π°Π»Π° Π·Π°ΠΏΡΡΠΊΠ°ΡΡΡΡ Π½Π° Π΄Π²ΡΡ Π½ΠΎΠ΄Π°Ρ , Π²ΡΠΊΠ°ΡΠΈΠ²Π°Ρ Π½Π° Π½ΠΈΡ Π½ΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ°Π· ΠΈΠ· docker registry, ΠΈ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ Π΄Π²Π΅ Π½ΠΎΠ΄Ρ ΠΏΠΎΠ»ΡΡΠ°Π»ΠΈ Π±ΠΠ»ΡΡΠΈΠΉ ΠΈΡΠΎΠ³ΠΎΠ²ΡΠΉ Π±Π°Π»Π» ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΡΠ΅ΡΡΠ΅ΠΉ.
ΠΠ°ΠΊ Ρ ΡΠΆΠ΅ ΠΏΠΈΡΠ°Π» Π²ΡΡΠ΅, Π² Π»ΠΎΠ³Π°Ρ ΠΌΡ Π½Π΅ Π²ΠΈΠ΄ΠΈΠΌ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎΠ± ΠΎΡΠ΅Π½ΠΊΠ΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ ImageLocalityPriority, ΠΏΠΎΡΡΠΎΠΌΡ, ΡΡΠΎΠ±Ρ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ ΡΠ²ΠΎΡ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΌΡ ΡΠΏΡΠ»ΠΈΠ»ΠΈ ΠΎΠ±ΡΠ°Π· Ρ Π½ΠΎΠ²ΠΎΠΉ Π²Π΅ΡΡΠΈΠ΅ΠΉ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π° ΡΡΠ΅ΡΡΡ Π½ΠΎΠ΄Ρ, ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π·Π°ΡΠ°Π±ΠΎΡΠ°Π»ΠΎ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ. ΠΠΌΠ΅Π½Π½ΠΎ ΠΈΠ·-Π·Π° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ ImageLocalityPriority ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π½Π°Π±Π»ΡΠ΄Π°Π»Π°ΡΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΠ΅Π΄ΠΊΠΎ, ΡΠ°ΡΠ΅ ΠΎΠ½Π° Π±ΡΠ»Π° ΡΠ²ΡΠ·Π°Π½Π° Ρ ΡΠ΅ΠΌ-ΡΠΎ Π΄ΡΡΠ³ΠΈΠΌ. ΠΠ·-Π·Π° ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΠΌΡ Π½Π΅ ΠΌΠΎΠ³Π»ΠΈ ΠΏΠΎΠ»Π½ΠΎΡΠ΅Π½Π½ΠΎ Π΄Π΅Π±Π°ΠΆΠΈΡΡ ΠΊΠ°ΠΆΠ΄ΡΡ ΠΈΠ· ΠΏΠΎΠ»ΠΈΡΠΈΠΊ Π² ΡΠΏΠΈΡΠΊΠ΅ priorites Π΄Π΅ΡΠΎΠ»ΡΠ½ΠΎΠ³ΠΎ kube-schedulerβa, Ρ Π½Π°Ρ ΠΏΠΎΡΠ²ΠΈΠ»Π°ΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ Π² Π³ΠΈΠ±ΠΊΠΎΠΌ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠΈ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ°ΠΌΠΈ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎΠ΄ΠΎΠ².
ΠΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°ΡΠΈ
ΠΡ Ρ ΠΎΡΠ΅Π»ΠΈ, ΡΡΠΎΠ±Ρ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π±ΡΠ»ΠΎ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ ΡΠΎΡΠ΅ΡΠ½ΡΠΌ, ΡΠΎ Π΅ΡΡΡ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ ΡΡΡΠ½ΠΎΡΡΠΈ Kubernetes (ΡΡΡ ΠΈΠΌΠ΅Π΅ΡΡΡ Π²Π²ΠΈΠ΄Ρ Π΄Π΅ΡΠΎΠ»ΡΠ½ΡΠΉ kube-scheduler) Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΎΡΡΠ°Π²Π°ΡΡΡΡ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½ΡΠΌΠΈ. ΠΠ°ΠΌ Π½Π΅ Ρ ΠΎΡΠ΅Π»ΠΎΡΡ ΡΠ΅ΡΠ°ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΌΠ΅ΡΡΠ΅ ΠΈ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π΅Ρ Π² Π΄ΡΡΠ³ΠΎΠΌ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΌΡ ΠΏΡΠΈΡΠ»ΠΈ ΠΊ Π΄Π²ΡΠΌ Π²Π°ΡΠΈΠ°Π½ΡΠ°ΠΌ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ»ΠΈ ΠΎΠ·Π²ΡΡΠ΅Π½Ρ Π²ΠΎ Π²Π²Π΅Π΄Π΅Π½ΠΈΠΈ ΠΊ ΡΡΠ°ΡΡΠ΅ β ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ schedulerβa ΠΈΠ»ΠΈ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΠ²ΠΎΠ΅Π³ΠΎ. ΠΡΠ½ΠΎΠ²Π½ΠΎΠ΅ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ cron-Π·Π°Π΄Π°Ρ β ΡΠ°Π²Π½ΠΎΠΌΠ΅ΡΠ½ΠΎΠ΅ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π°Π³ΡΡΠ·ΠΊΠΈ ΠΏΠΎ ΡΡΡΠΌ Π½ΠΎΠ΄Π°ΠΌ. ΠΡΠΎ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΠΈΡΡ ΡΠΆΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΌΠΈ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ°ΠΌΠΈ kube-schedulerβa, ΠΏΠΎΡΡΠΎΠΌΡ Π΄Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π½Π°ΡΠ΅ΠΉ Π·Π°Π΄Π°ΡΠΈ Π½Π΅Ρ ΡΠΌΡΡΠ»Π° ΠΏΠΈΡΠ°ΡΡ ΡΠ²ΠΎΠΉ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ scheduler.
ΠΠ½ΡΡΡΡΠΊΡΠΈΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΈ Deployment Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ kube-schedulerβa ΠΎΠΏΠΈΡΠ°Π½Ρ Π²
- Π‘Π΅ΡΠ²ΠΈΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΡΠ°Π·Π²ΡΡΠ½ΡΡ ΠΊΠ°ΠΊ Static Pod Π½Π° Π²ΡΠ΅Ρ ΠΌΠ°ΡΡΠ΅ΡΠ°Ρ ΠΊΠ»Π°ΡΡΠ΅ΡΠ°
- ΠΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅Π½Π° ΠΎΡΠΊΠ°Π·ΠΎΡΡΡΠΎΠΉΡΠΈΠ²ΠΎΡΡΡ Π½Π° ΡΠ»ΡΡΠ°ΠΉ Π½Π΅Π΄ΠΎΡΡΡΠΏΠ½ΠΎΡΡΠΈ Π°ΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Π° Ρ kube-schedulerβΠΎΠΌ
- ΠΡΠ½ΠΎΠ²Π½ΡΠΌ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠΎΠΌ ΠΏΡΠΈ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π΄ΠΎΡΡΡΠΏΠ½ΡΡ ΡΠ΅ΡΡΡΡΠΎΠ² Π½Π° Π½ΠΎΠ΄Π΅ (LeastRequestedPriority)
Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠ΅ΡΠ΅Π½ΠΈΡ
Π‘ΡΠΎΠΈΡ ΡΡΠ°Π·Ρ ΠΎΡΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ Π²ΡΠ΅ ΡΠ°Π±ΠΎΡΡ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΏΡΠΎΠ²ΠΎΠ΄ΠΈΡΡ Π² Kubernetes v1.14.7, Ρ.ΠΊ. ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΡΠ° Π²Π΅ΡΡΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»Π°ΡΡ Π² ΠΏΡΠΎΠ΅ΠΊΡΠ΅. ΠΠ°ΡΠ½ΡΠΌ Ρ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ ΠΌΠ°Π½ΠΈΡΠ΅ΡΡΠ° Π΄Π»Ρ Π½Π°ΡΠ΅Π³ΠΎ Π½ΠΎΠ²ΠΎΠ³ΠΎ kube-schedulerβa. ΠΠ° ΠΎΡΠ½ΠΎΠ²Ρ Π²ΠΎΠ·ΡΠΌΡΠΌ ΠΌΠ°Π½ΠΈΡΠ΅ΡΡ Π΄Π΅ΡΠΎΠ»ΡΠ½ΠΎΠ³ΠΎ (/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βa Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ--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 (Π² ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ Ρ Π²Π°Ρ ΠΎΠ΄Π½Π° ΠΌΠ°ΡΡΠ΅Ρ-Π½ΠΎΠ΄Π°, ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΡΡΠ°Π²ΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ false). - Π£ΠΊΠ°Π·Π°Π»ΠΈ ΠΏΡΡΡ ΠΊ ΡΠ°ΠΉΠ»Ρ Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ΠΌ ΠΏΠΎΠ»ΠΈΡΠΈΠΊ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π² ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ΅
algorithmSource
.
Π‘ΡΠΎΠΈΡ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡΡ Π½Π° Π²ΡΠΎΡΠΎΠΌ ΠΏΡΠ½ΠΊΡΠ΅, Π³Π΄Π΅ ΠΌΡ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΡΠ΅ΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π΄Π»Ρ ΠΊΠ»ΡΡΠ° leaderElection
. ΠΠ»Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ ΠΎΡΠΊΠ°Π·ΠΎΡΡΡΠΎΠΉΡΠΈΠ²ΠΎΡΡΠΈ ΠΌΡ Π°ΠΊΡΠΈΠ²ΠΈΡΠΎΠ²Π°Π»ΠΈ (leaderElect
) ΠΏΡΠΎΡΠ΅ΡΡ Π²ΡΠ±ΠΎΡΠ° Π²Π΅Π΄ΡΡΠ΅Π³ΠΎ (ΠΌΠ°ΡΡΠ΅ΡΠ°) ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΠΎΠ΄Π°ΠΌΠΈ Π½Π°ΡΠ΅Π³ΠΎ kube-schedulerβa Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π΅Π΄ΠΈΠ½ΠΎΠ³ΠΎ Π΄Π»Ρ Π½ΠΈΡ
endpoint (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). Π Π΄Π°Π»Π΅Π΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ ΠΎΡΠ΅Π½ΠΊΠ° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π½ΠΎΠ΄Ρ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ Π½Π°Π±ΠΎΡΠΎΠΌ ΠΏΠΎΠ»ΠΈΡΠΈΠΊ Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ priorities. ΠΠ»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΠ»ΠΎΠ²ΠΈΠΉ Π½Π°ΡΠ΅ΠΉ Π·Π°Π΄Π°ΡΠΈ ΠΌΡ ΠΏΠΎΡΡΠΈΡΠ°Π»ΠΈ, ΡΡΠΎ ΡΠ°ΠΊΠΎΠΉ Π½Π°Π±ΠΎΡ ΠΏΠΎΠ»ΠΈΡΠΈΠΊ Π±ΡΠ΄Π΅Ρ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΡΠΌ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ. ΠΠ°ΠΏΠΎΠΌΠ½Ρ, ΡΡΠΎ Π½Π°Π±ΠΎΡ ΠΏΠΎΠ»ΠΈΡΠΈΠΊ Ρ ΠΈΡ
ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΡΠΌ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ΠΌ Π΄ΠΎΡΡΡΠΏΠ΅Π½ Π²
ΠΠ°Π½ΠΈΡΠ΅ΡΡ Π½ΠΎΠ²ΠΎΠ³ΠΎ 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:{}]'
Π’Π΅ΠΏΠ΅ΡΡ ΠΎΡΡΠ°ΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΊΠ°Π·Π°ΡΡ Π² specβΠ΅ Π½Π°ΡΠ΅ΠΉ CronJobβΡ, ΡΡΠΎ Π²ΡΠ΅ Π·Π°ΠΏΡΠΎΡΡ Π½Π° ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π΅Ρ podβΠΎΠ² Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ Π½Π°Ρ Π½ΠΎΠ²ΡΠΉ kube-scheduler:
...
jobTemplate:
spec:
template:
spec:
schedulerName: kube-scheduler-cron
...
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
Π ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΌ ΠΈΡΠΎΠ³Π΅ ΠΌΡ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ kube-scheduler Ρ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΌ Π½Π°Π±ΠΎΡΠΎΠΌ ΠΏΠΎΠ»ΠΈΡΠΈΠΊ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π·Π° ΡΠ°Π±ΠΎΡΠΎΠΉ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΠ»Π΅Π΄ΠΈΡ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ kubelet. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ ΠΌΡ Π½Π°ΡΡΡΠΎΠΈΠ»ΠΈ Π²ΡΠ±ΠΎΡΡ Π½ΠΎΠ²ΠΎΠ³ΠΎ Π»ΠΈΠ΄Π΅ΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΠΎΠ΄Π°ΠΌΠΈ Π½Π°ΡΠ΅Π³ΠΎ kube-schedulerβΠ° Π² ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ ΡΡΠ°ΡΡΠΉ Π»ΠΈΠ΄Π΅Ρ ΠΏΠΎ ΠΊΠ°ΠΊΠΈΠΌ-ΡΠΎ ΠΏΡΠΈΡΠΈΠ½Π°ΠΌ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π½Π΅Π΄ΠΎΡΡΡΠΏΠ΅Π½.
ΠΠ±ΡΡΠ½ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ ΡΠ΅ΡΠ²ΠΈΡΡ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡΡ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°ΡΡΡΡ ΡΠ΅ΡΠ΅Π· Π΄Π΅ΡΠΎΠ»ΡΠ½ΡΠΉ kube-scheduler, Π° Π²ΡΠ΅ cron-Π·Π°Π΄Π°ΡΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΏΠ΅ΡΠ΅Π²Π΅Π΄Π΅Π½Ρ Π½Π° Π½ΠΎΠ²ΡΠΉ. ΠΠ°Π³ΡΡΠ·ΠΊΠ°, ΡΠΎΠ·Π΄Π°Π²Π°Π΅ΠΌΠ°Ρ cron-Π·Π°Π΄Π°ΡΠ°ΠΌΠΈ, ΡΠ΅ΠΏΠ΅ΡΡ ΡΠ°Π²Π½ΠΎΠΌΠ΅ΡΠ½ΠΎ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΠΏΠΎ Π²ΡΠ΅ΠΌ Π½ΠΎΠ΄Π°ΠΌ. Π£ΡΠΈΡΡΠ²Π°Ρ, ΡΡΠΎ Π±ΠΎΠ»ΡΡΠ°Ρ ΡΠ°ΡΡΡ cron-Π·Π°Π΄Π°Ρ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π½Π° ΡΠ΅Ρ ΠΆΠ΅ Π½ΠΎΠ΄Π°Ρ , ΡΡΠΎ ΠΈ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°, ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΎ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠ½ΠΈΠ·ΠΈΡΡ ΡΠΈΡΠΊ ΠΏΠ΅ΡΠ΅Π΅Π·Π΄Π° ΠΏΠΎΠ΄ΠΎΠ² ΠΈΠ·-Π·Π° Π½Π΅Ρ Π²Π°ΡΠΊΠΈ ΡΠ΅ΡΡΡΡΠΎΠ². ΠΠΎΡΠ»Π΅ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ kube-schedulerβΠ°, ΠΏΡΠΎΠ±Π»Π΅ΠΌ Ρ Π½Π΅ΡΠ°Π²Π½ΠΎΠΌΠ΅ΡΠ½ΡΠΌ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ cron-Π·Π°Π΄Π°Ρ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π»ΠΎ.
Π’Π°ΠΊΠΆΠ΅ ΡΠΈΡΠ°ΠΉΡΠ΅ Π΄ΡΡΠ³ΠΈΠ΅ ΡΡΠ°ΡΡΠΈ Π² Π½Π°ΡΠ΅ΠΌ Π±Π»ΠΎΠ³Π΅:
Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΡΠ°ΡΠΈΠΊΠΎΠΌ Π² Kubernetes-ΠΊΠ»Π°ΡΡΠ΅ΡΠ΅ Ρ Calico ΠΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠ΅ΡΠ΅Π²ΡΡ ΠΏΠΎΠ»ΠΈΡΠΈΠΊ Ρ Calico ΠΠΎΠ³Π΄Π° Linux conntrack Π²Π°ΠΌ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ ΡΠΎΠ²Π°ΡΠΈΡ 4 ΠΏΡΠΈΠΌΠ΅ΡΠ° iota-ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΠΉ ΠΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Kubernetes-ΠΊΠ»Π°ΡΡΠ΅ΡΠ° Π±Π΅Π· ΠΏΡΠΎΡΡΠΎΡ Zero Downtime Deployment ΠΈ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ Kubernetes: ΠΏΠΎΡΠ΅ΠΌΡ ΡΠ°ΠΊ Π²Π°ΠΆΠ½ΠΎ Π½Π°ΡΡΡΠΎΠΈΡΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ΅ΡΡΡΡΠ°ΠΌΠΈ ΡΠΈΡΡΠ΅ΠΌΡ?
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com