← Назад к вопросам

Что такое Kubernetes Scheduler?

1.0 Junior🔥 111 комментариев
#Kubernetes

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что такое Kubernetes Scheduler

Kubernetes Scheduler (планировщик Kubernetes) — это ключевой компонент control plane (плоскости управления) Kubernetes, отвечающий за распределение подов (Pods) по рабочим узлам (Worker Nodes) кластера. Его основная задача — принимать непомещенные (unscheduled) поды, то есть те, у которых в спецификации поле nodeName не установлено, и находить для них наиболее подходящий узел, соблюдая при этом все заданные ограничения и требования.

Архитектура и принцип работы

Scheduler работает как отдельный процесс (обычно запущенный как kube-scheduler) и не является частью kubelet на узлах. Его работа делится на две основные фазы: фильтрация (Filtering) и оценка (Scoring).

1. Фаза фильтрации (Filtering)

На этом этапе Scheduler отфильтровывает узлы, которые не подходят для размещения пода, проверяя ряд условий:

  • Достаточно ли ресурсов (CPU, памяти) на узле для запросов пода (requests).
  • Соответствие правилам привязки к узлу (nodeSelector, nodeAffinity).
  • Учет ограничений (taints и tolerations).
  • Проверка доступности томов хранения (PersistentVolume), если они требуются.
  • Учет анти-аффинити (anti-affinity) между подами.

Узлы, прошедшие все фильтры, образуют список доступных узлов (feasible nodes).

# Пример Pod с nodeSelector, который Scheduler учтет при фильтрации
apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
spec:
  containers:
  - name: nginx
    image: nginx
  nodeSelector:
    disktype: ssd # Pod будет запланирован ТОЛЬКО на узлы с меткой disktype=ssd

2. Фаза оценки (Scoring)

Для каждого узла из списка доступных Scheduler вычисляет оценку (score) по ряду критериев. Узел с наивысшим итоговым баллом выбирается для размещения пода. Критерии включают:

  • Распределение ресурсов: Scheduler стремится сбалансировать нагрузку, предпочитая узлы с большим количеством свободных ресурсов (политики LeastAllocated, MostAllocated).
  • Аффинити и анти-аффинити между подами (podAffinity/podAntiAffinity).
  • Расположение данных: предпочтение узлам, где уже есть требуемые образы контейнеров (ImageLocality).

После выбора лучшего узла Scheduler делает привязку (Binding): он вызывает API-сервер Kubernetes, который обновляет объект Pod, записывая имя выбранного узла в поле spec.nodeName.

Настройка и расширяемость

Стандартный алгоритм планирования настраиваем и расширяем:

  • Профили планировщика (Scheduler Profiles): Позволяют настраивать, какие плагины фильтрации и оценки будут активны, и задавать их приоритет.
  • Политики планирования (Scheduling Policies): Устаревший, но все еще поддерживаемый механизм настройки предикатов (Predicates) и приоритетов (Priorities).
  • Планировщики-помощники (Multiple Schedulers): В одном кластере можно запустить несколько экземпляров планиров