Ответ
В Kubernetes Limit (лимит) — это максимальное количество вычислительных ресурсов (CPU и памяти), которое контейнер внутри Pod может использовать. Это жесткая граница.
Практическое значение лимитов:
- Память (memory): Если контейнер пытается использовать памяти больше, чем его лимит, он будет завершен с ошибкой OOMKilled (Out Of Memory). Kubernetes перезапустит Pod в соответствии с политикой
restartPolicy. - CPU: Контейнеру не позволят использовать больше CPU, чем указано в лимите. Ядро Linux (cgroups) будет его ограничивать, что может привести к троттлингу (throttling) и снижению производительности.
Пример определения лимитов в манифесте Pod:
apiVersion: v1
kind: Pod
metadata:
name: my-app
spec:
containers:
- name: app-container
image: myapp:latest
resources:
requests: # Гарантированный минимум
memory: "256Mi"
cpu: "250m"
limits: # Максимально допустимый предел
memory: "512Mi"
cpu: "500m"
Критически важные моменты для DevOps-инженера:
- Лимиты vs Requests:
limitsиrequests— разные вещи.requestsиспользуются планировщиком (scheduler) для размещения Pod на узле с достаточными свободными ресурсами.limits— это ограничение во время выполнения. - Безопасность узла: Правильно настроенные лимиты предотвращают ситуацию, когда один «прожорливый» Pod исчерпывает все ресурсы узла, вызывая проблемы у других Pod'ов ("noisy neighbor").
- Обязательность настройки: В продакшене настройка лимитов (и requests) считается best practice. Их отсутствие может привести к нестабильности кластера.
- Соотношение: Лимит памяти должен быть всегда больше или равен request'у памяти, иначе Pod не будет создан. Для CPU это правило не такое строгое, но разумное соотношение также важно.