Всем привет!
Статья от learnk8s, посвященная принципам работы Kubernetes Scheduler. Как и все материалы от этих ребят – просто, понятно и крайне информативно.
Допустим мы сделали
kubectl apply -f smth, будущий ресурс сохранился в etcd и теперь надо его создать. Кто это делает? Нет, не Scheduler, ControllerManager 😊 То самое состояние pending.Далее уже Scheduler берется за дело. Определяет на каком узле кластера надо разместить ресурс и записывает эту информацию в etcd.
Самое интересное в том, что происходит при выборе узла:
🍭 Фильтрация узлов. Есть целых 13 predicates, которые использует Kubernetes (например,
CheckNodeCondition, PodMatchNodeSelector, CheckNodeDiskPressure и т.д.)🍭 Scoring. Расстановка приоритетов размещения ресурса среди узлов, прошедших фильтрацию. И тут есть собственные predicates (например,
NodeAffinityPriority, TaintTolerationPriority, LeastRequestedPriority)Помимо этого, в статье приводятся способы влияния на решение Scheduler - те самые
Affinity, Taints & Tolerations, NodeSelectors и другие! Весь материал подается с примерами и иллюстрациями для лучшего понимания ☺️ Самое «то» для пятницы!