เบเบฒเบ™เบชเป‰เบฒเบ‡เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เป€เบงเบฅเบฒ kube เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบ”เป‰เบงเบเบŠเบธเบ”เบเบปเบ”เบฅเบฐเบšเบฝเบšเบเบฒเบ™เบเปเบฒเบ™เบปเบ”เป€เบงเบฅเบฒ

เบเบฒเบ™เบชเป‰เบฒเบ‡เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เป€เบงเบฅเบฒ kube เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบ”เป‰เบงเบเบŠเบธเบ”เบเบปเบ”เบฅเบฐเบšเบฝเบšเบเบฒเบ™เบเปเบฒเบ™เบปเบ”เป€เบงเบฅเบฒ

Kube-scheduler เป€เบ›เบฑเบ™เบญเบปเบ‡เบ›เบฐเบเบญเบšเบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™เบ‚เบญเบ‡ Kubernetes, เป€เบŠเบดเปˆเบ‡เบฎเบฑเบšเบœเบดเบ”เบŠเบญเบšเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเปเบฒเบ™เบปเบ”เป€เบงเบฅเบฒ pods เปƒเบ™เบ—เบปเปˆเบง nodes เบ•เบฒเบกเบ™เบฐเป‚เบเบšเบฒเบเบ—เบตเปˆเบเปเบฒเบ™เบปเบ”เป„เบงเป‰. เป€เบฅเบทเป‰เบญเบเป†, เปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ‡เบฒเบ™เบ‚เบญเบ‡เบเบธเปˆเบก Kubernetes, เบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบ„เบดเบ”เบเปˆเบฝเบงเบเบฑเบšเบ™เบฐเป‚เบเบšเบฒเบเปƒเบ”เบ—เบตเปˆเบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเบˆเบฑเบ”เบ•เบฒเบ•เบฐเบฅเบฒเบ‡ pods, เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเบŠเบธเบ”เบ™เบฐเป‚เบเบšเบฒเบเบ‚เบญเบ‡ kube-scheduler เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เปเบกเปˆเบ™เป€เบซเบกเบฒเบฐเบชเบปเบกเบชเปเบฒเบฅเบฑเบšเบงเบฝเบเบ‡เบฒเบ™เบ›เบฐเบˆเปเบฒเบงเบฑเบ™เบชเปˆเบงเบ™เปƒเบซเบเปˆ. เบขเปˆเบฒเบ‡เปƒเบ”เบเปเปˆเบ•เบฒเบก, เบกเบตเบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบกเบฑเบ™เบชเปเบฒเบ„เบฑเบ™เบชเปเบฒเบฅเบฑเบšเบžเบงเบเป€เบฎเบปเบฒเบ—เบตเปˆเบˆเบฐเบ›เบฑเบšเบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบˆเบฑเบ”เบชเบฑเบ™เบเบฑเบ, เปเบฅเบฐเบกเบตเบชเบญเบ‡เบงเบดเบ—เบตเบ—เบตเปˆเบˆเบฐเป€เบฎเบฑเบ”เบชเปเบฒเป€เบฅเบฑเบ”เบงเบฝเบเบ‡เบฒเบ™เบ™เบตเป‰:

  1. เบชเป‰เบฒเบ‡เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เป€เบงเบฅเบฒ kube เบ”เป‰เบงเบเบŠเบธเบ”เบเบปเบ”เบฅเบฐเบšเบฝเบšเบ—เบตเปˆเบเปเบฒเบซเบ™เบปเบ”เป€เบญเบ‡
  2. เบ‚เบฝเบ™เบเปเบฒเบ™เบปเบ”เป€เบงเบฅเบฒเบ‚เบญเบ‡เบ—เปˆเบฒเบ™เป€เบญเบ‡เปเบฅเบฐเบชเบญเบ™เปƒเบซเป‰เบกเบฑเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบ‚เบญเบ‡เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ API

เปƒเบ™เบšเบปเบ”เบ„เบงเบฒเบกเบ™เบตเป‰, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบˆเบฐเบญเบฐเบ—เบดเบšเบฒเบเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบˆเบธเบ”เบ—เปเบฒเบญเบดเบ”เป€เบžเบทเปˆเบญเปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒเบเบฒเบ™เบเปเบฒเบ™เบปเบ”เป€เบงเบฅเบฒเบ—เบตเปˆเบšเปเปˆเบชเบฐเป€เบซเบกเบตเบเบฑเบ™เบ‚เบญเบ‡ hearths เปƒเบ™เป‚เบ„เบ‡เบเบฒเบ™เบซเบ™เบถเปˆเบ‡เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ.

เบเบฒเบ™เปเบ™เบฐเบ™เปเบฒเบชเบฑเป‰เบ™เป†เบเปˆเบฝเบงเบเบฑเบšเบงเบดเบ—เบตเบเบฒเบ™ kube-scheduler เป€เบฎเบฑเบ”เบงเบฝเบ

เบกเบฑเบ™เป€เบ›เบฑเบ™เบกเบนเบ™เบ„เปˆเบฒเป‚เบ”เบเบชเบฐเป€เบžเบฒเบฐเปเบกเปˆเบ™เบชเบฑเบ‡เป€เบเบ”เป€เบซเบฑเบ™เบ„เบงเบฒเบกเบˆเบดเบ‡เบ—เบตเปˆเบงเปˆเบฒ kube-scheduler เบšเปเปˆเบฎเบฑเบšเบœเบดเบ”เบŠเบญเบšเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเปเบฒเบ™เบปเบ”เป€เบงเบฅเบฒเบเบฑเบเป‚เบ”เบเบเบปเบ‡ - เบกเบฑเบ™เป€เบ›เบฑเบ™เบžเบฝเบ‡เปเบ•เปˆเบฎเบฑเบšเบœเบดเบ”เบŠเบญเบšเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเปเบฒเบ™เบปเบ”เบ‚เปเป‰เบ—เบตเปˆเบˆเบฐเบงเบฒเบ‡เบเบฑเบ. เปƒเบ™เบ„เปเบฒเบชเบฑเบšเบ•เปˆเบฒเบ‡เป†เบญเบทเปˆเบ™เป†, เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบ‚เบญเบ‡เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ‚เบญเบ‡ kube-scheduler เปเบกเปˆเบ™เบŠเบทเปˆเบ‚เบญเบ‡ node, เป€เบŠเบดเปˆเบ‡เบกเบฑเบ™เบเบฑเบšเบ„เบทเบ™เป„เบ›เบซเบฒเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ‚เบญเบ‡ API เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบเบฒเบ™เบเปเบฒเบ™เบปเบ”เป€เบงเบฅเบฒ, เปเบฅเบฐเบ™เบฑเป‰เบ™เปเบกเปˆเบ™เบšเปˆเบญเบ™เบ—เบตเปˆเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ‚เบญเบ‡เบกเบฑเบ™เบชเบดเป‰เบ™เบชเบธเบ”เบฅเบปเบ‡.

เบ—เปเบฒเบญเบดเบ”, kube-scheduler เบฅเบงเบšเบฅเบงเบกเบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡ nodes เบ—เบตเปˆ pod เบชเบฒเบกเบฒเบ”เบ–เบทเบเบเปเบฒเบ™เบปเบ”เป‚เบ”เบเบชเบญเบ”เบ„เปˆเบญเบ‡เบเบฑเบšเบ™เบฐเป‚เบเบšเบฒเบ predicates. เบ•เปเปˆเป„เบ›, เปเบ•เปˆเบฅเบฐ node เบˆเบฒเบเบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ™เบตเป‰เป„เบ”เป‰เบฎเบฑเบšเบˆเปเบฒเบ™เบงเบ™เบˆเบธเบ”เบ—เบตเปˆเปเบ™เปˆเบ™เบญเบ™เบ•เบฒเบกเบ™เบฐเป‚เบเบšเบฒเบเบšเบนเบฅเบดเบกเบฐเบชเบดเบ”. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, node เบ—เบตเปˆเบกเบตเบˆเปเบฒเบ™เบงเบ™เบชเบนเบ‡เบชเบธเบ”เบ‚เบญเบ‡เบˆเบธเบ”เป„เบ”เป‰เบ–เบทเบเป€เบฅเบทเบญเบ. เบ–เป‰เบฒเบกเบต nodes เบ—เบตเปˆเบกเบตเบ„เบฐเปเบ™เบ™เบชเบนเบ‡เบชเบธเบ”เบ”เบฝเบงเบเบฑเบ™, เป€เบ›เบฑเบ™เบญเบฑเบ™เบชเบธเปˆเบกเป€เบฅเบทเบญเบ. เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเปเบฅเบฐเบฅเบฒเบเบฅเบฐเบญเบฝเบ”เบ‚เบญเบ‡ predicates (เบเบฒเบ™เบเบฑเปˆเบ™เบ•เบญเบ‡) เปเบฅเบฐเบ„เบงเบฒเบกเบชเปเบฒเบ„เบฑเบ™ (เบเบฒเบ™เปƒเบซเป‰เบ„เบฐเปเบ™เบ™) เบ™เบฐเป‚เบเบšเบฒเบเบชเบฒเบกเบฒเบ”เบžเบปเบšเป€เบซเบฑเบ™เบขเบนเปˆเปƒเบ™ เป€เบญเบเบฐเบชเบฒเบ™.

เบฅเบฒเบโ€‹เบฅเบฐโ€‹เบญเบฝเบ”โ€‹เบ‚เบญเบ‡โ€‹เบฎเปˆเบฒเบ‡โ€‹เบเบฒเบโ€‹เบ‚เบญเบ‡โ€‹เบšเบฑเบ™โ€‹เบซเบฒโ€‹

เป€เบ–เบดเบ‡เบงเปˆเบฒเบˆเบฐเบกเบตเบˆเปเบฒเบ™เบงเบ™เบซเบผเบฒเบเบ‚เบญเบ‡เบเบธเปˆเบก Kubernetes เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เป„เบ”เป‰เบ–เบทเบเบฎเบฑเบเบชเบฒเป„เบงเป‰เบขเบนเปˆ Nixys, เบžเบงเบเป€เบฎเบปเบฒเบ—เปเบฒเบญเบดเบ”เบžเบปเบšเบšเบฑเบ™เบซเบฒเบ‚เบญเบ‡เบเบฒเบ™เบเปเบฒเบ™เบปเบ”เป€เบงเบฅเบฒ pods เบžเบฝเบ‡เปเบ•เปˆเบšเปเปˆเบ”เบปเบ™เบกเบฒเบ™เบตเป‰, เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบซเบ™เบถเปˆเบ‡เปƒเบ™เป‚เบ„เบ‡เบเบฒเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบˆเปเบฒเบ™เบงเบ™เบซเบผเบฒเบเบ‚เบญเบ‡เบงเบฝเบเบ‡เบฒเบ™เปเบ•เปˆเบฅเบฐเป„เบฅเบเบฐ (~100 CronJob entities). เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เปƒเบซเป‰เบฅเบฒเบเบฅเบฐเบญเบฝเบ”เบ‚เบญเบ‡เบšเบฑเบ™เบซเบฒเบ‡เปˆเบฒเบเบ‚เบถเป‰เบ™เบซเบผเบฒเบเป€เบ—เบปเปˆเบฒเบ—เบตเปˆเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป€เบญเบปเบฒเป€เบ›เบฑเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบซเบ™เบถเปˆเบ‡ microservice, เบžเบฒเบเปƒเบ™เบ—เบตเปˆเบงเบฝเบเบ‡เบฒเบ™ cron เป„เบ”เป‰เบ–เบทเบเป€เบ›เบตเบ”เบ•เบปเบงเบซเบ™เบถเปˆเบ‡เบ„เบฑเป‰เบ‡เบ•เปเปˆเบ™เบฒเบ—เบต, เบเบฒเบ™เบชเป‰เบฒเบ‡เบเบฒเบ™เป‚เบซเบผเบ”เบšเบฒเบ‡เบขเปˆเบฒเบ‡เปƒเบ™ CPU. เป€เบžเบทเปˆเบญเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบงเบฝเบเบ‡เบฒเบ™ cron, เบชเบฒเบก nodes เบ—เบตเปˆเบกเบตเบฅเบฑเบเบชเบฐเบ™เบฐเบ”เบฝเบงเบเบฑเบ™เบขเปˆเบฒเบ‡เปเบ—เป‰เบˆเบดเบ‡เป„เบ”เป‰เบ–เบทเบเบˆเบฑเบ”เบชเบฑเบ™ (24 vCPUs เปƒเบ™เปเบ•เปˆเบฅเบฐ).

เปƒเบ™เป€เบงเบฅเบฒเบ”เบฝเบงเบเบฑเบ™, เบกเบฑเบ™เป€เบ›เบฑเบ™เป„เบ›เบšเปเปˆเป„เบ”เป‰เบ—เบตเปˆเบˆเบฐเป€เบงเบปเป‰เบฒเป„เบ”เป‰เบขเปˆเบฒเบ‡เบ–เบทเบเบ•เป‰เบญเบ‡เบงเปˆเบฒ CronJob เบˆเบฐเปƒเบŠเป‰เป€เบงเบฅเบฒเบ”เบปเบ™เบ›เบฒเบ™เปƒเบ”เป€เบžเบทเปˆเบญเบ›เบฐเบ•เบดเบšเบฑเบ”, เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเบ›เบฐเบฅเบดเบกเบฒเบ™เบ‚เบญเบ‡เบ‚เปเป‰เบกเบนเบ™เบ›เป‰เบญเบ™เป€เบ‚เบปเป‰เบฒเบกเบตเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบขเปˆเบฒเบ‡เบ•เปเปˆเป€เบ™เบทเปˆเบญเบ‡. เป‚เบ”เบเบชเบฐเป€เบฅเปˆเบเปเบฅเป‰เบง, เปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ›เบปเบเบเบฐเบ•เบดเบ‚เบญเบ‡ kube-scheduler, เปเบ•เปˆเบฅเบฐ node เป€เบฎเบฑเบ”เบงเบฝเบ 3-4 เบ•เบปเบงเบขเปˆเบฒเบ‡, เป€เบŠเบดเปˆเบ‡เบชเป‰เบฒเบ‡ ~ 20-30% เบ‚เบญเบ‡เบเบฒเบ™เป‚เบซเบผเบ”เปƒเบ™ CPU เบ‚เบญเบ‡เปเบ•เปˆเบฅเบฐ node:

เบเบฒเบ™เบชเป‰เบฒเบ‡เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เป€เบงเบฅเบฒ kube เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบ”เป‰เบงเบเบŠเบธเบ”เบเบปเบ”เบฅเบฐเบšเบฝเบšเบเบฒเบ™เบเปเบฒเบ™เบปเบ”เป€เบงเบฅเบฒ

เบšเบฑเบ™เบซเบฒเบ•เบปเบงเบกเบฑเบ™เป€เบญเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบšเบฒเบ‡เบ„เบฑเป‰เบ‡ cron task pods เบขเบธเบ”เป€เบŠเบปเบฒเบเบฒเบ™เบเปเบฒเบ™เบปเบ”เป€เบงเบฅเบฒเบซเบ™เบถเปˆเบ‡เปƒเบ™เบชเบฒเบก nodes. เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เปƒเบ™เบšเบฒเบ‡เป€เบงเบฅเบฒ, เบšเปเปˆเปเบกเปˆเบ™เบเบฑเบเบ”เบฝเบงเป„เบ”เป‰เบ–เบทเบเบงเบฒเบ‡เปเบœเบ™เป„เบงเป‰เบชเปเบฒเบฅเบฑเบšเบซเบ™เบถเปˆเบ‡เบ‚เบญเบ‡ nodes, เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบญเบตเบเบชเบญเบ‡ nodes 6-8 เบชเปเบฒเป€เบ™เบปเบฒเบ‚เบญเบ‡เบซเบ™เป‰เบฒเบงเบฝเบเบเปเบฒเบฅเบฑเบ‡เปเบฅเปˆเบ™, เบชเป‰เบฒเบ‡ ~ 40-60% เบ‚เบญเบ‡เบเบฒเบ™เป‚เบซเบผเบ” CPU:

เบเบฒเบ™เบชเป‰เบฒเบ‡เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เป€เบงเบฅเบฒ kube เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบ”เป‰เบงเบเบŠเบธเบ”เบเบปเบ”เบฅเบฐเบšเบฝเบšเบเบฒเบ™เบเปเบฒเบ™เบปเบ”เป€เบงเบฅเบฒ

เบšเบฑเบ™เบซเบฒเป€เบเบตเบ”เบ‚เบถเป‰เบ™เบเบฑเบšเบ„เบงเบฒเบกเบ–เบตเปˆเปเบšเบšเบชเบธเปˆเบกเบขเปˆเบฒเบ‡เปเบ—เป‰เบˆเบดเบ‡ เปเบฅเบฐเป€เบ›เบฑเบ™เบšเบฒเบ‡เป‚เบญเบเบฒเบ”เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบ™เบเบฑเบšเบŠเปˆเบงเบ‡เป€เบงเบฅเบฒเบ—เบตเปˆเบฅเบฐเบซเบฑเบ”เบชเบฐเบšเบฑเบšเปƒเปเปˆเบ–เบทเบเป€เบ›เบตเบ”เบ•เบปเบง.

เป‚เบ”เบเบเบฒเบ™เป€เบžเบตเปˆเบกเบฅเบฐเบ”เบฑเบšเบเบฒเบ™เบšเบฑเบ™เบ—เบถเบ kube-scheduler เป€เบ›เบฑเบ™เบฅเบฐเบ”เบฑเบš 10 (-v=10), เบžเบงเบเป€เบฎเบปเบฒเป€เบฅเบตเปˆเบกเบšเบฑเบ™เบ—เบถเบเบงเปˆเบฒเปเบ•เปˆเบฅเบฐ node เป„เบ”เป‰เบฎเบฑเบšเบซเบผเบฒเบเบ›เบฒเบ™เปƒเบ”เปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ›เบฐเป€เบกเบตเบ™เบœเบปเบ™. เปƒเบ™โ€‹เบฅเบฐโ€‹เบซเบงเปˆเบฒเบ‡โ€‹เบเบฒเบ™โ€‹เบ”เปเบฒโ€‹เป€เบ™เบตเบ™โ€‹เบ‡เบฒเบ™โ€‹เบเบฒเบ™โ€‹เบงเบฒเบ‡โ€‹เปเบœเบ™โ€‹เบ›เบปเบโ€‹เบเบฐโ€‹เบ•เบดโ€‹, เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹เบ”เบฑเปˆเบ‡โ€‹เบ•เปเปˆโ€‹เป„เบ›โ€‹เบ™เบตเป‰โ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เป€เบซเบฑเบ™โ€‹เป„เบ”เป‰โ€‹เปƒเบ™โ€‹เบšเบฑเบ™โ€‹เบ—เบถเบโ€‹:

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

เบˆเบฒเบเบ—เบตเปˆเบกเบฑเบ™เบชเบฒเบกเบฒเบ”เป€เบซเบฑเบ™เป„เบ”เป‰เบงเปˆเบฒเบซเบ™เบถเปˆเบ‡เปƒเบ™ nodes เป„เบ”เป‰เบ„เบฐเปเบ™เบ™เบชเบธเบ”เบ—เป‰เบฒเบเบซเบ™เป‰เบญเบเบเปˆเบงเบฒเบญเบทเปˆเบ™เป†, เปเบฅเบฐเบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบเบฒเบ™เบงเบฒเบ‡เปเบœเบ™เป„เบ”เป‰เบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เบžเบฝเบ‡เปเบ•เปˆเบชเปเบฒเบฅเบฑเบšเบชเบญเบ‡ nodes เบ—เบตเปˆเป„เบ”เป‰เบ„เบฐเปเบ™เบ™เบชเบนเบ‡เบชเบธเบ”. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบžเบงเบเป€เบฎเบปเบฒเป€เบŠเบทเปˆเบญเบซเบกเบฑเป‰เบ™เบขเปˆเบฒเบ‡เปเบ™เปˆเบ™เบญเบ™เบงเปˆเบฒเบšเบฑเบ™เบซเบฒเปเบกเปˆเบ™เบขเบนเปˆเปƒเบ™เบเบฒเบ™เบเปเบฒเบ™เบปเบ”เป€เบงเบฅเบฒเบ‚เบญเบ‡เบเบฑเบ.

เบชเบนเบ”เบเบฒเบ™เบ„เบดเบ”เป„เบฅเปˆเป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒเปเบกเปˆเบ™เป€เบซเบฑเบ™เป„เบ”เป‰เบŠเบฑเบ”เป€เบˆเบ™เบชเปเบฒเบฅเบฑเบšเบžเบงเบเป€เบฎเบปเบฒ - เบงเบดเป€เบ„เบฒเบฐเบšเบฑเบ™เบ—เบถเบ, เป€เบ‚เบปเป‰เบฒเปƒเบˆเบชเบดเปˆเบ‡เบ—เบตเปˆเบšเบนเบฅเบดเบกเบฐเบชเบดเบ”เบ‚เบญเบ‡ node เบšเปเปˆเป„เบ”เป‰เบ„เบฐเปเบ™เบ™เบˆเบธเบ”เปเบฅเบฐ, เบ–เป‰เบฒเบˆเปเบฒเป€เบ›เบฑเบ™, เบ›เบฑเบšเบ™เบฐเป‚เบเบšเบฒเบเบ‚เบญเบ‡เบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™ kube-scheduler. เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เปƒเบ™เบ—เบตเปˆเบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเบ›เบฐเป€เบŠเบตเบ™เบเบฑเบšเบชเบญเบ‡เบ„เบงเบฒเบกเบซเบเบธเป‰เบ‡เบเบฒเบเบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™:

  1. เปƒเบ™เบฅเบฐเบ”เบฑเบšเบเบฒเบ™เบšเบฑเบ™เบ—เบถเบเบชเบนเบ‡เบชเบธเบ” (10), เบˆเบธเบ”เบ—เบตเปˆเป„เบ”เป‰เบฎเบฑเบšเบžเบฝเบ‡เปเบ•เปˆเบชเปเบฒเบฅเบฑเบšเบšเบฒเบ‡เบšเบนเบฅเบดเบกเบฐเบชเบดเบ”เปเบกเปˆเบ™เบชเบฐเบ—เป‰เบญเบ™เปƒเบซเป‰เป€เบซเบฑเบ™. เปƒเบ™เบšเบปเบ”เบšเบฑเบ™เบ—เบถเบเบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบซเบฑเบ™เป„เบ”เป‰เบงเปˆเบฒเบชเปเบฒเบฅเบฑเบšเบšเบนเบฅเบดเบกเบฐเบชเบดเบ”เบ—เบฑเบ‡เบซเบกเบปเบ”เบ—เบตเปˆเบชเบฐเบ—เป‰เบญเบ™เปƒเบซเป‰เป€เบซเบฑเบ™เบขเบนเปˆเปƒเบ™เบšเบฑเบ™เบ—เบถเบ, nodes เบ„เบฐเปเบ™เบ™เบ”เบฝเบงเบเบฑเบ™เบ‚เบญเบ‡เบˆเบธเบ”เบ”เบฝเบงเบเบฑเบ™เปƒเบ™เบเบฒเบ™เบเปเบฒเบ™เบปเบ”เป€เบงเบฅเบฒเบ›เบปเบเบเบฐเบ•เบดเปเบฅเบฐเบšเบฑเบ™เบซเบฒ, เปเบ•เปˆเบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบชเบธเบ”เบ—เป‰เบฒเบเปƒเบ™เบเปเบฅเบฐเบ™เบตเบ‚เบญเบ‡เบเบฒเบ™เบงเบฒเบ‡เปเบœเบ™เบšเบฑเบ™เบซเบฒเปเบกเปˆเบ™เปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบชเบฐเบซเบผเบธเบšเป„เบ”เป‰เบงเปˆเบฒเบชเปเบฒเบฅเบฑเบšเบšเบฒเบ‡เบšเบนเบฅเบดเบกเบฐเบชเบดเบ”, เบเบฒเบ™เปƒเบซเป‰เบ„เบฐเปเบ™เบ™เป€เบเบตเบ”เบ‚เบทเป‰เบ™ "เบขเบนเปˆเป€เบšเบทเป‰เบญเบ‡เบซเบผเบฑเบ‡", เปเบฅเบฐเบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเบกเบตเบ—เบฒเบ‡เบ—เบตเปˆเบˆเบฐเป€เบ‚เบปเป‰เบฒเปƒเบˆเบงเปˆเบฒเบšเบนเบฅเบดเบกเบฐเบชเบดเบ”เปƒเบ”เบ—เบตเปˆเป‚เบซเบ™เบ”เบšเปเปˆเป„เบ”เป‰เบฎเบฑเบšเบˆเบธเบ”. เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบญเบฐเบ—เบดเบšเบฒเบเบšเบฑเบ™เบซเบฒเบ™เบตเป‰เบขเปˆเบฒเบ‡เบฅเบฐเบญเบฝเบ”เปƒเบ™ เบšเบฑเบ™เบซเบฒ Kubernetes repository เปƒเบ™ Github. เปƒเบ™เป€เบงเบฅเบฒเบ‚เบฝเบ™, เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบ•เบญเบšเบฎเบฑเบšเบˆเบฒเบเบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒเบงเปˆเบฒเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบเบฒเบ™เบšเบฑเบ™เบ—เบถเบเบˆเบฐเบ–เบทเบเป€เบžเบตเปˆเบกเป€เบ‚เบปเป‰เบฒเปƒเบ™เบเบฒเบ™เบ›เบฑเบšเบ›เบธเบ‡ Kubernetes v1.15,1.16, 1.17 เปเบฅเบฐ XNUMX.
  2. เบšเปเปˆเบกเบตเบงเบดเบ—เบตเบ‡เปˆเบฒเบเป†เบ—เบตเปˆเบˆเบฐเป€เบ‚เบปเป‰เบฒเปƒเบˆเบงเปˆเบฒเบŠเบธเบ”เบ™เบฐเป‚เบเบšเบฒเบเบชเบฐเป€เบžเบฒเบฐเปƒเบ”เบ—เบตเปˆ kube-scheduler เบเบณเบฅเบฑเบ‡เป€เบฎเบฑเบ”เบงเบฝเบเบขเบนเปˆ. เปเบกเปˆเบ™เปเบฅเป‰เบง, เปƒเบ™ เป€เบญเบเบฐเบชเบฒเบ™ เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ™เบตเป‰เปเบกเปˆเบ™เบขเบนเปˆเปƒเบ™เบฅเบฒเบเบŠเบทเปˆ, เปเบ•เปˆเบกเบฑเบ™เบšเปเปˆเบกเบตเบ‚เปเป‰เบกเบนเบ™เบเปˆเบฝเบงเบเบฑเบšเบ™เป‰เปเบฒเบซเบ™เบฑเบเบชเบฐเป€เบžเบฒเบฐเปƒเบ”เบ—เบตเปˆเบ–เบทเบเบกเบญเบšเบซเบกเบฒเบเปƒเบซเป‰เปเบ•เปˆเบฅเบฐเบ™เบฐเป‚เบเบšเบฒเบเบšเบนเบฅเบดเบกเบฐเบชเบดเบ”. เบ—เปˆเบฒเบ™โ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เป€เบšเบดเปˆเบ‡โ€‹เบ™โ€‹เป‰โ€‹เปเบฒโ€‹เบซเบ™เบฑเบโ€‹เบซเบผเบทโ€‹เปเบเป‰โ€‹เป„เบ‚โ€‹เบ™เบฐโ€‹เป‚เบโ€‹เบšเบฒเบโ€‹เบ‚เบญเบ‡โ€‹เบ„เปˆเบฒโ€‹เป€เบฅเบตเปˆเบกโ€‹เบ•เบปเป‰เบ™ kube-scheduler เบžเบฝเบ‡โ€‹เปเบ•เปˆโ€‹เปƒเบ™ เบฅเบฐเบซเบฑเบ”เปเบซเบผเปˆเบ‡.

เบกเบฑเบ™เป€เบ›เบฑเบ™เบกเบนเบ™เบ„เปˆเบฒเบ—เบตเปˆเบชเบฑเบ‡เป€เบเบ”เบงเปˆเบฒเป€เบกเบทเปˆเบญเบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบšเบฑเบ™เบ—เบถเบเบงเปˆเบฒ node เบšเปเปˆเป„เบ”เป‰เบฎเบฑเบšเบˆเบธเบ”เบ•เบฒเบกเบ™เบฐเป‚เบเบšเบฒเบ ImageLocalityPriority, เป€เบŠเบดเปˆเบ‡เปƒเบซเป‰เบฅเบฒเบ‡เบงเบฑเบ™เบŠเบตเป‰เป„เบ›เบซเบฒ node เบ–เป‰เบฒเบกเบฑเบ™เบกเบตเบฎเบนเบšเบžเบฒเบšเบ—เบตเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เป€เบžเบทเปˆเบญเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™. เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบชเบฐเบšเบฑเบšเปƒเบซเบกเปˆเป„เบ”เป‰เป€เบ›เบตเบ”เบ•เบปเบง, เบงเบฝเบเบ‡เบฒเบ™ cron เป„เบ”เป‰เบ–เบทเบเบ„เบธเป‰เบกเบ„เบญเบ‡เป€เบžเบทเปˆเบญเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เปƒเบ™เบชเบญเบ‡ nodes, เบ”เบฒเบงเป‚เบซเบฅเบ”เบฎเบนเบšเบžเบฒเบšเปƒเบซเบกเปˆเบˆเบฒเบ docker registry เปƒเบซเป‰เบžเบงเบเป€เบ‚เบปเบฒ, เปเบฅเบฐเบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบ—เบฑเบ‡เบชเบญเบ‡ nodes เป„เบ”เป‰เบฎเบฑเบšเบ„เบฐเปเบ™เบ™เบชเบธเบ”เบ—เป‰เบฒเบเบ—เบตเปˆเบชเบนเบ‡เบเบงเปˆเบฒเบ—เบฝเบšเบเบฑเบšเบ—เบตเบชเบฒเบก. .

เบ”เบฑเปˆเบ‡เบ—เบตเปˆเบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบ‚เบฝเบ™เป„เบงเป‰เบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡, เปƒเบ™เบšเบฑเบ™เบ—เบถเบเบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเป€เบซเบฑเบ™เบ‚เปเป‰เบกเบนเบ™เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบ›เบฐเป€เบกเบตเบ™เบœเบปเบ™เบ‚เบญเบ‡เบ™เบฐเป‚เบเบšเบฒเบ ImageLocalityPriority, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เป€เบžเบทเปˆเบญเบเบงเบ”เป€เบšเบดเปˆเบ‡เบชเบปเบกเบกเบธเบ”เบ•เบดเบ–เบฒเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ, เบžเบงเบเป€เบฎเบปเบฒเบ–เบดเป‰เบกเบฎเบนเบšเบžเบฒเบšเบ—เบตเปˆเบกเบตเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบฎเบธเปˆเบ™เปƒเบซเบกเปˆเปƒเบชเปˆเป‚เบซเบ™เบ”เบ—เบตเบชเบฒเบก, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบเบฒเบ™เบเปเบฒเบ™เบปเบ”เป€เบงเบฅเบฒเป€เบฎเบฑเบ”เบงเบฝเบเบขเปˆเบฒเบ‡เบ–เบทเบเบ•เป‰เบญเบ‡. . เบกเบฑเบ™เป€เบ›เบฑเบ™เบ—เบตเปˆเบŠเบฑเบ”เป€เบˆเบ™เบเป‰เบญเบ™เบ™เบฐเป‚เบเบšเบฒเบ ImageLocalityPriority เบ—เบตเปˆเบšเบฑเบ™เบซเบฒเบเบฒเบ™เบเปเบฒเบ™เบปเบ”เป€เบงเบฅเบฒเป„เบ”เป‰เบ–เบทเบเบชเบฑเบ‡เป€เบเบ”เป€เบซเบฑเบ™เบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เบšเปเปˆเบ„เปˆเบญเบ; เป€เบฅเบทเป‰เบญเบเป†เบกเบฑเบ™เบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเบชเบดเปˆเบ‡เบญเบทเปˆเบ™. เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบ„เบงเบฒเบกเบˆเบดเบ‡เบ—เบตเปˆเบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเบชเบฒเบกเบฒเบ”เปเบเป‰เบšเบฑเบ™เบซเบฒเป„เบ”เป‰เบขเปˆเบฒเบ‡เป€เบ•เบฑเบกเบชเปˆเบงเบ™เปเบ•เปˆเบฅเบฐเบ™เบฐเป‚เบเบšเบฒเบเปƒเบ™เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบšเบนเบฅเบดเบกเบฐเบชเบดเบ”เบ‚เบญเบ‡เบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™ kube-scheduler, เบžเบงเบเป€เบฎเบปเบฒเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบกเบตเบเบฒเบ™เบ„เบธเป‰เบกเบ„เบญเบ‡เปเบšเบšเบเบทเบ”เบซเบเบธเปˆเบ™เบ‚เบญเบ‡เบ™เบฐเป‚เบเบšเบฒเบเบเบฒเบ™เบเปเบฒเบ™เบปเบ”เป€เบงเบฅเบฒ pod.

เบเบฒเบ™เบชเป‰เบฒเบ‡เบšเบฑเบ™เบซเบฒ

เบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เบเบฒเบ™เปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒเบชเบฐเป€เบžเบฒเบฐเป€เบ—เบปเปˆเบฒเบ—เบตเปˆเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰, เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เบซเบ™เปˆเบงเบเบ‡เบฒเบ™เบ•เบปเป‰เบ™เบ•เปเบ‚เบญเบ‡ Kubernetes (เบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™ kube-scheduler) เบ„เบงเบ™เบˆเบฐเบšเปเปˆเบ›เปˆเบฝเบ™เปเบ›เบ‡. เบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒเบขเบนเปˆเปƒเบ™เบชเบฐเบ–เบฒเบ™เบ—เบตเปˆเบซเบ™เบถเปˆเบ‡เปเบฅเบฐเบชเป‰เบฒเบ‡เบกเบฑเบ™เบขเบนเปˆเปƒเบ™เบšเปˆเบญเบ™เบญเบทเปˆเบ™. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบžเบงเบเป€เบฎเบปเบฒเบกเบฒเบฎเบญเบ”เบชเบญเบ‡เบ—เบฒเบ‡เป€เบฅเบทเบญเบเปƒเบ™เบเบฒเบ™เปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒ, เป€เบŠเบดเปˆเบ‡เป„เบ”เป‰เบ–เบทเบเบ›เบฐเบเบฒเบ”เปƒเบ™เบšเบปเบ”เปเบ™เบฐเบ™เปเบฒ - เบเบฒเบ™เบชเป‰เบฒเบ‡เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบซเบผเบทเบเบฒเบ™เบ‚เบฝเบ™เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เป€เบญเบ‡. เบ„เบงเบฒเบกเบ•เป‰เบญเบ‡เบเบฒเบ™เบ•เบปเป‰เบ™เบ•เปเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเปเบฒเบ™เบปเบ”เป€เบงเบฅเบฒเบงเบฝเบเบ‡เบฒเบ™ cron เปเบกเปˆเบ™เบเบฒเบ™เปเบˆเบเบขเบฒเบเบเบฒเบ™เป‚เบซเบผเบ”เป€เบ—เบปเปˆเบฒเบ—เบฝเบกเบเบฑเบ™เปƒเบ™เบ—เบปเปˆเบงเบชเบฒเบกเป‚เบซเบ™เบ”. เบ„เบงเบฒเบกเบ•เป‰เบญเบ‡เบเบฒเบ™เบ™เบตเป‰เบชเบฒเบกเบฒเบ”เบžเปเปƒเบˆเป„เบ”เป‰เป‚เบ”เบเบ™เบฐเป‚เบเบšเบฒเบ kube-scheduler เบ—เบตเปˆเบกเบตเบขเบนเปˆเปเบฅเป‰เบง, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เป€เบžเบทเปˆเบญเปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเบกเบตเบˆเบธเบ”เปƒเบ”เปƒเบ™เบเบฒเบ™เบ‚เบฝเบ™เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เป€เบญเบ‡.

เบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบชเป‰เบฒเบ‡เปเบฅเบฐเบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡ kube-scheduler เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเปเบกเปˆเบ™เป„เบ”เป‰เบญเบฐเบ—เบดเบšเบฒเบเป„เบงเป‰เปƒเบ™ เป€เบญเบเบฐเบชเบฒเบ™. เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เบกเบฑเบ™เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเบงเปˆเบฒเบซเบ™เปˆเบงเบเบ‡เบฒเบ™ Deployment เบšเปเปˆเบžเบฝเบ‡เบžเปเบ—เบตเปˆเบˆเบฐเบฎเบฑเบšเบ›เบฐเบเบฑเบ™เบ„เบงเบฒเบกเบ—เบปเบ™เบ—เบฒเบ™เบ•เปเปˆเบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เปƒเบ™เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™เบ‚เบญเบ‡เบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™เป€เบŠเบฑเปˆเบ™ kube-scheduler, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบžเบงเบเป€เบฎเบปเบฒเบˆเบถเปˆเบ‡เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเบ—เบตเปˆเบˆเบฐเปƒเบŠเป‰ kube-scheduler เปƒเบซเบกเปˆเป€เบ›เบฑเบ™ Static Pod, เป€เบŠเบดเปˆเบ‡เบˆเบฐเบ–เบทเบเบ•เบดเบ”เบ•เบฒเบกเป‚เบ”เบเบเบปเบ‡. เป‚เบ”เบ Kubelet. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบžเบงเบเป€เบฎเบปเบฒเบกเบตเบ„เบงเบฒเบกเบ•เป‰เบญเบ‡เบเบฒเบ™เบ”เบฑเปˆเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰เบชเปเบฒเบฅเบฑเบš kube-scheduler เปƒเบซเบกเปˆ:

  1. เบšเปเบฅเบดเบเบฒเบ™เบ•เป‰เบญเบ‡เบ–เบทเบเบ™เบณเปƒเบŠเป‰เป€เบ›เบฑเบ™ Static Pod เบขเบนเปˆเปƒเบ™เบเบธเปˆเบกเปเบกเปˆเบšเบปเบ”เบ—เบฑเบ‡เปเบปเบ”
  2. เบ„เบงเบฒเบกเบ—เบปเบ™เบ—เบฒเบ™เบ•เปเปˆเบ„เบงเบฒเบกเบœเบดเบ”เบˆเบฐเบ•เป‰เบญเบ‡เบ–เบทเบเบชเบฐเปœเบญเบ‡เปƒเบซเป‰ เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ—เบตเปˆเบเบญเบ”เบ—เบตเปˆเปƒเบŠเป‰เบขเบนเปˆเบเบฑเบš kube-scheduler เบšเปเปˆเบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เป„เบ”เป‰
  3. เบšเบนเบฅเบดเบกเบฐเบชเบดเบ”เบ•เบปเป‰เบ™เบ•เปเปƒเบ™เป€เบงเบฅเบฒเบงเบฒเบ‡เปเบœเบ™เบ„เบงเบ™เบˆเบฐเป€เบ›เบฑเบ™เบˆเปเบฒเบ™เบงเบ™เบ‚เบญเบ‡เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ—เบตเปˆเบกเบตเบขเบนเปˆเปƒเบ™ node (LeastRequestedPriority)

เบเบฒเบ™เปเบเป‰เป„เบ‚เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”

เบกเบฑเบ™เป€เบ›เบฑเบ™เบกเบนเบ™เบ„เปˆเบฒเบ—เบตเปˆเบชเบฑเบ‡เป€เบเบ”เบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบ›เบฐเบ•เบดเบšเบฑเบ”เบงเบฝเบเบ‡เบฒเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เปƒเบ™ Kubernetes v1.14.7, เป€เบžเบฒเบฐเบงเปˆเบฒ เบ™เบตเป‰เปเบกเปˆเบ™เบชเบฐเบšเบฑเบšเบ—เบตเปˆเบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เปƒเบ™เป‚เบ„เบ‡เบเบฒเบ™. เปƒเบซเป‰เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ”เป‰เบงเบเบเบฒเบ™เบ‚เบฝเบ™ manifesto เบชเปเบฒเบฅเบฑเบš kube-scheduler เปƒเบซเบกเปˆเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ. เปƒเบซเป‰เป€เบฎเบปเบฒเป€เบญเบปเบฒ manifest เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™ (/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) เบˆเบฒเบเป‚เบฎเบ”

เบขเปˆเบฒเบฅเบทเบกเบงเปˆเบฒ 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"

เป‚เบ”เบเบซเบเปเป‰เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบ•เบปเป‰เบ™เบ•เป:

  1. เบžเบงเบเป€เบฎเบปเบฒเบ•เบฑเป‰เบ‡ ScheduleName เป€เบ›เบฑเบ™เบŠเบทเปˆเบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™ kube-scheduler-cron เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ.
  2. เปƒเบ™เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบต lockObjectName เบ—เปˆเบฒเบ™เบเบฑเบ‡เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป„เบ”เป‰เบเปเบฒเบ™เบปเบ”เบŠเบทเปˆเบ‚เบญเบ‡เบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเปเบฅเบฐเปƒเบซเป‰เปเบ™เปˆเปƒเบˆเบงเปˆเบฒเบžเบฒเบฅเบฒเบกเบดเป€เบ•เบต leaderElect เบ•เบฑเป‰เบ‡เป€เบ›เบฑเบ™ true (เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบกเบต master node เบ”เบฝเบง, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ•เบฑเป‰เบ‡เบกเบฑเบ™เป€เบ›เบฑเบ™ false).
  3. เบฅเบฐเบšเบธเป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เป„เบ›เบซเบฒเป„เบŸเบฅเปŒเบ—เบตเปˆเบกเบตเบฅเบฒเบเบฅเบฐเบญเบฝเบ”เบ‚เบญเบ‡เบ™เบฐเป‚เบเบšเบฒเบเบเบฒเบ™เบเปเบฒเบ™เบปเบ”เป€เบงเบฅเบฒเปƒเบ™เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบต algorithmSource.

เบกเบฑเบ™เป€เบ›เบฑเบ™เบกเบนเบ™เบ„เปˆเบฒเบเบฒเบ™เบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเบขเปˆเบฒเบ‡เปƒเบเป‰เบŠเบดเบ”เบขเบนเปˆเปƒเบ™เบˆเบธเบ”เบ—เบตเบชเบญเบ‡, เบšเปˆเบญเบ™เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเปเบเป‰เป„เบ‚เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบชเปเบฒเบฅเบฑเบšเบเบฐเปเบˆ leaderElection. เป€เบžเบทเปˆเบญเบฎเบฑเบšเบ›เบฐเบเบฑเบ™เบ„เบงเบฒเบกเบ—เบปเบ™เบ—เบฒเบ™เบ•เปเปˆเบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”, เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เป€เบ›เบตเบ”เปƒเบŠเป‰เบ‡เบฒเบ™ (leaderElect) เบ‚เบฐโ€‹เบšเบงเบ™โ€‹เบเบฒเบ™โ€‹เบ‚เบญเบ‡โ€‹เบเบฒเบ™โ€‹เบ„เบฑเบ”โ€‹เป€เบฅเบทเบญเบโ€‹เบœเบนเป‰โ€‹เบ™เปเบฒ (เปเบกเปˆโ€‹เบšเบปเบ”โ€‹) เบฅเบฐโ€‹เบซเบงเปˆเบฒเบ‡โ€‹เบเบฑเบโ€‹เบ‚เบญเบ‡โ€‹เบžเบงเบโ€‹เป€เบฎเบปเบฒ kube-scheduler เป‚เบ”เบโ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹เบˆเบธเบ”โ€‹เบชเบธเบ”โ€‹เบ—เป‰เบฒเบโ€‹เบ”เบฝเบงโ€‹เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เป€เบ‚เบปเบฒโ€‹เป€เบˆเบปเป‰เบฒ (resourceLock) เบŠเบทเปˆ kube-scheduler-cron (lockObjectName) เปƒเบ™ namespace เบฅเบฐโ€‹เบšเบปเบš 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 เบ—เปเบฒเบญเบดเบ”เบฅเบงเบšเบฅเบงเบกเบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡ nodes เบ—เบตเปˆ pod เบชเบฒเบกเบฒเบ”เบเปเบฒเบ™เบปเบ”เป„เบ”เป‰เบ•เบฒเบกเบ™เบฐเป‚เบเบšเบฒเบ GeneralPredicates (เป€เบŠเบดเปˆเบ‡เบ›เบฐเบเบญเบšเบกเบตเบŠเบธเบ”เบ‚เบญเบ‡ PodFitsResources, PodFitsHostPorts, HostName, เปเบฅเบฐ MatchNodeSelector policy). เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เปเบ•เปˆเบฅเบฐ node เป„เบ”เป‰เบ–เบทเบเบ›เบฐเป€เบกเบตเบ™เป‚เบ”เบเบชเบญเบ”เบ„เปˆเบญเบ‡เบเบฑเบšเบŠเบธเบ”เบ‚เบญเบ‡เบ™เบฐเป‚เบเบšเบฒเบเปƒเบ™ array เบšเบนเบฅเบดเบกเบฐเบชเบดเบ”. โ€‹เป€เบžเบทเปˆเบญโ€‹เบ›เบฐเบ•เบดเบšเบฑเบ”โ€‹เป€เบ‡เบทเปˆเบญเบ™โ€‹เป„เบ‚โ€‹เบ‚เบญเบ‡โ€‹เบงเบฝเบโ€‹เบ‡เบฒเบ™โ€‹เบ‚เบญเบ‡โ€‹เบžเบงเบโ€‹เป€เบฎเบปเบฒ, เบžเบงเบโ€‹เบ‚เป‰เบฒเบžเบฐโ€‹เป€เบˆเบปเป‰เบฒโ€‹เบ–เบทโ€‹เบงเปˆเบฒโ€‹เบšเบฑเบ™เบ”เบฒโ€‹เบ™เบฐโ€‹เป‚เบเบšเบฒเบโ€‹เบ”เบฑเปˆเบ‡เบเปˆเบฒเบงโ€‹เบˆเบฐโ€‹เป€เบ›เบฑเบ™โ€‹เบเบฒเบ™โ€‹เปเบเป‰โ€‹เป„เบ‚โ€‹เบ—เบตเปˆโ€‹เบ”เบตโ€‹เบ—เบตเปˆโ€‹เบชเบธเบ”. เบ‚เป‰เบฒโ€‹เบžเบฐโ€‹เป€เบˆเบปเป‰เบฒโ€‹เบ‚เปโ€‹เป€เบ•เบทเบญเบ™โ€‹เบ—เปˆเบฒเบ™โ€‹เบงเปˆเบฒโ€‹เบŠเบธเบ”โ€‹เบ™เบฐโ€‹เป‚เบโ€‹เบšเบฒเบโ€‹เบ—เบตเปˆโ€‹เบกเบตโ€‹เบ„เปเบฒโ€‹เบญเบฐโ€‹เบ—เบดโ€‹เบšเบฒเบโ€‹เบฅเบฐโ€‹เบญเบฝเบ”โ€‹เบ‚เบญเบ‡โ€‹เบžเบงเบโ€‹เป€เบ‚เบปเบฒโ€‹เปเบกเปˆเบ™โ€‹เบกเบตโ€‹เบขเบนเปˆโ€‹เปƒเบ™ เป€เบญเบเบฐเบชเบฒเบ™. เป€เบžเบทเปˆเบญเบšเบฑเบ™เบฅเบธเบงเบฝเบเบ‡เบฒเบ™เบ‚เบญเบ‡เบ—เปˆเบฒเบ™, เบ—เปˆเบฒเบ™เบžเบฝเบ‡เปเบ•เปˆเบชเบฒเบกเบฒเบ”เบ›เปˆเบฝเบ™เบŠเบธเบ”เบ™เบฐเป‚เบเบšเบฒเบเบ—เบตเปˆเปƒเบŠเป‰เปเบฅเบฐเบเปเบฒเบ™เบปเบ”เบ™เป‰เปเบฒเบซเบ™เบฑเบเบ—เบตเปˆเป€เบซเบกเบฒเบฐเบชเบปเบกเบเบฑเบšเบžเบงเบเป€เบ‚เบปเบฒ.

เปƒเบซเป‰เป‚เบ—เบซเบฒ manifest เบ‚เบญเบ‡ kube-scheduler เปƒเบซเบกเปˆ, เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบชเป‰เบฒเบ‡เปƒเบ™เบ•เบญเบ™เบ•เบปเป‰เบ™เบ‚เบญเบ‡เบšเบปเบ”, kube-scheduler-custom.yaml เปเบฅเบฐเบงเบฒเบ‡เบกเบฑเบ™เบขเบนเปˆเปƒเบ™เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰ /etc/kubernetes/manifests เปƒเบ™เบชเบฒเบกเปเบกเปˆเบšเบปเบ”. เบ–เป‰เบฒเบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เบ–เบทเบเป€เบฎเบฑเบ”เบขเปˆเบฒเบ‡เบ–เบทเบเบ•เป‰เบญเบ‡, Kubelet เบˆเบฐเป€เบ›เบตเบ”เบ•เบปเบง pod เปƒเบ™เปเบ•เปˆเบฅเบฐ node, เปเบฅเบฐเปƒเบ™เบšเบฑเบ™เบ—เบถเบเบ‚เบญเบ‡ 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 เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบงเปˆเบฒเบ—เบธเบเบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเปเบฒเบ™เบปเบ”เป€เบงเบฅเบฒเบเบฑเบเบ‚เบญเบ‡เบกเบฑเบ™เบ„เบงเบ™เบˆเบฐเบ–เบทเบเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เป‚เบ”เบ kube-scheduler เปƒเบซเบกเปˆเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ:

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

เบชเบฐเบซเบฅเบธเบš

เปƒเบ™เบ—เบตเปˆเบชเบธเบ”, เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบฎเบฑเบšเบ•เบปเบงเบเปเบฒเบ™เบปเบ”เป€เบงเบฅเบฒ kube เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบ—เบตเปˆเบกเบตเบŠเบธเบ”เบ™เบฐเป‚เบเบšเบฒเบเบเบฒเบ™เบเปเบฒเบ™เบปเบ”เป€เบงเบฅเบฒเบ—เบตเปˆเป€เบ›เบฑเบ™เป€เบญเบเบฐเบฅเบฑเบ, เบงเบฝเบเบ‡เบฒเบ™เบ—เบตเปˆเบ–เบทเบเบ•เบดเบ”เบ•เบฒเบกเป‚เบ”เบเบเบปเบ‡เป‚เบ”เบ kubelet. เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™, เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบˆเบฑเบ”เบ•เบฑเป‰เบ‡เบเบฒเบ™เป€เบฅเบทเบญเบเบ•เบฑเป‰เบ‡เบœเบนเป‰เบ™เปเบฒเปƒเบซเบกเปˆเบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฑเบเบ‚เบญเบ‡ kube-scheduler เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเปƒเบ™เบเปเบฅเบฐเบ™เบตเบ—เบตเปˆเบœเบนเป‰เบ™เปเบฒเป€เบเบปเปˆเบฒเบšเปเปˆเบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เป„เบ”เป‰เบเป‰เบญเบ™เป€เบซเบ”เบœเบปเบ™เบšเบฒเบ‡เบขเปˆเบฒเบ‡.

เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเปเบฅเบฐเบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เบ›เบปเบเบเบฐเบ•เบดเบเบฑเบ‡เบชเบทเบšเบ•เปเปˆเบ–เบทเบเบเปเบฒเบ™เบปเบ”เป‚เบ”เบเบœเปˆเบฒเบ™ kube-scheduler เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™, เปเบฅเบฐเบงเบฝเบเบ‡เบฒเบ™ cron เบ—เบฑเบ‡เบซเบกเบปเบ”เป„เบ”เป‰เบ–เบทเบเป‚เบญเบ™เป„เบ›เปƒเบซเบกเปˆเบขเปˆเบฒเบ‡เบชเบปเบกเบšเบนเบ™. เบเบฒเบ™เป‚เบซเบผเบ”เบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เป‚เบ”เบเบงเบฝเบเบ‡เบฒเบ™ cron เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เป„เบ”เป‰เบ–เบทเบเปเบˆเบเบขเบฒเบเบขเปˆเบฒเบ‡เป€เบ—เบปเปˆเบฒเบ—เบฝเบกเบเบฑเบ™เปƒเบ™เบ—เบปเปˆเบงเบ—เบธเบ nodes. เบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเบงเปˆเบฒเบงเบฝเบเบ‡เบฒเบ™ cron เบชเปˆเบงเบ™เปƒเบซเบเปˆเบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เบขเบนเปˆเปƒเบ™เบ‚เปเป‰เบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบ•เบปเป‰เบ™เบ•เปเบ‚เบญเบ‡เป‚เบ„เบ‡เบเบฒเบ™, เบ™เบตเป‰เป„เบ”เป‰เบซเบผเบธเบ”เบฅเบปเบ‡เบขเปˆเบฒเบ‡เบซเบผเบงเบ‡เบซเบผเบฒเบเบ„เบงเบฒเบกเบชเปˆเบฝเบ‡เบ‚เบญเบ‡เบเบฒเบ™เป€เบ„เบทเปˆเบญเบ™เบเป‰เบฒเบเบเบฑเบเป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบเบฒเบ™เบ‚เบฒเบ”เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™. เบซเบผเบฑเบ‡เบˆเบฒเบเบเบฒเบ™เปเบ™เบฐเบ™เปเบฒ kube-scheduler เป€เบžเบตเปˆเบกเป€เบ•เบตเบก, เบšเบฑเบ™เบซเบฒเบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบเปเบฒเบ™เบปเบ”เป€เบงเบฅเบฒเบ—เบตเปˆเบšเปเปˆเบชเบฐเป€เบซเบกเบตเบเบฑเบ™เบ‚เบญเบ‡เบงเบฝเบเบ‡เบฒเบ™ cron เบˆเบฐเบšเปเปˆเป€เบเบตเบ”เบ‚เบถเป‰เบ™.

เบญเปˆเบฒเบ™เบšเบปเบ”เบ„เบงเบฒเบกเบญเบทเปˆเบ™เป†เปƒเบ™ blog เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ:

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™