Ответ
Requests и Limits — это механизмы управления вычислительными ресурсами (CPU и память) для контейнеров в Kubernetes, определяемые в спецификации Pod.
requests(запросы): Гарантированный минимум ресурсов, который Kubernetes резервирует для контейнера. Планировщик (Scheduler) использует эту информацию для размещения пода на ноде, где достаточно свободных ресурсов.limits(лимиты): Максимальное количество ресурсов, которое контейнер может использовать. Если контейнер пытается превысить лимит, Kubernetes его ограничивает.
Поведение при превышении:
- CPU: Если контейнер пытается использовать больше CPU, чем его
limit, ядро ОС ограничивает (throttles) его, не давая превысить лимит. Контейнер не завершается. - Память: Если контейнер использует больше памяти, чем его
limit, он рассматривается как кандидат на завершение. Если память на ноде становится критически низкой, контейнер с наибольшим превышением может быть принудительно завершен (OOMKilled).
Пример конфигурации в манифесте:
apiVersion: v1
kind: Pod
metadata:
name: frontend
spec:
containers:
- name: app
image: myapp:latest
resources:
requests:
memory: "256Mi"
cpu: "250m" # 250 милли-CPU (0.25 ядра)
limits:
memory: "512Mi"
cpu: "500m" # 500 милли-CPU (0.5 ядра)
Практические последствия:
- Качество обслуживания (QoS): На основе
requestsиlimitsKubernetes присваивает поду один из трех классов QoS:Guaranteed(еслиlimits=requests),Burstable(еслиrequests<limits),BestEffort(если не заданы). Это влияет на приоритет при нехватке ресурсов на ноде. - Планирование: Поды планируются на ноды на основе сумм
requestsвсех их контейнеров. - Мониторинг: Использование ресурсов относительно
limits— ключевая метрика для автоскейлинга (HPA/VPA).