Ответ
Requests и Limits — это два ключевых параметра управления ресурсами для контейнеров в Pod'ах Kubernetes.
- Requests (Запросы): Это количество ресурсов (CPU и памяти), которое Kubernetes гарантирует контейнеру. Планировщик (Scheduler) использует эту информацию, чтобы разместить Pod на ноде, где достаточно свободных ресурсов. Если нода не может удовлетворить запросы, Pod не будет запущен.
- Limits (Лимиты): Это максимальное количество ресурсов, которое контейнеру разрешено использовать.
- Для CPU: Если контейнер пытается использовать больше CPU, чем его лимит, ядро Linux будет "throttle" (ограничивать) его, не давая превысить лимит.
- Для Памяти: Если контейнер превышает лимит памяти, он будет завершен с ошибкой OOMKilled (Out Of Memory).
Практический пример в манифесте:
apiVersion: v1
kind: Pod
metadata:
name: example-pod
spec:
containers:
- name: app
image: nginx
resources:
requests:
memory: "128Mi"
cpu: "100m" # 0.1 ядра CPU
limits:
memory: "256Mi"
cpu: "500m" # 0.5 ядра CPU
Важный нюанс: Если указаны только limits без requests, Kubernetes автоматически установит requests равными limits. Это может привести к неэффективному использованию ресурсов кластера, так как Pod зарезервирует себе максимум, даже если ему это не нужно.