Что такое Unschedulable?
Unschedulable статус означает, что под не может быть запланирован на узел из-за отсутствия ресурсов или конфликтующих политик.
Причины возникновения
- Недостаточно ресурсов на узлах
- Конфликтующие node selectors
- Проблемы с taints и tolerations
- Отсутствие подходящих узлов
Как отладить ошибку
- Проверь ресурсы узлов -
kubectl describe nodes
- Проверь PVC - убедись в доступности PersistentVolume
- Проверь node selectors - убедись в правильности селекторов
- Проверь taints и tolerations - убедись в совместимости
Как исправить ошибку
1. Добавь больше ресурсов
1# Проверь доступные ресурсы
2kubectl describe nodes
3
4# Уменьши запросы ресурсов в pod
5apiVersion: v1
6kind: Pod
7metadata:
8 name: my-app
9spec:
10 containers:
11 - name: app
12 image: my-app:latest
13 resources:
14 requests:
15 memory: "64Mi" # уменьши если нужно
16 cpu: "100m" # уменьши если нужно
2. Исправь PVC проблемы
3. Исправь node selectors
4. Добавь больше узлов
Как мониторить подобные ошибки
- Мониторь использование ресурсов узлов
- Настрой алерты на Pending поды
- Отслеживай события планирования
- Используй Kubernetes Events
FAQ
В: Как проверить, почему под не планируется?
О: Используй kubectl describe pod pod-name
и посмотри на секцию Events.
В: Что делать, если все узлы заняты?
О: Добавь больше узлов в кластер или оптимизируй использование ресурсов.
В: Как исправить проблемы с taints?
О: Добавь соответствующие tolerations в pod или удали taints с узлов.
Лучшие практики
- Устанавливай разумные запросы ресурсов
- Используй Horizontal Pod Autoscaler
- Мониторь использование ресурсов
- Настрой правильные node selectors
- Используй pod disruption budgets