Ответ
Первоначальное размещение пода на узле управляется компонентом kube-scheduler. Он отвечает за автоматический выбор подходящего узла для каждого нового пода, учитывая:
- Ресурсные требования и ограничения (requests/limits для CPU, памяти).
- Политики размещения: affinity/anti-affinity (притяжение/отталкивание подов друг от друга или от узлов), taints и tolerations ("загрязнения" узлов).
- Топологию распределения (например, распределение по зонам доступности).
Пример правила nodeAffinity для размещения на узлах с SSD:
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: disktype
operator: In
values:
- ssd
Перемещение уже работающих подов (эвакуация) — это отдельный процесс, которым напрямую управляет не scheduler, а администратор или система. Основные инструменты:
kubectl drain <node-name>: Безопасно удаляет все поды с узла, перенаправляя их на другие узлы (для контроллеров с репликами, например, Deployment).kubectl cordon <node-name>: Помечает узел как недоступный для планирования новых подов.kubectl delete pod <pod-name>: Принадлежащий ReplicaSet или Deployment под будет автоматически пересоздан на другом узле.- Cluster Autoscaler: Может инициировать перемещение подов при масштабировании кластера вниз.
- DaemonSet: Поды, управляемые DaemonSet, будут автоматически перезапущены на новом узле, если старый узел выходит из строя.